点击上方“程序猿技术大咖”,关注并选择“设为星标”
《Istio 实践手册》,从服务网格概念出发,将逐步渗透到 Istio 具体细节中来,旨在帮助 Istio 学习者、使用者快速掌握相关知识点,可作为 Istio 学习、实践手册,建议收藏!(不断更新中……)
在上一节《迎接新一代微服务架构》中,我们知道服务网格经历了 4 个重要阶段:

耦合阶段:高度耦合、重复实现、维护困难,在耦合架构设计中体现的最为突出,单体架构就是典型的代表。 公共 SDK:让基础设施功能设计成为公共 SDK,提高利用率,是解藕最有效的途径,比如 Spring Cloud 就是类似的方式。但学习成本高、特定语言实现,却将一部分人拦在了门外。 Sidecar 模式:再次深度解藕,不单单功能解藕,更从跨语言、更新发布和运维等方面入手,实现对业务服务的零侵入,更解藕于开发语言和单一技术栈,实现了完全隔离,为部署、升级带来了便利,做到了真正的基础设施层与业务逻辑层的彻底解耦。另一方面,Sidecar 可以更加快速地为应用服务提供更灵活的扩展,而不需要应用服务的大量改造。 Service Mesh:把 Sidecar 模式充分应用到一个庞大的微服务架构系统中来,为每个应用服务配套部署一个 Sidecar 代理,完成服务间复杂的通信,最终就会得到一个的网络拓扑结构,这就是服务网格,又称之为“Service Mesh“。它从本质上解决了传统微服务所面临的问题。
1、云原生定义

微服务源自服务化架构设计理念,与敏捷开发 DevOps 理念的结合:微、小、快、独。 经过四代的技术演进,随着云计算发展到云原生阶段,服务网格则成为承载微服务理念的新一代技术形态。
2、服务网格定义

应用程序间通讯的中间层 轻量级网络代理 应用程序无感知 解耦应用程序的重试/超时、监控、追踪和服务发现
云原生:面向弹性、(微)服务化、去中心化业务场景。 应用层:以应用为中心,关注应用的发布、监控、恢复等。 网络:关注应用组件之间的接口、流量、数据、访问安全等。
3、服务网格的功能
动态路由。 可通过路由规则来动态路由到所请求的服务,便于不同环境、不同版本等的动态路由调整。 故障注入。 通过引入故障来模拟网络传输中的问题(如延迟)来验证系统的健壮性,方便完成系统的各类故障测试。 熔断。 通过服务降级来终止潜在的关联性错误。 安全。 在服务网格上实现安全机制(如 TLS),并且很容易在基础设施层完成安全机制更新。 多语言支持。 作为独立运行且对业务透明的 Sideca 代理,很轻松地支持多语言的异构系统。 多协议支持。 同多语言一样,也支持多协议。 指标和分布式链路追踪。
可见性: 运行时指标遥测、分布式跟踪。 可管理性: 服务发现、负载均衡、运行时动态路由等。 健壮性: 超时、重试、熔断等弹性能力。 安全性: 服务间访问控制、TLS 加密通信。
4、服务网格解决的问题
基础设施层是服务网格的定位,致力于解决微服务基础设施标准化、配置化、服务化和产品化的问题。 服务间通信是服务网格技术层面对的问题,对微服务屏蔽通信的复杂度,解决微服务的通信治理问题。 请求可靠传递是服务网格的目标。 轻量级网络代理是服务网格的部署方式。 对应用程序透明是服务网格的亮点和特色,实现对业务无侵入。
完善的微服务基础设施 通过将微服务通信下沉到基础设施层,屏蔽了微服务处理各种通信问题的复杂度,形成微服务之间的抽象协议层。开发者无需关心通信层的具体实现,也无需关注 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、总结
下篇预告:介绍当前服务网格中常见的框架对比。
感谢您的阅读,也欢迎您发表关于这篇文章的任何建议,关注我,技术不迷茫!

云原生第7课:Kubernetes 网络与服务管理 Istio 实践手册 | 迎接新一代微服务架构 MySQL性能优化(七):MySQL执行计划,真的很重要,来一起学习吧 微服务架构下的核心话题 (三):微服务架构的技术选型

喜欢就点个"在看"呗,留言、转发朋友圈
文章转载自程序猿技术大咖,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




