从"边车模式"到Service Mesh

从边车模式到Service Mesh

在微服务架构设计中,边车模式往往经常被提及,特别是云原生发展日益增强的现在,一些新的架构设计理念值得我们了解,今天就带大家一起了解下边车模式。

什么是边车模式

边车模式(Sidecar Pattern)是一种将服务治理功能从应用本身剥离出来作为单独进程的方式。 具体来说,它将应用程序的组件部署到单独的进程或容器中,以提供隔离和封装。在这个模式中,边车附加到父应用程序并为应用程序提供支持功能,如微服务发现、注册、服务调用、应用认证、限速等。

就像边车一样,方向盘进行控制,挎斗专注业务。边车模式的特点包括:

  • 边车是独立部署的进程,这降低了应用程序代码和底层代码的耦合度,有助于异构服务通过边车快速接入微服务体系。
  • 边车与父应用程序共享相同的生命周期,与父应用程序一起创建和退役。
  • 边车服务不一定是应用程序的一部分,而是与之相关联。它适用于父应用程序的任何位置,可以灵活地添加或移除边车服务,以满足应用程序的需求。

在微服务体系内,边车模式使得集成在应用内的微服务功能可以被剥离出来,放入边车中。 这样,应用程序可以更专注于实现自己的业务逻辑 ,而一些其他的控制功能则交给边车来实现。这种分离有助于降低服务的复杂性,提高扩展性,并符合单一职责原则。

如何理解控制面和业务面

上一段我们提到控制与业务分离,当然在计算机网络和微服务架构中,"控制面"(Control Plane)和"业务面"(Data Plane)是两个重要的概念是存在的,尤其在服务网格和路由器体系架构中经常被提及。

控制面(Control Plane) 主要负责网络或系统的管理和控制功能。在服务网格中,控制面通常指的是负责服务发现、路由规则、负载均衡、熔断、限流等高级功能的组件。它通常不直接处理业务数据,而是负责配置和管理边车代理(Sidecar Proxy)的行为。控制面通常包含一些管理组件,如配置中心、策略中心、监控中心等。

业务面(Data Plane) 有时也被称为转发面或数据面,主要负责处理实际的业务数据。在服务网格中,业务面通常指的是边车代理(Sidecar Proxy)的实际转发功能,这些代理会处理服务间的流量,并根据控制面的配置进行路由、负载均衡、熔断等操作。业务面是直接与业务逻辑交互的部分,它负责处理服务请求和响应,并确保这些请求和响应按照控制面的策略进行传递。

控制面和业务面是互补的概念。控制面关注于管理和配置,而业务面关注于实际的数据处理。在微服务架构和服务网格中,这种分离有助于实现关注点的分离,提高系统的可扩展性和灵活性。通过将控制逻辑和业务逻辑分开,可以更容易地管理和优化系统的行为,同时保持业务逻辑的简洁和清晰。

边车模式有哪些优缺点和适用场景

边车模式(Sidecar Pattern)的优缺点和适用场景如下:

优点:

  1. 解耦与模块化:边车模式通过将服务治理功能(如日志、监控、限流、熔断等)从业务逻辑中分离出来,实现了关注点的分离和模块化。这使得业务逻辑更加清晰和简洁,同时治理功能也更加可重用和灵活。
  2. 可扩展性:边车模式允许对治理功能进行独立的扩展和升级,而不需要修改业务逻辑代码。这有助于满足不断增长的服务治理需求,提高了系统的可扩展性。
  3. 多语言支持:由于边车模式对业务逻辑的代码侵入性较小,因此可以支持多种编程语言和技术栈。这使得在混合语言环境中进行微服务治理变得更加容易。
  4. 灵活性:边车模式可以灵活地添加或移除治理功能,以满足不同业务场景的需求。这种灵活性使得系统更加适应变化,降低了维护成本。

缺点:

  1. 复杂性增加:引入边车模式会增加系统的复杂性,需要额外管理和维护边车进程。这可能会增加开发和运维的工作量。
  2. 资源消耗:每个微服务实例都需要一个边车进程,这可能会导致资源(如CPU、内存等)的消耗增加。在资源受限的环境中,这可能会成为一个问题。
  3. 网络延迟:边车进程需要与微服务实例进行通信,这可能会增加网络延迟。虽然可以通过优化网络配置来降低延迟,但在某些情况下仍可能对性能产生影响。

适用场景:

  1. 老系统的改造和扩展:对于已有的复杂系统,边车模式可以帮助逐步引入微服务治理功能,而不需要对整个系统进行重构。
  2. 多语言环境:在由多种语言构建的微服务系统中,边车模式可以提供一种统一的服务治理方式,降低跨语言集成的难度。
  3. 控制和逻辑分离:当需要将服务治理逻辑与业务逻辑分离时,边车模式是一个很好的选择。这有助于降低代码的耦合度,提高系统的可维护性。

