到底谁才需要Service Mesh?(一)

简介: 到底谁才需要Service Mesh?(一)

1.什么是ServiceMesh


Service Mesh 在国内被翻译「服务网格」。


目前比较公认的是Buoyant公司的CEO William Morgan给出的定义:


Service Mesh是用于处理服务到服务通信的专用基础架构层。Cloud Native有着复杂的服务拓扑,它负责可靠地传递请求。实际上,Service Mesh通常作为一组轻量级网络代理实现,这些代理与应用程序代码部署在一起,应用程序无感知。


这个定义看起来有些复杂,我们抽取其中的关键词,可能会更加清晰一些:


  • 服务到服务通信的基础架构层(定位)
  • 在复杂的服务拓扑中,可靠地传递请求(目标)
  • 轻量级网络代理实现(实现)
  • 应用程序无感知(特点)


从定位、目标、特点来看,我们联想到了什么呢?


没错,就是 TCP/IP协议!


对于云原生下的微服务,Service Mesh就是等同于 TCP/IP协议 一样的基础设施,负责服务之间的网络调用、路由管理、限流和监控等。


使用了Service Mesh,我们就不需要在应用程序编写时,去关注服务间调用的框架适配、升级等问题,比如Spring Cloud、Dubbo等。就像我们过去编写应用程序时一样,基本不会再关注TCP/IP这一层的问题。


另外,从实现角度来看,这个轻量级的网络代理实现,往往以Sidecar(边车)来称呼(其实就是Proxy)。


我们看下Service Mesh的架构。


119.png(图片来自https://philcalcado.com/2017/08/03/pattern_service_mesh.html


「服务网格」分为两个核心部分:


  • 数据平面。以Sidecar作为数据平面节点,对应用来说完全透明,所有流量进出都会经过Sidecar。
  • 控制平面。集中式的控制平面,提供统一的上层运维入口,所有的Sidecar代理组件通过和控制平面交互进行网络拓扑策略的更新和单机数据的汇报。


2.为什么需要ServiceMesh


一项新技术的产生与引入,必然是为了解决已有的问题。引入Service Mesh的原因,也是为了解决已有微服务框架存在的问题。


为了更深刻地理解Service Mesh解决的问题,我们结合Phil Calçado的文章《Pattern: Service Mesh》,梳理下服务开发模式和Service Mesh技术的演化过程。


1)原始通信时代 1.0

120.png

在原始通信时代(TCP协议出现前),服务需要自己处理网络通信所面临的丢包、乱序、重试等一系列Flow Control问题。所以在业务逻辑代码之外,还需要考虑对网络传输问题进行处理。


2)原始通信时代 2.0


121.png

为了解决这种业务无关的通过网络传输问题,TCP/IP协议出现,并将这部分Flow Control问题“下沉”到操作系统层面。业务开发不再需要关注网络传输问题,可以专注于业务逻辑开发。


3)微服务的服务治理1.0


122.png


随着微服务架构的推广,单体服务逐渐向分布式系统发展,服务间调用变得越来越复杂。


这时候,微服务架构下的 “Flow Control”问题不断出现,包括 服务注册与发现、限流、熔断等等。所以,在业务逻辑代码中,我们又需要开发一些模块解决这类业务无关的问题。


4)微服务的服务治理2.0 —— 微服务框架

123.png

为了解决微服务架构下的通用通信问题,各种微服务框架开始出现,Spring cloud、Dubbo等框架都是为了解决这类通用问题而产生。


这些框架通过客户端依赖包的形式,向业务开发屏蔽了包括 服务注册与发现、限流、熔断等等处理逻辑,只需要简单的配置,就能完成比较健壮的微服务架构。


5)微服务的服务治理3.0 —— Service Mesh


