云原生架构的核心技术(微服务、DevOps、容器云、Service Mesh、Serverless ...

打印 上一主题 下一主题

主题 548|帖子 548|积分 1654

天上飞的理念☁️☁️☁️☁️☁️,一定有落地的实现
  文章介绍
读完本文,你将对云原生下的核心概念微服务、DevOps、容器云、Service Mesh、Serverless、Immutable Infrastructure、Declarative-API等有一个详细的了解,资助你快速把握云原生的核心和要点。

  
名词扫盲



  • IaaS(Infrastructure-as-a-Service基础设施即服务)
    提供给消费者的服务是对所有设施的利用,包罗处理、存储、网络和其它根本的盘算资源,用户能够部署和运行恣意软件,包罗操纵体系和应用程序。主要功能就是讲底层的硬件资源以服务的方式对外袒露,为上层提供服务。IaaS模式下,只提供云盘算服务的基础设施,用户可以部署和运行恣意软件
  • SaaS(Software-as-a-Service软件即服务)
    提供给客户的服务是运营商运行在云盘算基础设施上的应用程序,用户可以在各种设备上通过客户端界面访问,如欣赏器。SaaS模式下,用户可以直接通过客户端使用云盘算服务,不必要管理任何软硬件
  • PaaS(Platform-as-a-Service平台即服务)
    是云盘算的紧张组成部门,提供给消费者的服务是把客户接纳提供的开发语言和工具开发的或收购的应用程序部署到供应商的云盘算基础设施上去。PaaS模式下,用户不必要管理和控制云盘算底层基础设施,直接使用和控制应用程序即可
  • BaaS(Backend as a Service)后端即服务
    应用架构由大量第三方云服务器和API组成的,使应用中关于服务器的逻辑和状态都由服务提供方来管理的。比如典型的Web应用和移动APP客户端应用,前后端交互主要是以RestAPI调用为主。只必要调用服务提供方的API即可完成相应的功能,比如常见的身份验证,云端数据/文件存储,消息推送,应用数据分析等。
  • FaaS(Function as a Service)函数即服务
    是一种实现无服务器盘算的方法,服务商提供一个平台,答应客户开发、运行和管理应用程序功能,而无需构建和维护通常与开发和启动应用程序相关的基础架构的复杂性。 按照此模子构建应用程序是实现“无服务器”体系结构的一种方式,通常在构建微服务应用程序时使用。
  • Xaas…
  • Kubernetes
    简称k8s,用8取代名字中央的8个字符“ubernete”而成的缩写。是Google开源的一个容器编排引擎,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目的是让部署容器化的应用简朴并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
  • 康威定律
    康威定律是马尔文康威1967提出的:计划体系的架构受制于产生这些计划的组织的沟通结构。通俗的来讲:产品一定是其(职员)组织沟通结构的缩影。

1. 云原生核心概念

1.1 微服务

微服务☁️: 微服务的核心就是传统的大的单体应用拆为更小的组件或模块,组件或模块就叫微服务。这个拆分是一个纵向的拆分。必要做到从底层的基础设施到数据库到应用中央件到软件应用部署包都能做到完全独立的一套。可以单独的从需求计划、开发、打包、部署,全部都能独立。实现各个微服务之间彻底的松耦合,同时各个微服务之间又能通过轻量的http rest接口举行交互和协同。微服务的核心就两点:大的单体要拆小,拆小的微服务接口要通过轻量的http rest接口协同。





1.2 DevOps

DevOps(开发运维一体化)DevelopmentOperations的组合词,核心就是持续集成和持续交付,必要将软件生命周期过程中的从需求开始到计划程序的开发、编译构建打包部署,从测试情况到生产情况整个过程能够实现全部的主动化。同时基于DevOps本身的发展又进一步和敏捷研发和主动化测试相关的最佳实践做了协同和集成。(要点1. 指开发、QA和运维三要素怎样更好的举行协同,最早的DevOps核心是在CI/CD 持续集成、持续部署,到了DevOps以后把持续集成、持续部署拓展到持续交付。2. 当前谈DevOps一般会和Scrum敏捷研发、过程管理一起来谈,因为要做到持续的集成和交付必须要有敏捷的迭代版本和其相配合。)

1.3 容器云

容器云:云原生里边核心概念容器云,容器云里边的两个核心,一个是Docker容器,一个是k8s的容器资源调度和编排。单纯的Docker容器只是一个IaaS资源层的东西。容器本身是比虚拟机更轻量化的资源隔离单位,虚拟机是独享具体的一个操纵体系,容器本身是架在操纵体系上面的,多个容器可以共享操纵体系,这是容器和虚拟机最大的区别。正是这个缘故起因容器本身的体积会比虚拟机小,创建、销毁、调度的速率也更比传统的虚拟机更快。容器本身是IaaS层的内容,所以必要联合k8s举行容器的资源调度和编排,来向上层提供PaaS层的服务能力。(当把容器和容器的编排、调度一起谈的时候就会变成Paas概念,当前最火的基于k8s和Docker形成的PaaS容器调度平台)。容器本身是共享底层的操纵体系,同时又能更好的做到CPU、内存、网络等资源的隔离。
1.4 Service Mesh

Service Mesh(服务网格):一个去中央化的服务管理框架。原来必要对服务、Api接口举行管理和管控,一般会用API网关将api接口注册和接入到api网关,由于 API网关本身是一个中央化的架构 ,所以所有的请求流量都可以通过API网关,这个时候API网关就很容易对流量举行拦截,同时对拦截以后的流量举行安全、日记、限流、熔断、链路监控等各种管控管理。当在去中央化的架构下面就没有这种会合化的流量管控点 ,所有对于流量的拦截就从API网关下沉到各个微服务中去,这就意味着必要在每个微服务端增加一个代理包,通过代理包来做流量的拦截,同时实现对流量的管控。当前在微服务服务网格的微服务管理里面也是同样的思路,比方开源Istio微服务管理框架,它会在为服务端下方一个sidecar(边车)代理,通过代理实现流量的拦截和管控。去中央化的管理仍然会有一个控制中央,控制中央仍然是中央化的,但是 实际的控制流和接口数据访问的消息流实现了分离,控制流只管服务的注册发现,实际的接口调用、服务访问是不通过控制中央的,纵然控制中央宕机也不会影响到接口服务的调用
1.5 Serverless

Serverless(无服务器架构):起首在云原生发展到后期以后。云原生的核心就是实现从资源到服务不断的向上抽象,开发职员越来越不会接触到底层的IT基础设施,只会接触各种技术服务能力,这些技术服务能力在Serverless架构里叫做BaaS(后端能力即服务)。
Serverless带来的另外一个变化是:在传统的云原生架构开发下,基于DevOps、微服务和容器云开发应用仍然会选择一个开发框架,仍然会涉及到开发应用的数据层、逻辑层以及上层的展现层,比方三层架构、五层架构。到了Serverless无服务器化以后,开发框架、开发情况、多层架构这些内容全部扬弃。任何一个功能的实现的核心全部变成一个个代码片断,通过各个代码片断去实现功能。通过代码片断组合、组装来实现复杂业务流程,这是Serverless未来盼望达到的效果。这一块在Serverless里边对于FaaS层(Function as a Service)功能函数即服务。
注意:Serverless 是指 “无服务器架构”,这里的 “无服务器” 并不是指程序不必要服务器运行,而是指我们的开发工作不必要关注服务器底层的资源。


1.6 Immutable Infrastructure

Immutable Infrastructure(不可变基础设施):传统的去做软件程序的部署,当部署到生产情况,部署到Tomcat中央件以后,如果要做变动,不管是程序的变动照旧配置的变动,都会在原来的生产情况去重新部署大概是对某一个配置直接举行修改。但是在云原生夸大的任何一个应用当部署到生产情况,形成一个容器实例以后,这个容器实例本身不应该在做任何的变化,它是不可变的。如果程序、配置发生修改了要基于容器镜像重新去新生成一个容器实例,同时把旧的容器实例销毁。
1.7 Declarative-API

Declarative-API(声明式API):声明式API是和下令式操纵相对应的概念,传统的创建一个容器必要实行一个下令行,在声明式API时代下,对于容器的创建起首去写一个yaml配置文件,在配置文件声明要做什么事情,同时做完事情以后盼望达到什么状态,只必要把配置文件写好。第二步在平台拿到这个声明式配置文件后,再去表明这个声明式API文件的内容,再去做相应的后端操纵,同时操纵完以后把各个底层的技术组件协调到必要的状态。声明式API下面,任何对生产情况、对软件的修改都不是直接去操纵一个下令,都是要先写声明、先写配置,写好的这份声明(yaml文件)是可以纳入配置管理里面会合做管控、管理的。方便当生产情况出现问题的时候能够快速去追溯之前对生产情况做过什么样的操纵,方便做相关的回退、回滚操纵。

2. Service Mesh(详细介绍)

当前,基于微服务架构搭建应用已成为主流的开发方式,构建微服务应用是每个开发者都可能要面临的工作。
然而,软件开发行业从来没有银弹,微服务架构在带给我们一系列便利的同时,依然存在缺点,其中的核心问题就是怎样管理服务间的网络通信和服务管理,特别是当你的应用规模变得越来越庞大时,这个问题会变得越发突出。(ps:银弹比喻为具有极端有效性的解决方法,作为杀手锏、最强杀招、王牌等的代称。可以明白为绝对的好)
当前微服务面临的问题:❓
1️⃣虽然框架本身屏蔽了分布式体系通信的一些通用功能实现细节,但开发者却要花更多精神去把握和管理复杂的框架本身,在实际应用中,去追踪息争决框架出现的问题也绝非易事;
2️⃣开发框架通常只支持一种或几种特定的语言,微服务一个紧张的特性就是语言无关(没有最好的编程语言, 只有最得当某一场景的编程语言,尤其是AI的兴起,一般大型互联网公司存在 C/C++、Java、Golang、PHP、Python、NodeJs 等语言的项目),但那些没有框架支持的语言编写的服务,很难融入面向微服务的架构体系,想随机应变的用多种语言实现架构体系中的差别模块也很难做到,这对微服务情况下差别语言开发提出了很大的挑战;
语言主要用途C操纵体系、嵌入式、驱动开发C++图形图像、科研、通信、桌面软件、游戏、游戏服务器C#Window桌面软件、.Net web、服务器JavaJava SE:跨平台的桌面应用,AndroidJava EE:企业级应用、web开发、服务器后端Java ME:手机应用,流行于非智能机时代Java Android:用于开发安卓应用Go或Golang,高性能的服务器应用,高并发性,比较年轻Erlang高并发服务器应用,多用于游戏PythonWeb、科学盘算、运维RubyWebPerl运维、文本处理,用的较少Lisp科研、一种逻辑语言,用于人工智能Node一个JavaScript运行情况(runtime)HaskellHaskell是一种标准化的、通用纯函数式编程语言,数学逻辑方面Scala一种雷同Java的编程语言,集成面向对象编程和函数式编程的各种特性JavaScrpit前端,在Node中可以做后端HTML/CSS标记语言,主要是给前端工程师构建页面应用Groovy用于Java虚拟机的一种敏捷的动态语言,完全兼容java的语法............ 3️⃣框架以lib库的形式和服务联编,复杂项目依赖时的库版本兼容问题非常棘手,同时,框架库的升级也无法对服务透明,服务会因为和业务无关的lib库升级而被迫升级;
所以,Service Mesh 技术就是为解决这些困难而生的, Service Mesh 解决了当下的微服务痛点
维基百科
   在软件架构中,服务网格是一个专用的基础设施层,用于使用代理促进服务或微服务之间的服务到服务通信。专用通信层可以提供很多利益,比方提供对通信的可观察性,提供安全连接,或主动重试和回退失败的请求。
服务网格由与应用程序中的每个服务配对的网络代理和一组任务管理流程组成。代理称为数据平面,管理进程称为控制平面。数据平面拦截差别服务之间的调用并“处理”它们;控制平面是网格的大脑,负责协调代理的行为,并为运维职员提供 API 来操纵和观察整个网络
  在云原生的技术体系之下,容器化已经成为了开发者部署应用的第一选择,在这种上下文之下Kubernetes又是首选的容器编排和调度体系。不过在k8s和容器化极大简化了应用部署之下,仍然有有一个能力必要开发者深度加入进来,那就是服务的管理能力。服务网格最初脱胎于简化服务息争耦服务管理能力的需求核心概念就是把服务管理的能力从开发者的代码中抽象出来放到一个单独的sidecar代理中实现,通过为每个服务的工作负载注入sidecar代理服务网格极大简化了服务管理的操纵。同时也将和开发者的代码举行解耦,今后之后开发者只必要关注业务代码而运维职员只必要操纵网格里的sidecar就可以实现服务的管理,可以说服务网格是云原生时代下服务管理能力的大势所趋。
在服务网格中,请求将通过地点基础架构层中的代理在微服务之间路由。正因如此,构成服务网格的各个代理有时也被称为"Sidecar"(边车),这是因为它们 与每个服务并行运行,而非在内部运行 。所以说,这些"Sidecar"代理(与每项服务分离)构成了 网格式网络,同时又与微服务相互协作。作为处理服务间通信的基础设施层,Service Mesh 可以资助开发者从服务通信问题的逆境中解脱出来,节流了开发和维护通信控制逻辑的繁重工作,,所以有些人将 Service Mesh 称作第二代微服务
Sidecar 模式从跨语言、更新发布和运维等方面入手,实现对业务服务的零侵入,更解藕于开发语言和单一技术栈,实现了完全隔离,为部署、升级带来了便利,做到了真正的基础设施层与业务逻辑层的彻底解耦让开发职员专注于业务。另一方面,Sidecar 可以更加速速地为应用服务提供更机动的扩展,而不必要应用服务的大量改造。
举个栗子: 拿健康设备比方小米手环来举例,人体的一些指标都会在设备上表现,设备就是本身个人的一个缩影。在服务网格里通过Sidecar模式,一个业务应用在跑的时候,时刻有一个Sidecar对业务容器举行管控。比如说有一个网站的容器在运行,旁边有一个对应的Sidecar容器,它可以接管网站的流入、流出流量,也能够看到网站的状态。联合微服务大趋势,可以想象企业里如果有一个复杂的企业业务,能拆解成一百个微服务,每个微服务都有一个Sidecar容器在旁边时刻去管控着业务服务。
另一方面,云原生是未来的软件构建方向,正在席卷整个软件开发行业。你所开发的应用不是已经上云,就是在上云的路上,而且或多或少已经引入了一些云原生架构的技术。而 Service Mesh 就是构建云原生应用中,不可或缺的一环
总结一下服务网格的几个特点

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

泉缘泉

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表