当前位置: 首页 > news >正文

如何理解Service Mesh(服务网格)

好的,我们抛开复杂的术语,用一个清晰易懂的方式来解释 Service Mesh(服务网格)

核心概念:它是什么?

Service Mesh 是一个专门用来处理服务(微服务)之间通信的基础设施层。

想象一下,你的公司从一个单体大应用拆分成几十个微服务(比如用户服务、订单服务、支付服务等)。这些服务需要相互调用才能完成一个完整的业务请求。

  • 在没有 Service Mesh 之前:每个服务自己都要处理网络通信的复杂问题,比如:

    • 服务发现:订单服务怎么知道用户服务的地址在哪?

    • 负载均衡:用户服务有3个实例,订单服务该调用哪一个?

    • 重试机制:调用失败后,要不要重试?重试几次?

    • 熔断降级:如果用户服务宕机了,是快速失败还是返回一个默认值?

    • 安全认证:怎么确保调用我的是合法的订单服务,而不是黑客?

    • 监控追踪:一次请求经过了这么多服务,为什么变慢了?是哪个环节出了问题?

这些代码逻辑(通常叫“客户端负载均衡”)会混杂在业务代码中,让业务代码变得臃肿,而且每个服务都要用同一种语言重复实现一遍,难以统一维护。

  • 有了 Service Mesh 之后:它把这些通信相关的烦恼全部从你的业务代码中抽离出来,交给一个独立的基础设施来统一管理。


核心架构:它是如何工作的?

Service Mesh 通常采用 Sidecar(边车)模式 来实现,你可以把它想象成给每个微服务配了一个“通信秘书”。

  1. Sidecar 代理:为你部署的每一个微服务 Pod(Kubernetes 中的概念)都自动注入一个轻量级的网络代理容器。这个代理容器和你的业务容器在同一个 Pod 里,形影不离,就像摩托车的边车一样。

    • 最常见的 Sidecar 代理是 Envoy

  2. 数据平面:所有这些 Sidecar 代理共同组成了 Service Mesh 的数据平面。它们负责处理所有进出微服务的网络流量。当订单服务要调用用户服务时,流量不是直接发过去的,而是先发给自己身边的 Sidecar,再由这个 Sidecar 代理转发给用户服务的 Sidecar,最后才到达用户服务。

    • 简单来说:服务间的通信,变成了 Sidecar 代理之间的通信。

  3. 控制平面:另外,还有一个中心化的“大脑”,称为控制平面(例如 Istio 中的 istiod,Linkerd 中的 linkerd-destination)。它不直接处理数据包,而是负责管理和配置所有的 Sidecar 代理。你通过编写 YAML 文件告诉控制平面你的规则(比如:把 10% 的流量导到新版本),控制平面会把这些规则下发到全网所有的 Sidecar 代理中去执行。


核心功能:它能做什么?

通过这种架构,Service Mesh 为你提供了三大核心能力:

  1. 可观测性

    • 指标:自动生成服务间通信的详细指标,如请求量、错误率、延迟等。

    • 追踪:对一次请求穿越多个服务的完整路径进行追踪,轻松定位性能瓶颈。

    • 日志:提供详细的访问日志。

  2. 流量管理

    • 精细路由:实现金丝雀发布、蓝绿部署。例如,“将来自内部测试用户的 10% 的流量导入到新版本的服务”。

    • 故障恢复:配置重试、超时、熔断(当目标服务故障时,快速失败,避免雪崩效应)和故障注入(模拟服务故障,进行混沌测试)。

  3. 安全

    • mTLS:自动为服务间的通信进行双向 TLS 加密和身份认证,无需修改应用代码。

    • 访问控制:实现细粒度的“谁可以访问谁”的安全策略。


一个简单的比喻

  • 微服务:就像公司里的各个部门(市场部、销售部、财务部)。

  • 业务代码:是部门内部处理自己核心业务的流程。

  • 服务间通信的逻辑:就像是部门之间沟通协调的琐事(打电话、发邮件、预约会议、确认信息)。

  • Service Mesh:就像是给每个部门配了一位专业的秘书。所有部门间的沟通都通过秘书来完成。秘书负责打电话、安排日程、记录沟通内容、处理沟通中的问题(比如对方忙线就重拨)。这样,部门里的员工就可以专注于自己的核心业务,而不用操心沟通的细节。

