微服务中的Sidecar模式

embedded/2024/9/23 15:58:33/

微服务中的Sidecar模式

  • 什么是sidecar
  • sidecar如何工作
    • Sidecar 代理服务注册发现
    • Sidecar 代理异构服务发起服务调用
    • 异构服务如何被调用
  • 常见应用
  • 以MOSN流量接管为例
  • 使用 sidecar 模式的优势
  • sidecar和面向切片编程AOP的关系
  • 参考

什么是sidecar

sidecar是服务网络架构的产物。

Sidecar,全称 Sidecar proxy,为在应用程序旁运行的单独的进程,它可以为应用程序添加许多功能,而无需在应用程序中添加额外的第三方组件,或修改应用程序的代码或配置。将应用程序的功能划分为单独的进程运行在同一个最小调度单元中(例如 Kubernetes 中的 Pod)可以被视为 sidecar 模式。在软件架构中, Sidecar 连接到父应用并且为其添加扩展或者增强功能。Sidecar 应用与主应用程序松散耦合。它可以屏蔽不同编程语言的差异,统一实现微服务的可观察性、监控、日志记录、配置、断路器等功能。
在这里插入图片描述

sidecar如何工作

Sidecar 代理服务注册发现

下图为异构服务通过sidecar接入注册中心。异构服务本身可能为非Java或传统应用,接入困难。
在这里插入图片描述

来自单个服务的所有传入和传出网络流量都流经 Sidecar 代理。因此,Sidecar 能够管理微服务之间的流量,收集遥测数据并实施相关策略。从某种意义上说,该服务不了解整个网络,只知道附加的 Sidecar 代理。

异构服务本身不会和注册中心有请求调用,而是通过sidecar代理注册接入注册中心,获得服务注册、发现等功能。

Sidecar 代理异构服务发起服务调用

异构服务本身不和注册中心有直接联系,所以异构服务的调用也需要走sidecar,通过sidecar进行服务发现调用,sidecar收到异构服务的请求后通过服务发现和负载均衡选中目标服务实例,转发请求至目标服务。
在这里插入图片描述

异构服务如何被调用

如果异构服务为服务提供方(会被其它服务调用),服务发起方会先注册中心发现sidecar代理注册的实例信息,将请求发送到Sidecar,Sidecar将请求转发给异构服务完成调用请求。
在这里插入图片描述

常见应用

K8s 的pod,Istio,MOSN(兼容Istio,使用Go语言)

以MOSN流量接管为例

假设服务端运行在 1.2.3.4 这台机器上,监听 20880 端口

  1. 首先服务端会向自己的 Sidecar 发起服务注册请求,告知 Sidecar 需要注册的服务(比如充值服务Deposit)以及 IP + 端口(1.2.3.4:20880)
  2. 服务端的 Sidecar 会向服务注册中心(如 SOFA Registry)发起服务注册请求,告知需要注册的服务(Deposit)以及 IP + 端口,不过这里需要注意的是注册上去的并不是业务应用的端口(20880),而是 Sidecar 自己监听的一个端口(例如:20881)
  3. 调用端向自己的 Sidecar 发起服务订阅请求,告知需要订阅的服务信息
  4. 调用端的 Sidecar 向调用端推送服务地址,这里需要注意的是推送的 IP 是本机,端口是调用端的 Sidecar 监听的端口(例如 20882)
  5. 调用端的 Sidecar 会向服务注册中心(如 SOFA Registry)发起服务订阅请求,告知需要订阅的服务信息
  6. 服务注册中心(如 SOFA Registry)向调用端的 Sidecar 推送服务地址(1.2.3.4:20881)
    在这里插入图片描述

经过上述的服务发现过程,流量转发过程就显得非常自然了:

  1. 调用端拿到的服务端地址是 127.0.0.1:20882,所以就会向这个地址发起服务调用
  2. 调用端的 Sidecar 接收到请求后,通过解析请求头,可以得知具体要调用的服务信息,然后获取之前从服务注册中心返回的地址后就可以发起真实的调用(1.2.3.4:20881)
  3. 服务端的 Sidecar 接收到请求后,经过一系列处理,最终会把请求发送给服务端(127.0.0.1:20880)
    在这里插入图片描述

使用 sidecar 模式的优势

使用 sidecar 模式部署服务网格时,无需在节点上运行代理,但是集群中将运行多个相同的 sidecar 副本。在 sidecar 部署方式中,每个应用的容器旁都会部署一个伴生容器,这个容器称之为 sidecar 容器。Sidecar 接管进出应用容器的所有流量。

在 Kubernetes 的 Pod 中,在原有的应用容器旁边注入一个 Sidecar 容器,两个容器共享存储、网络等资源,可以广义的将这个包含了 sidecar 容器的 Pod 理解为一台主机,两个容器共享主机资

因其独特的部署结构,使得 sidecar 模式具有以下优势:

  • 将与应用业务逻辑无关的功能抽象到共同基础设施,降低了微服务代码的复杂度。
  • 因为不再需要编写相同的第三方组件配置文件和代码,所以能够降低微服务架构中的代码重复度。
  • Sidecar 可独立升级,降低应用程序代码和底层平台的耦合度。