不适用场景:

  1. 简单架构:对于架构相对简单、不需要复杂治理功能的系统,引入边车模式可能会增加不必要的复杂性。
  2. 服务间协议不标准:如果服务间的通信协议不标准且无法转换,边车模式可能无法有效地实现服务治理功能。

总之,边车模式在微服务架构中具有广泛的应用前景,但需要根据具体场景和需求来权衡其优缺点并做出决策。

边车模式有哪些经典的实践案例

边车模式(Sidecar Pattern)在微服务架构中有一些经典的实践案例。比如Istio,它是一个开源的服务网格,它使用边车模式来提供流量管理、安全性、可观察性等功能。在 Istio 中,每个微服务实例旁边都会部署一个 Envoy 代理,这个代理就是边车,负责处理服务间的通信、流量路由、安全策略等。Envoy 代理与微服务实例共享相同的生命周期,并作为边车为微服务提供所需的功能。

边车模式和服务网格(Service Mesh)有什么关系

边车模式(Sidecar Pattern)和服务网格(Service Mesh)是密切相关的概念,但它们在某些方面存在一些差异。

首先,边车模式是一种设计模式,它通过将服务治理功能从业务逻辑中分离出来,以独立的进程(边车)形式部署和运行。这种模式旨在实现控制逻辑和业务逻辑的解耦,使得业务逻辑更加简洁和可维护。边车进程可以处理诸如日志收集、服务监控、服务注册和发现、限流、熔断等任务。

而服务网格是一个更加全面的架构模式,它用于处理微服务之间的通信。服务网格通过在每个微服务实例旁边部署一个轻量级的网络代理(通常是边车进程),来实现服务间的流量管理、安全性、可观察性等功能。这些代理形成了一个网络层,称为服务网格,负责处理服务间的请求路由、负载均衡、熔断、重试等逻辑。

因此,可以说边车模式是服务网格实现的一部分。在服务网格中,每个微服务实例都会有一个边车进程作为代理,负责处理服务间的通信和治理功能。边车模式为服务网格提供了灵活性和可扩展性,使得服务治理功能可以独立于业务逻辑进行部署和管理。sidecar 代理与微服务并肩协作,用于将请求路由给其他代理。这些 sidecar 共同构成了网格式网络。

总结

边车模式是一种代理吗?

是的,边车模式可以看作是一种代理模式。在边车模式中,每个服务实例都会附加一个代理(即边车),这个代理负责处理与该服务实例相关的非业务逻辑功能,如日志收集、监控、服务注册与发现、限流、熔断等。这些代理与服务实例共享相同的生命周期,并作为边车为服务提供所需的功能。因此,边车模式中的代理起到了将非业务逻辑功能从服务实例中分离出来的作用,使得服务实例更加专注于业务逻辑的处理。

边车模式与传统的代理模式有一些相似之处,但也有其独特之处。传统的代理模式通常是在客户端和服务器之间引入一个代理服务器,用于处理客户端的请求并转发给服务器,或者将服务器的响应返回给客户端。而边车模式中的代理则是与服务实例紧密集成,作为服务实例的一部分,并与其共享相同的生命周期。

总的来说,边车模式通过引入代理来实现非业务逻辑功能的解耦和集中管理,提高了系统的可扩展性、灵活性和可维护性。这使得服务实例可以更加专注于业务逻辑的处理,同时也使得非业务逻辑功能的管理和更新变得更加容易和高效。

总之,边车模式是一种灵活且可扩展的服务治理模式,通过将服务治理功能从应用本身剥离出来作为单独进程,可以降低应用程序代码和底层代码的耦合度,提高系统的可维护性和可扩展性。

参考&好文推荐

相关推荐
IT_陈寒6 分钟前
React useEffect里面写异步,我的状态怎么老丢?
前端·人工智能·后端
Liquad Li25 分钟前
Salesforce高级开发面试题
java·网络·面试·crm·salesforce
程序员爱钓鱼1 小时前
第一个 Rust 程序 Hello World
后端·rust
卷福同学7 小时前
不用服务器,不用配环境,我10分钟上线了一个AI Agent
人工智能·后端·算法
GetcharZp10 小时前
只需 10 分钟,轻松实现异地组网!Netmaker 保姆级部署教程来了
后端
前端兰博10 小时前
03-Spring Boot
后端
前端兰博10 小时前
01-Java开发基础语言
后端
前端兰博10 小时前
02-Servlet、JDBC、Maven、Mybatis
后端
咖啡八杯11 小时前
GoF设计模式——模板方法模式
java·后端·spring·设计模式
码事漫谈12 小时前
Loop 正在排斥人为操作
后端