Service-Mesh

Service Mesh的概念

Service Mesh 是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,Service Mesh 保证请求可以在这些拓扑中可靠地穿梭。

在实际应用当中,Service Mesh通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,但应用程序不需要知道它们的存 在。

关于这个定义有以下两个值得我们关注的核心点:

  1. Service Mesh是一个专门负责请求可靠传输的基础设施层;
  2. Service Mesh的实现为一组同应用部署在一起并且对应用透明的轻量网络代理

随着云原生应用的崛起,Service Mesh逐渐成为一个独立的基础设施层。在云原生模型里:

  • 一个应用可以由数百个服务组成,
  • 每个服务可能有数千个实例,
  • 而每个实例可能会持续地发生变化。

服务间通信不仅异常复杂,而且也是运行时行为的基础。管理好服务间通信对于保证端到端的性能和可靠性来说是非常重要的。

服务治理请求可靠传输就是Service Mesh这个基础设施层的职能边界。

Service Mesh 解决了微服务架构的哪些问题?

服务化架构演进

image

大一统的单体服务

为了保证项目能快速成型并上线,起初的应用可能是一个大一统的单体服务,所有业务逻辑、数据 层依赖等都在一个项目中完成。

  • 好处:开发独立、快速,利用资源合理,服务调用更直接、性能更高等等。
  • 缺点:最致命的问题就是耦合,而且随着业务的不断堆叠这种耦合会越来越严重,项目越来越臃肿。

image

模块化

下一步通常都会往模块化的服务演进,比如 ++MVC 模式++的使用、++RPC 技术++的引入等,主要解决业务或者功能模块之间耦合的问题

image

SOA

随着业务量的增长和组织的扩大,性能扩展性将是不得不面对的大问题,所以通常会按照SOA的思路进行++面向服务的体系结构拆分++。

微服务

随着云化技术的发展,容器技术的普及,考虑到集群的弹性运维以及业务运营维护成本、业务运营演进效率等问题,微服务架构就显得更贴近现实。

image

微服务对比之前的各种传统架构模式的好处:

  1. 降低了单体服务的复杂性,
  2. 随即提升了开发速度,
  3. 而且代码更容易理解和维护,
  4. 开发团队对技术的选择变得更自由,
  5. 每个微服务都独立部署所以能很方便调配部署的方式及规模等等。

尤其是一些新兴的互联网公司,创业初期基于运营成本考虑可能都不会去自建机房、买服务器上架,而是直接走云原生应用的路子,这样既能节省成本又能高质高效地应对快速增长的用户。

但也要考虑这个问题,随着微服务化的逐步发展和细化(这里我们暂且不考虑微服务拆分的问题,因为拆分的粒度往往没有规范可依,我个人认为适合自己的才是最好的,当然更不考虑拆分维度或者康威定律),越来越多微服务,每个微服务部署成倍数以上的微服务实例,这些实例数可能轻轻松松就会达到成百上千个,++各服务间的依赖变成复杂的网状拓扑结构++

  • 传统基于DNS中心化的Server端负载均衡来实现服务依赖和治理的形式。
  • 基于注册中心和一个去中心化的Client端负载均衡来实现服务注册发现和治理。

微服务则是复杂的分布式应用,不管是部署形式还是服务的发现、服务依赖调用和请求传输等问题都变得非常难以处理。因为整个体系有太多的不稳定因素,比如网络的分区可能导致服务得不到有效治理。

这里的重点就是要面对微服务架构下服务的治理与请求的可靠传输等问题,这就是为什么需要有 Service Mesh这样的一个基础设施层来对应用透明化地解决这些问题。

下一代微服务Service Mesh

image

随着云计算技术的成熟和普及以及容器技术的大量应用,为了更快地交付、降低试错风险、更快地拓展业务,云原生应用将会是未来服务演进的方向。与Kubernets 类似的容器调度编排技术的不断成熟,使得容器作为微服务的最小部署单元,这更有利于发挥微服务架构的巨大优势。并且在ServiceMesh方向上不断涌现的各种优秀的项目比如 istioConduit(Conduit 目前仅支持 Kubernets 平台)的出现补足了 Kubernetes 等平台在微 服务间服务通讯上的短板。

更关键的是,这些优秀项目的背后不乏 Google、IBM 等大公司背书,所以很容易相信未来微服务 架构将围绕 Kubernetes 等容器生态来展开,这也就不难得出 Service Mesh 将是下一代微服务这样的结论

技术支撑着业务高歌猛进,业务增长反过来又驱动着技术不断向前演化,这是每个互联网公司发展 过程中不变的旋律。

从 2009 年上线至今,微博架构经历了从最初的单体应用到后面的 RPC 服务化容器化混合云架构以及现在的跨语言服务化Service Mesh等诸多阶段,架构演变支撑着微博业务的一次次华丽转身,也见证了微博的飞速成长。

在业务发展的每个阶段,面临的问题都不尽相同,而问题又有各种优先级,++难免为了解决某些较为迫切的问题而引入一些当时不Care的问题++,这也是日常架构演化过程中难以避免的魔咒。

鱼和熊掌不可兼得,所以架构演化的真谛就在于各种方案评估中的利弊权衡,在以业务为重的前提下进行正向演化。

事实标准

Service Mesh 通过在 传输层应用层 间抽象出与业务无关、甚至是对其透明、公共基础的一层解决了微服务间 连接流量控制服务治理监控遥测 等问题。

社区对这个边界的认知是基本一致的。不管是Istio、Conduit,还是华为的ServiceComb、微博的WeiboMesh,实现方案中都有 数据面板控制面板 这样的概念,这已经形成了 Service Mesh 的事实规范。

image

  • 数据面板主要以 SideCar 模式与 Service 部署在一起,保障请求数据在Service间进行可靠传输,提供服务治理以及对请求状态数据的提取与检测等。
  • 控制面板主要控制服务间流量流向、请求路由,提供一种对数据面板访问策略实施的干预机制以及对服务依赖、服务状态的监控等功能。
上次修改: 14 April 2020