sidecar和面向切片编程AOP的关系

Sidecar和AOP(面向切片编程,Aspect-Oriented Programming)是两种不同的概念,主要在软件架构和编程范式上有不同的应用,不过它们在某些场景下可以有共同的或类似的目标,例如解耦关注点和增强功能的实现。

  1. Sidecar:
    • 概念: Sidecar是一种微服务架构模式,即在同一个主应用的旁边运行一个独立的守护进程(通常是一个容器),用于辅助主应用实现某些功能,例如日志记录、监控、服务发现、安全等。
    • 应用: Sidecar模式常用于服务网格(如Istio)以实现跨应用的基础设施功能,而不需要每个应用服务自行实现这些功能。
    • 特点: 提供与应用无缝集成的共享系统服务,通过与应用在同一Pod中运行来实现低延迟和高效通信。
  2. AOP (Aspect-Oriented Programming):
    • 概念: AOP是一种编程范式,旨在通过将关注点(如日志记录、安全性、事务管理等)分离为“方面”(Aspects)来增强编程模块的功能。这些关注点横切系统的多个模块,与其核心业务逻辑分离。
    • 应用: AOP通常用于Java(Spring Framework)中,通过使用注解或XML配置来定义方面,以动态代理或代码织入的方式在运行时增强类或者方法。
    • 特点: 通过声明的方式在不改变现有代码的情况下向程序添加横切关注点,实现代码解耦和复用。

关系与区别:

  • 共同目标:两者都旨在隔离关注点,简化主业务逻辑的实现。同样地,Sidecar和AOP都可以用于增强应用或服务的功能。
  • 实现方式:Sidecar通过物理上(或逻辑上,容器模块实现上)分离进程来实现功能扩展,而AOP通过代码层面上的动态增强和代码织入来操作。
  • 应用领域:Sidecar更侧重于微服务架构中的基础设施功能,而AOP更适合于应用开发中的代码逻辑关注点分离。

参考

术语表 · Kubernetes 中文指南——云原生应用架构实战手册 (jimmysong.io)
Sidecar 模式 · Kubernetes 中文指南——云原生应用架构实战手册 (jimmysong.io)
什么是 Sidecar[通俗易懂]-腾讯云开发者社区-腾讯云 (tencent.com)
Sidecar Design Pattern in your Microservices Ecosystem – samirbehara
微服务中的 Sidecar 设计模式解析 | 云原生社区(中国) (cloudnative.to).
支持几十种业务场景,字节跳动大规模 Sidecar 运维管理实践-腾讯云开发者社区-腾讯云 (tencent.com)
Sidecar 模式 - failymao - 博客园 (cnblogs.com)


http://www.ppmy.cn/embedded/97773.html

相关文章

npm 使用淘宝镜像,安装pnpm

(安装nodejs时,会自动安装npm)使用 npm 安装包时,需要去 npm 仓库获取,而 npm 仓库在国外,很不稳定,有时获取会失败。淘宝搭建了一个国内npm服务器,会定时拉取国外npm仓库内容&#…

UDP/TCP --- Socket编程

本篇将使用 Linux 中的系统调用来实现模拟 TCP 和 UDP 的通信过程,其中只对 UDP 和 TCP 进行了简单的介绍,本篇主要实现的是代码,至于 UDP 和 TCP 的详细讲解将会在之后的文章中给出。 本篇给出的 tcp 和 udp 的代码中的 echo 都是测试连接是…

发那科机器人常见的异常解决方案

第一类错误:示教板空白、机器人死机 判断方法:1、PSU 上红色LED 亮代表电源供给报警,可能保险F4熔断、查看CP2、CP3线路(200ACV输出)、更换PSU;绿色PIN熄灭代表电源供给单元未获得200V 的交流电源输入&…

科创中心“核”动力|趋动科技:AI算力界的领跑者

近日,趋动科技与深信服正式推出联合解决方案。联合解决方案将深信服EDS的高性能存储与趋动科技OrionX AI算力资源池化软件、以及GeminiAI训练平台有机结合,整合存力与算力资源的同时,帮助用户建好AI平台、管好AI资源、用好AI服务。 双方已完成…

游戏管理系统

目录 Java程序设计课程设计 游戏管理系统 1系统简介 1.1需求分析 1.2 编程环境与工具 2系统总体设计 2.1 系统的功能模块图。 2.2 各功能模块简介。 3主要业务流程 (1)用户及管理员登录流程图 (2)信息添加流程 &#x…

数据结构—— 初识二叉树

1.树概念及结构 1.1树的概念 树是由根和子树构成 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的 1. 树有…

【MySQL 08】内置函数 (带思维导图)

文章目录 🌈 一、日期函数⭐ 1. 常见日期函数⭐ 2. 日期函数使用示例⭐ 3. 日期函数综合案例 🌈 二、字符串函数⭐ 1. 常见字符串函数⭐ 2. 字符串函数使用示例⭐ 3. 字符串函数综合案例 🌈 三、数值函数⭐ 1. 常见数值函数⭐ 2. 数值函数使用…

Java、python、php版的高考志愿填报辅助系统(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…