微服务框架虽然能解决通用化的服务治理问题,但是在实践中也存在一定的弊端:


  • 客户端依赖包的形式,注定了与开发语言强绑定。比较主流的微服务框架基本是Java实现的,如果业务架构中存在其他语言的服务,就比较难享受同样的便利。而针对不同语言都开发一套微服务框架,又是比较高成本且难以维护的事情。被微服务框架限定了开发语言,那显然不是一个好的事情。
  • 客户端依赖包的形式,注定了业务需要关注依赖包的升级与适配。一些复杂项目依赖包众多,经常需要处理包冲突的问题,令人头大。同时,框架库的升级也无法对服务透明,必须推进业务去完成,业务开发同学和框架维护同学都很疲惫,sigh~~


如果能像TCP/IP一样,将服务治理“下沉”,彻底与应用服务解耦,那就能解决上述问题了。


所以,以Linkerd,Envoy,NginxMesh为代表的Sidecar模式的Service Mesh产品应运而生。它们将微服务通信的通用问题,服务注册发现、限流、熔断、监控等功能,单独抽出了Sidecar服务,完全接管了服务间的网络通信,并且独立运行,与业务应用彻底解耦。这样就解决了传统客户端模式微服务框架的痛点。

124.png


而后,istiol为代表的Service Mesh产品,在Sidecar模式之基础上(istio中的sidecar采用了Envoy),又引入了统一的控制平面,方便进行管理与维护更新。


至此,相信我们对“为什么需要Service Mesh”有了深刻的认识,正是基于上述的演进历史,才有了现在的微服务的服务治理方案Service Mesh。



目录
相关文章
|
7月前
|
负载均衡 监控 Cloud Native
|
7月前
|
Kubernetes 网络协议 数据库
在Service Mesh内访问网格外的服务
阿里云服务网格ASM提供了访问外部服务的三种方式,包含设置外部服务访问策略、配置ServiceEntry和设置拦截对外访问的网段。本文介绍如何在服务网格ASM上访问外部服务。
102 0
|
7月前
|
负载均衡 Dubbo Java
Service Mesh 的基本模式
【5月更文挑战第16天】Service Mesh分为两种模式:Sidecar和第二代Service Mesh。
|
7月前
|
运维 Kubernetes 安全
Service Mesh 落地路径
【2月更文挑战第29天】该文讨论了在非Kubernetes环境下如何引入Service Mesh。若业务已在Kubernetes上,Istio是理想选择;否则,有两种路径:1) 先采用Sidecar解决眼前需求,若未来计划容器化,再转向Istio;2) 先进行Kubernetes改造,然后接入Istio以充分利用其优势。文章建议,出于性能考虑,可简化Istio的Mixer组件,仅保留核心的Envoy和Pilot,安全特性应根据业务环境灵活选择。对于特定平台,可以定制优化Istio以提高性能。
|
运维 监控 安全
什么是service mesh?
什么是service mesh?
|
Rust Kubernetes 负载均衡
Service Mesh 体系解析
Service Mesh(服务网格)诞生于云原生生态领域的潮流中,虽然大家对这一技术生态充满不确定性,甚至难以接受,然而,如果我们消除外面的“杂声”,细心洞察里面的细节,或许能有不一样的收获,毕竟,所有新技术的出现是为了解决业务痛点,而非是为了一些没用意义的炒作。
373 0
|
负载均衡 Kubernetes Cloud Native
对 Service Mesh 望而却步?可能都没理解这一点
Service Mesh 发展已经有 6-7年的时间,很多人对 Service Mesh 只停留在知道的水平上,特别是很多技术人第一次接触到 Service Mesh,看到服务网格的解释,看到 Istio 的架构,对这门技术仍然云里雾里。实际上,劝退大多数人的不是技术,而是概念本身。
209 0
对 Service Mesh 望而却步?可能都没理解这一点
|
Kubernetes 监控 Devops
Service Mesh 介绍| 学习笔记
快速学习 Service Mesh 介绍
|
分布式计算 运维 负载均衡
Service Mesh 的由来
Service Mesh 的由来
139 0
Service Mesh 的由来
|
Cloud Native 前端开发 Dubbo
到底谁才需要Service Mesh?(二)
到底谁才需要Service Mesh?(二)
138 0
到底谁才需要Service Mesh?(二)

热门文章

最新文章