Service Mesh 的特点

Service Mesh 有如下几个特点:

  • 应用程序间通信的中间层
  • 轻量级网络代理
  • 应用程序无感知
  • 解耦应用程序的重试/超时、监控、追踪和服务发现

目前两款流行的 Service Mesh 开源软件 Istio 和 Linkerd 都可以直接在 Kubernetes 中集成,其中 Linkerd 已经成为 CNCF 中的项目。

理解 Service Mesh

如果用一句话来解释什么是 Service Mesh,可以将它比作是应用程序或者说微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控。对于编写应用程序来说一般无须关心 TCP/IP 这一层(比如通过 HTTP 协议的 RESTful 应用),同样使用 Service Mesh 也就无须关心服务之间的那些原本通过服务框架实现的事情,比如 Spring Cloud、Netflix OSS 和其他中间件,现在只要交给 Service Mesh 就可以了。

Phil Calçado 在他的这篇博客 Pattern: Service Mesh 中详细解释了 Service Mesh 的来龙去脉:

  1. 从最原始的主机之间直接使用网线相连
  2. 网络层的出现
  3. 集成到应用程序内部的控制流
  4. 分解到应用程序外部的控制流
  5. 应用程序的中集成服务发现和断路器
  6. 出现了专门用于服务发现和断路器的软件包/库,如 Twitter 的 Finagle 和 Facebook 的 Proxygen ,这时候还是集成在应用程序内部
  7. 出现了专门用于服务发现和断路器的开源软件,如 Netflix OSS 、Airbnb 的 synapse 和 nerve
  8. 最后作为微服务的中间层 Service Mesh 出现

总结

Service Mesh 的本质是解耦,它将复杂的服务通信问题(网络问题)从业务逻辑中解耦出来,使之成为一个独立的、可统一管理的基础设施层。 它让开发者更专注于业务创新,让运维者拥有更强大的网格治理能力,是构建和管理大规模复杂微服务架构的利器。

参考文档

https://jimmysong.io/blog/what-is-a-service-mesh/

http://www.dtcms.com/a/395798.html

相关文章:

  • android9适配camera gc02m1
  • 【十天成长计划】BoostKit初级班 开班啦!——陪伴式学习,阶梯式成长
  • 【图文详解】强化学习核心框架、数学基础、分类、应用场景
  • Rust简介
  • golang和rust内存分配策略
  • 简历项目之无人机图像目标识别
  • pantherx2 armbian librga-rockchip librga.so 编译安装方法
  • 【精品资料鉴赏】189页工程车辆集团数字化转型SAP解决方案
  • 算法 --- 多源 BFS
  • 15.Linux 硬盘分区管理
  • 2.UE-准备环境(二)-下载虚幻引擎源码和搞成vs项目并使用vs打开
  • G-Star公益行获评CCF优秀技术公益案例,用开源技术传递善意
  • 文化赋能・创意西宁 西宁传媒行业创业发展沙龙成功举办 探索本土企业升级新路径
  • TDengine 与 MYSQL 的差异总结
  • Mysql杂志(二十一)——Hash索引和二叉搜索树、AVL树
  • 什么是类的实例化
  • 西门子 S7-200 SMART PLC 实操案例:中断程序的灵活应用定时中断实现模拟量滤波(下)
  • STM32FreeRtos入门(二)——创建第一个多任务程序
  • Qt QML and Qt Quick 简述及例程
  • Linux 系统移植
  • 小杰机器学习(six)——概率论——1.均匀分布2.正态分布3.数学期望4.方差5.标准差6.多维随机变量及其分布
  • 【Linux】Ext系列文件系统(上)
  • 【ROS2】Beginner: Client libraries - 发布者、订阅者例子 C++ Python
  • AI设计功能性病毒:从DNA语言模型到精准杀菌实战
  • Qt 共享指针QSharedPointer与std::shared_ptr
  • Java课程 第02周 预习、实验与作业:Java基础语法2:面向对象入门
  • 词性标注技术漫谈:为词语赋予语法灵魂的旅程
  • K230基础-MicroPython
  • 网站访问问题:无法访问此网站、404
  • Redis 与Memcached 的对比