本文节选自 ServiceMesher 社区出品的开源电子书《Istio Handbook——Istio 服务网格进阶实战》,做者罗广明,来自百度。
在过去几年中,微服务成为了业界技术热点,大量的互联网公司都在使用微服务架构,也有不少传统企业开始实践互联网技术转型,基本上也是以微服务和容器为核心。本文将主要介绍微服务架构的概述以及云原生环境下的 Service Mesh 和传统微服务应用的区别。web
微服务架构可谓是当前软件开发领域的技术热点,在各类博客、社交媒体和会议演讲上的出镜率很是之高,不管是作基础架构仍是作业务系统的工程师,对微服务都至关关注,而这个现象与热度到目前为止,已经持续了近 5 年之久。缓存
尤为是近些年来,微服务架构逐渐发展成熟,从最初的星星之火到如今的大规模落地与实践,几乎已经成为分布式环境下的首选架构。微服务成为时下技术热点,大量互联网公司都在作微服务架构的落地和推广。同时,也有不少传统企业基于微服务和容器,在作互联网技术转型。安全
而在这个技术转型中,国内有一个趋势,以 Spring Cloud 与 Dubbo 为表明的微服务开发框架很是普及和受欢迎。然而软件开发没有银弹,基于这些传统微服务框架构建的应用系统在享受其优点的同时,痛点也越加明显。这些痛点包括但不限于如下几点:服务器
以上列出了传统微服务框架的局限性,但这并不意味着它们就一无可取了。在中小企业,采用 Spring Cloud 这样的传统微服务框架已经能够知足绝大部分服务治理的需求,而且借此快速推动微服务化改造。这些痛点每每是技术发展到必定的程度必然要经历的阶段,这些痛点促使技术不断发展、不断前进。网络
在众多热门技术趋势中,云原生的关注度居高不下,不少开发者都对由此兴起的一众技术十分追捧,众多企业又开始探索云原生架构的转型与落地。这一年,中国的开发者们经历了从关注“云原生概念”到关注“云原生落地实践”的转变。而 Service Mesh 技术也所以愈来愈火热,受到愈来愈多开发者的关注,并拥有了大批拥趸。那么 Service Mesh 是什么呢?它为何会受到开发者的关注?它和传统微服务应用有什么区别?架构
Service Mesh 一词最先由开发 Linkerd 的 Buoyant 公司提出,并于 2016 年 9 月29 日第一次公开使用了这一术语。William Morgan,Buoyant CEO,对 Service Mesh 这一律念定义以下:app
A service mesh is a dedicated infrastructure layer for handling service-to-service communication. It’s responsible for the reliable delivery of requests through the complex topology of services that comprise a modern, cloud native application. In practice, the service mesh is typically implemented as an array of lightweight network proxies that are deployed alongside application code, without the application needing to be aware.
翻译成中文以下:负载均衡
Service Mesh 是一个专门处理服务通信的基础设施层。它的职责是在由云原生应用组成服务的复杂拓扑结构下进行可靠的请求传送。在实践中,它是一组和应用服务部署在一块儿的轻量级的网络代理,而且对应用服务透明。框架
以上这段话有四个关键点:less
2017 年,随着 Linkerd 的传入,Service Mesh 进入国内社区的视野,而且由国内的技术布道师们翻译成“服务网格”。
服务网格从整体架构上来说比较简单,不过是一堆紧挨着各项服务的用户代理,外加一组任务管理流程组成。代理在服务网格中被称为数据层或数据平面(data plane),管理流程被称为控制层或控制平面(control plane)。数据层截获不一样服务之间的调用并对其进行“处理”;控制层协调代理的行为,并为运维人员提供 API,用来操控和测量整个网络。
更进一步地说,服务网格是一个专用的基础设施层,旨在“在微服务架构中实现可靠、快速和安全的服务间调用”。它不是一个“服务”的网格,而是一个“代理”的网格,服务能够插入这个代理,从而使网络抽象化。在典型的服务网格中,这些代理做为一个 sidecar(边车)被注入到每一个服务部署中。服务不直接经过网络调用服务,而是调用它们本地的 sidecar 代理,而 sidecar 代理又表明服务管理请求,从而封装了服务间通讯的复杂性。相互链接的 sidecar 代理集实现了所谓的数据平面,这与用于配置代理和收集指标的服务网格组件(控制平面)造成对比。
总而言之,Service Mesh 的基础设施层主要分为两部分:控制平面与数据平面。当前流行的两款开源服务网格 Istio 和 Linkerd 实际上都是这种构造。
控制平面的特色:
数据平面的特色:
那么服务网格的出现带来了哪些变革呢?
第一,微服务治理与业务逻辑的解耦。服务网格把 SDK 中的大部分能力从应用中剥离出来,拆解为独立进程,以 sidecar 的模式进行部署。服务网格经过将服务通讯及相关管控功能从业务程序中分离并下沉到基础设施层,使其和业务系统彻底解耦,使开发人员更加专一于业务自己。
注意,这里提到了一个词“大部分”,SDK 中每每还须要保留 协议编解码的逻辑,甚至在某些场景下还须要一个轻量级的 SDK 来实现细粒度的治理与监控策略。例如,要想实现方法级别的调用链追踪,服务网格则须要业务应用实现 trace ID 的传递,而这部分实现逻辑也能够经过轻量级的 SDK 实现。所以,从代码层面来说,服务网格并不是是零侵入的。
第二,异构系统的统一治理。随着新技术的发展和人员更替,在同一家公司中每每会出现不一样语言、不一样框架的应用和服务,为了可以统一管控这些服务,以往的作法是为每种语言、每种框架都开发一套完整的 SDK,维护成本很是之高,并且给公司的中间件团队带来了很大的挑战。有了服务网格以后,经过将主体的服务治理能力下沉到基础设施,多语言的支持就轻松不少了。只须要提供一个很是轻量级的 SDK,甚至不少状况下都不须要一个单独的 SDK,就能够方便地实现多语言、多协议的统一流量管控、监控等需求。
此外,服务网格相对于传统微服务框架,还拥有三大技术优点:
服务网格带来了巨大变革而且拥有其强大的技术优点,被称为第二代“微服务架构”。然而就像以前说的软件开发没有银弹,传统微服务架构有许多痛点,而服务网格也不例外,也有它的局限性。
ServiceMesher 社区从成立以来,举办过九场线下 Meetup 以及一场线上 Virtual Meetup,来自蚂蚁集团、网易、阿里集团、新浪、美团、百度等一线互联网公司分别都分享了各自公司关于服务网格的设计、实践与落地挑战,业界知名技术大会,也常常能看到大厂的专家与架构师分享服务网格落地相关的主题。可谓是百花齐放,百家争鸣!这些技术方案不外乎三种:其一,借鉴服务网格通讯代理的思想,基于公司内部服务框架改革而来,强依赖内部 RPC 框架与协议,仅适用于本公司的服务网格技术方案;其二,基于服务网格开源框架 Istio 与 知名数据面开源项目 Envoy 进行改版,以适配公司内部通讯与安全协议,兼容内部注册中心与配置中心,具备必定普适性的企业级服务网格解决方案;其三,自研数据面(如蚂蚁集团的 MOSN),或者彻底自研数据面与控制面,去除外部依赖,支持快速迭代与自由扩展,追求实际业务收益最大化。
然而,各大厂对服务网格的探索有一段时间了,实际的大规模落地案例却很少。咱们不由反思,火了2年的服务网格究竟给微服务带来了什么?咱们很难在此刻去断定上述三个方案的优劣,可是有一点,服务网格做为第二代微服务框架的地位是一向且明确的。此外,无论直接采用开源方案仍是彻底自研,知名开源项目体现出来的架构思想与理念值得全部云原生技术人员学习和参考。固然开源项目也须要你们共建,但愿更多大厂内部的优秀实践能不断反馈到社区里面来,共同促进服务网格的发展与繁荣。
本文介绍了微服务架构的发展,以及服务网格的概念、服务网格相对于传统微服务架构的优缺点,对于后者,须要读者们辩证地去看待。从架构演进路径来看,从最先期的巨石单体(Monolithic)到分布式(Distributed),再到微服务(Microservices)、容器化(Containerization)、容器编排(Container Orchestration),最后到服务网格(Service Mesh)、无服务器(Serverless)。而服务网格正是这一演进路径中,相当重要的一环。
展望将来,Kubernetes 正在爆炸式发展,它已经成为企业绿地应用的容器编排的首选。若是说 Kubernetes 已经完全赢得了市场,而且基于 Kubernetes 的应用程序的规模和复杂性持续增长,那么就会有一个临界点,而服务网格则将是有效管理这些应用程序所必需的。纵使前路漫漫,可是随着服务网格技术的持续发展,其实现产品(如 Istio)的架构与功能的不断优化,服务网格将彻底取代传统微服务架构,成为大小企业微服务化和上云改造的首选架构。
罗广明,百度高级研发工程师,开源项目与云原生技术爱好者,ServiceMesher 社区治理委员会核心成员,云原生社区联合创始人,对微服务架构、模型、中间件有深刻研究。
本文节选自 ServiceMesher 社区出品的开源电子书《Istio Handbook——Istio 服务网格进阶实战》,在线浏览地址:https://www.servicemesher.com/istio-handbook