Istio 实践手册 | 服务网格介绍
作者:xcbeyond
博客:https://xcbeyond.cn/ 公众号:程序猿技术大咖
《Istio 实践手册》,从服务网格概念出发,将逐步渗透到 Istio 具体细节中来,旨在帮助 Istio 学习者、使用者快速掌握相关知识点,可作为 Istio 学习、实践手册,建议收藏!(不断更新中……)
在上一节《迎接新一代微服务架构》中,我们知道服务网格经历了 4 个重要阶段:
-
耦合阶段:高度耦合、重复实现、维护困难,在耦合架构设计中体现的最为突出,单体架构就是典型的代表。
-
公共 SDK:让基础设施功能设计成为公共 SDK,提高利用率,是解藕最有效的途径,比如 Spring Cloud 就是类似的方式。但学习成本高、特定语言实现,却将一部分人拦在了门外。
-
Sidecar 模式:再次深度解藕,不单单功能解藕,更从跨语言、更新发布和运维等方面入手,实现对业务服务的零侵入,更解藕于开发语言和单一技术栈,实现了完全隔离,为部署、升级带来了便利,做到了真正的基础设施层与业务逻辑层的彻底解耦。另一方面,Sidecar 可以更加快速地为应用服务提供更灵活的扩展,而不需要应用服务的大量改造。
-
Service Mesh:把 Sidecar 模式充分应用到一个庞大的微服务架构系统中来,为每个应用服务配套部署一个 Sidecar 代理,完成服务间复杂的通信,最终就会得到一个的网络拓扑结构,这就是服务网格,又称之为“Service Mesh“。它从本质上解决了传统微服务所面临的问题。
接下来,让我们一起全面、真正的开始了解服务网格吧!
1、云原生定义
在正式开始服务网格了解之前,我们先来看看另外一个与之相关的名词——“云原生”,因为在服务网格的技术圈子里,与之密不可分。
CNCF(Cloud Native Computing Foundation(云原生计算基金会))对云原生的定义:
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API。
从上图可知,服务网格是云原生体系的具体实现,是承载微服务架构理念的云原生技术形态。
-
微服务源自服务化架构设计理念,与敏捷开发 DevOps 理念的结合:微、小、快、独。
-
经过四代的技术演进,随着云计算发展到云原生阶段,服务网格则成为承载微服务理念的新一代技术形态。
当你开启服务网格的学习之路后,也就意味着已经踏入了云原生的领域。在这里,服务治理与业务逻辑逐步解耦,服务治理能力下沉到基础设施,服务网格以基础设施的方式提供无侵入的连接控制、安全、可监测性、灰度发布等治理能力,如华为云的 ASM、蚂蚁金服的 SOFAMesh 等,都是对服务网格的最佳实践。
2、服务网格定义
服务网格,又称之为 Service Mesh,作为服务间通信的基础设施层。轻量级高性能网络代理,提供安全的、快速的、可靠地服务间通讯,与实际应用部署一起,但对应用透明。应用作为服务的发起方,只需要用最简单的方式将请求发送给本地的服务网格代理,然后网格代理会进行后续的操作,如服务发现,负载均衡,最后将请求转发给目标服务。
服务网格目的是解决系统架构微服务化后的服务间通信和治理问题。服务网格由 Sidecar 节点组成,这个模式的精髓在于实现了数据面(业务逻辑)和控制面的解耦。具体到微服务架构中,即给每一个微服务实例同步部署一个 Sidecar。
在服务网格部署网络结构图中,绿色方块为应用服务,蓝色方块为 Sidecar,应用服务之间通过 Sidecar 进行通信,整个服务通信形成图中的蓝色网络连线,图中所有蓝色部分就形成了。其具备如下主要特点:
-
应用程序间通讯的中间层
-
轻量级网络代理
-
应用程序无感知
-
解耦应用程序的重试/超时、监控、追踪和服务发现
服务网格的出现解决了传统微服务框架中的痛点,使得开发人员专注于业务本身,同时,将服务通信及相关管控功能从业务中分离到基础设施层。
从云原生的视角来看,服务网格是一种云原生的、应用层的网络技术,具体体现如下:
-
云原生:面向弹性、(微)服务化、去中心化业务场景。
-
应用层:以应用为中心,关注应用的发布、监控、恢复等。
-
网络:关注应用组件之间的接口、流量、数据、访问安全等。
3、服务网格的功能
服务网格作为微服务架构中负责网络通信的基础设施层,具备网络处理的大部分功能。下面列举了一些主要的功能:
-
动态路由。 可通过路由规则来动态路由到所请求的服务,便于不同环境、不同版本等的动态路由调整。
-
故障注入。 通过引入故障来模拟网络传输中的问题(如延迟)来验证系统的健壮性,方便完成系统的各类故障测试。
-
熔断。 通过服务降级来终止潜在的关联性错误。
-
安全。 在服务网格上实现安全机制(如 TLS),并且很容易在基础设施层完成安全机制更新。
-
多语言支持。 作为独立运行且对业务透明的 Sideca 代理,很轻松地支持多语言的异构系统。
-
多协议支持。 同多语言一样,也支持多协议。
-
指标和分布式链路追踪。
概括起来,服务网格主要体现在以下 4 个方面:
-
可见性: 运行时指标遥测、分布式跟踪。
-
可管理性: 服务发现、负载均衡、运行时动态路由等。
-
健壮性: 超时、重试、熔断等弹性能力。
-
安全性: 服务间访问控制、TLS 加密通信。
4、服务网格解决的问题
从上述服务网格的定义看:
-
基础设施层是服务网格的定位,致力于解决微服务基础设施标准化、配置化、服务化和产品化的问题。
-
服务间通信是服务网格技术层面对的问题,对微服务屏蔽通信的复杂度,解决微服务的通信治理问题。
-
请求可靠传递是服务网格的目标。
-
轻量级网络代理是服务网格的部署方式。
-
对应用程序透明是服务网格的亮点和特色,实现对业务无侵入。
综合上述,服务网格主要解决用户如下 3 个维度的痛点需求:
-
完善的微服务基础设施
通过将微服务通信下沉到基础设施层,屏蔽了微服务处理各种通信问题的复杂度,形成微服务之间的抽象协议层。开发者无需关心通信层的具体实现,也无需关注 RPC 通信(包含服务发现、负载均衡、流量调度、流量降级、监控统计等)的一切细节,真正像本地调用一样使用微服务,通信相关的一起工作直接交给服务网格。
-
语言无关的通信和链路治理
功能上,服务网格并没有提供任何新的特性和能力,服务网格提供的所有通信和服务治理能力在服务网格之前的技术中均能找到,比如 Spring Cloud 就实现了完善的微服务 RPC 通信和服务治理支持。
服务网格改变的是通信和服务治理能力提供的方式,通过将这些能力实现从各语言业务实现中解耦,下沉到基础设施层面,以一种更加通用和标准化的方式提供,屏蔽不同语言、不同平台的差异性,有利于通信和服务治理能力的迭代和创新,使得业务实现更加方便。
服务网格避免了多语言服务治理上的重复建设,通过服务网格语言无关的通信和服务治理能力,助力于多语言技术栈的效率提升。
-
通信和服务治理的标准化
通过标准化,带来一致的服务治理体验,减少多业务之间由于服务治理标准不一致带来的沟通和转换成本,提升全局服务治理的效率。
微服务治理层面,服务网格是标准化、体系化、无侵入的分布式治理平台。
标准化方面,Sidecar 成为所有微服务流量通信的约束标准,同时服务网格的数据平台和控制平面也通过标准协议进行交互。
体系化方面,从全局考虑,提供多维度立体的微服务可观测能力(Metric、Trace、Logging),并提供体系化的服务治理能力,如限流、熔断、安全、灰度等。
5、服务网格的原理
服务网格的核心是数据平面(Sidecar)与控制平面(Control Plane),如下图:
-
数据平面: Sidecar,与服务部署在一起的轻量级网络代理,用于实现服务框架的各项功能(如,服务发现、负载均衡、限流熔断等),让服务回归业务本质。
数据平台可以认为是将 Spring Cloud、Dubbo 等相关的微服务框架中通信和服务治理能力独立出来的一个语言无法的进程,并且更注重通用性和扩展性。在 服务网格 中,不再将数据平面代理视为一个个独立的组件,而是将这些代理连接在一起形成一个全局的分布式网格。
在传统的微服务架构中,各种服务框架的功能(如,服务发现、负载均衡、限流熔断等)代码逻辑或多或少的都需要耦合到服务实例的代码中,给服务实例增加了很多无关业务的代码,同时带来了一定的复杂度。
有了 Sidecar 之后,服务节点只做业务逻辑自身的功能,服务之间的调用只需交给 Sidecar,由 Sidecar 完成注册服务、服务发现、请求路由、熔断限流、日志统计等业务无关功能。
在这种新的微服务架构中,所有的 Sidecar 组成在一起,就形成了服务网格。那么这个大型的服务网格并不是完全自治的,它还需要一个统一的控制节点 Control Plane。
-
控制平面: 是用来从全局的角度上控制 Sidecar,相当于服务网格整体的大脑,控制着 Sidecar 来实现服务治理的各项功能。比如,它负责所有 Sidecar 的注册,存储统一的路由表,帮助各个 Sidecar 进行负载均衡和请求调度;它收集所有 Sidecar 的监控信息和日志数据。
6、总结
至此,关于服务网格的介绍就到此结束,更深入的理解可结合后续具体应用、实践来加深吧。
下篇预告:介绍当前服务网格中常见的框架对比。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
30个类手写Spring核心原理之环境准备(1)
本文节选自《Spring 5核心原理》 1 IDEA集成Lombok插件 1.1 安装插件 IntelliJ IDEA是一款非常优秀的集成开发工具,功能强大,而且插件众多。Lombok是开源的代码生成库,是一款非常实用的小工具,我们在编辑实体类时可以通过Lombok注解减少getter、setter等方法的编写,在更改实体类时只需要修改属性即可,减少了很多重复代码的编写工作。 首先需要安装IntelliJ IDEA中的Lombok插件,打开IntelliJ IDEA后单击菜单栏中的File→Settings(如下图所示),或者使用快捷键Ctrl+Alt+S进入设置界面。 单击设置界面中的Plugins进行插件的安装,在右侧单击Browse repositories按钮,如下图所示。 然后在搜索界面中输入lombok可以查询到下方的Lombok Plugin,单击Lombok Plugin可在右侧看到Install按钮,单击该按钮便可开始安装,如下图所示。 我们在如下安装界面可以看到Lombok支持的所有注解。 在安装过程中有Downloading Plugins的提示,安装过程中进度条...
- 下一篇
私有化场景下大规模云原生应用的交付实践
本文根据作者在 CSDN 云原生 Meetup 深圳站的演讲内容整理,分享云原生趋势下网易数帆在私有化场景下大规模应用的交付实践,包括在实践过程中遇到的问题,如何实现标准化、高效率且高质量的交付方案,以及取得效果。 背景介绍 软件私有化交付部署是建立在企业自有基础设施的基础之上的,是为一个企业客户单独使用而构建的硬件/软件运行环境;因而能够提供对数据安全、合规审计和服务质量的有效控制。 软件的私有化是由市场供需关系决定的。也分为甲方和乙方,甲乙双方各取所需从而使面向企业的私有化市场正常运转,例如以下双方的一些诉求: 甲方(资金提供方)诉求 政策性的行业合规和安全化诉求。 企业网络完全隔离限制,不能和互联网建立通讯,无法使用公有云产品。例如金融企业内网。 企业运营的数据具有敏感性,不适合直接运行在公共互联网。例如政府企业沟通交流的工具使用企业微信、企业钉钉等数据要求绝对保密。 头部互联网企业的云技术能力强,投入力度大,产品整体相对较好,期望使用领先的云技术能力。例如期望在内部使用阿里云、腾讯云、华为云以及数帆数帆轻舟或大数据等产品。 传统企业希望进行数字化转型,但是自研体系能力欠缺,从头...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS关闭SELinux安全模块
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2配置默认Tomcat设置,开启更多高级功能