架构15-服务网格

零、文章目录

架构15-服务网格

1、透明通信的涅槃

(1)服务网格
  • 概念
    • 服务网格是一种处理程序间通信的基础设施,主要由数据平面控制平面组成。
    • 它通过边车代理和控制程序管理程序间的通信,弥补了容器编排系统对分布式应用细粒度管控能力的不足。
  • 背景与意义
    • Kubernetes 提供了工业级的韧性和弹性,并维护了各 Pod 之间的虚拟化网络。
    • 程序间的通信 不仅需要网络的连通性,还需要解决路由、容错、限流、加密、认证、授权、跟踪、度量等问题。
    • 服务网格 旨在通过容器、虚拟化网络、边车代理等技术,重新挑战程序间远程通信中的非透明原则。
  • 技术特点
    • **数据平面:**负责转发程序间通信的数据包。
    • **控制平面:**负责路由管理、服务发现、数据遥测等控制信息。
    • **边车代理:**与应用容器共同部署,自动劫持流量,实现透明且强制的通信。
    • **解耦:**将“程序”与“网络”解耦,将网络问题和功能处理从程序中分离出来,放到数据平面通信中处理。
  • 价值
    • **简化应用交互:**应用之间可以简单地交互,不必过多考虑异常情况。
    • **平稳迁移:**能够在不同程序框架、不同云服务提供商环境之间平稳迁移。
    • **统一访问控制:**根据角色、权限进行统一的访问控制。
    • **遥测信息:**不依赖程序支持即可获得所需的全部遥测信息。
  • 未来展望
    • **透明远程服务:**尽管远程通信在性能上与本地访问有显著差距,但在功能上实现透明的远程服务仍是一个值得探讨的问题。
    • **行业讨论:**业界对于实现透明远程服务的可能性尚未达成统一共识,引发了广泛的讨论。
(2)通信成本
  • **第一阶段:**通信的非功能性需求由程序员直接编写,与业务逻辑耦合,导致系统复杂且易出错。
  • **第二阶段:**通信功能被抽离为公共组件库,由专业开发人员编写和维护,但仍存在语言绑定和学习成本高的问题。
  • **第三阶段:**通信组件分离为网络代理,与业务逻辑不在同一进程空间,提高了通信质量,但使用范围有限。
  • **第四阶段:**网络代理以边车形式注入应用容器,自动劫持流量,实现透明且强制的通信,但管理代理本身会产生额外的通信需求。
  • **第五阶段:**边车代理统一管控,分离数据平面与控制平面,实现安全、可控、可观测的通信。
(3)数据平面
  • **核心职责 **
    • **转发数据包:**处理应用的入站(Inbound)和出站(Outbound)数据包。
    • **服务路由:**根据控制平面的策略自动完成服务路由。
    • **健康检查:**定期检查服务的健康状况。
    • **负载均衡:**分散请求,提高服务的可用性和性能。
    • **认证鉴权:**确保通信的安全性。
    • **监控数据:**生成和上报监控数据。
  • 关键问题及解决方案
    • 代理注入
      • **基座模式(Chassis):**通过轻量级的 SDK 接入,对程序不透明,有侵入性。
      • 注入模式(Injector):
        • **手动注入:**对使用者不透明,对程序透明,通过修改 Pod 的 Manifest 文件实现。
        • **自动注入:**对使用者和程序都透明,通过 Kubernetes 的 Mutating Webhook 控制器实现。
    • 流量劫持
      • **iptables:**通过修改容器的 iptables 规则,拦截所有进出 Pod 的流量。
      • **eBPF:**在 Socket 层面直接完成数据转发,减少数据在通信链路的路径长度。
      • **CNI 插件:**通过自定义的 CNI 插件控制虚拟化网络,无需依赖 iptables。
    • 可靠通信
      • **xDS 协议族:**定义了如何发现和访问 Listener、Router、Cluster 等资源的 API。
      • **Listener:**监听端口,接收来自下游的数据。
      • **Router:**决定数据转发的目标 Cluster。
      • **Cluster:**连接到一组提供相同服务的上游主机。
(4)控制平面

  • 核心职责
    • **数据平面交互:**负责边车注入、策略分发和配置分发。
    • **流量控制:**实现请求路由、流量治理和调试能力。
    • **通信安全:**提供加密、凭证、认证和授权功能。
    • **可观测性:**包括日志收集、链路追踪和指标度量。
  • 主要功能
    • 数据平面交互
      • **边车注入:**通过 Mutating Webhook 控制器实现自动注入。
      • **策略分发:**为 Envoy 代理提供符合 xDS 协议的策略。
      • **配置分发:**监听来自多种配置源的数据,处理 API 校验和配置转发。
    • 流量控制
      • **请求路由:**通过 VirtualService 和 DestinationRule 实现灵活的服务版本切分与规则路由。
      • **流量治理:**包括熔断、超时、重试等功能。
      • **调试能力:**提供故障注入和流量镜像功能。
    • 通信安全
      • **生成 CA 证书:**负责生成通信加密所需私钥和 CA 证书。
      • **SDS 服务代理:**通过 SDS 服务代理分发证书,保证私钥证书的安全。
      • **认证:**提供基于节点的服务认证和基于请求的用户认证。
      • **授权:**提供不同级别的访问控制。
    • 可观测性
      • **日志收集:**收集远程服务的访问日志。
      • **链路追踪:**生成分布式追踪数据并上报。
      • **指标度量:**生成监控指标,记录和展示服务状态。

2、服务网格与生态

(1)服务网格的发展背景
  • **早期发展:**2016年,Linkerd 和 Envoy 问世,标志着服务网格的诞生。
  • **行业认可:**2017年,Google、IBM 和 Lyft 发布 Istio,进一步推动了服务网格的发展。
  • **云巨头参与:**2018年后,云计算巨头如 Google、AWS、微软等纷纷推出自己的服务网格产品。
  • **市场碎片化:**随着市场的繁荣,出现了多个服务网格产品,导致了市场碎片化问题。
(2)服务网格的主要规范

  • 服务网格接口 (SMI)
    • **目标:**提供 Kubernetes 与控制平面交互的标准,实现应用程序在不同服务网格产品之间的无缝移植。
    • 特点:
      • **Kubernetes Native:**完全依赖 Kubernetes 的 CRD 实现。
      • **Provider Agnostic:**不绑定任何特定的控制平面。
    • API 构成:
      • **流量规格 (Traffic Specs):**定义流量的表示方式。
      • **流量拆分 (Traffic Split):**定义不同版本服务之间的流量比例。
      • **度量 (Metrics):**提供通用集成点,用于抓取指标。
      • **流量访问控制 (Traffic Access Control):**基于 ServiceAccount 进行访问控制。
    • **发展状况:**2020年4月被托管到 CNCF,成为 Sandbox 项目。
  • 通用数据平面 API (UDPA)
    • **目标:**制定控制平面与数据平面交互的标准。
    • 特点:
      • **基于 xDS:**基于 Envoy 的 xDS 协议经验。
      • **传输协议 (UDPA-TP):**定义数据平面的传输协议。
      • **数据模型 (UDPA-DM):**定义数据平面的数据模型。
    • **发展状况:**仍处于早期设计阶段,距离完备还有很长的路要走。
(3)服务网格的主要产品
  • 数据平面产品
    • Linkerd
      • **历史:**2016年1月发布,2017年1月加入 CNCF。
      • **特点:**使用 Scala 语言,性能和资源消耗方面逊于 Envoy。
    • Envoy
      • **历史:**2016年9月开源,2017年9月加入 CNCF。
      • **特点:**使用 C++ 语言,市场占有率最高,支持多种控制平面。
    • nginMesh
      • **历史:**2017年9月发布,2020年宣告失败。
      • **特点:**基于 Nginx,使用 C 语言,发展不温不火。
    • Linkerd 2
      • **历史:**2017年12月发布,2018年重新命名为 Linkerd 2。
      • **特点:**使用 Rust 语言,性能与资源消耗不输 Envoy。
    • MOSN
      • **历史:**2018年6月开源,2019年12月加入 CNCF Landscape。
      • **特点:**使用 Golang 语言,适用于阿里巴巴生态。
  • 控制平面产品
    • Linkerd 2
      • **特点:**性能提升,但功能上不如 Istio 强大。
    • Istio
      • **特点:**功能最强大,市场占有率第一,支持多种数据平面。
    • Consul Connect
      • **特点:**强调整合集成,支持多种运行平台和数据平面。
    • Open Service Mesh (OSM)
      • **特点:**轻量简单,作为 SMI 规范的参考实现。
(4)服务网格的生态格局
  • **市场现状:**服务网格市场尚未决出最终胜利者,但已形成初步的生态格局。
  • **主要竞争者:**Linkerd 2、Istio、Consul Connect、OSM 等。
  • **云巨头策略:**AWS 选择专有闭源,微软和 Google 选择开源竞争。
(5)服务网格的未来展望
  • **挑战:**市场碎片化、产品成熟度不足、兼容性问题。
  • **前景:**服务网格可能是未来的发展方向,但需要时间和实践来验证其价值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/934507.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

day08 接口测试(4)知识点完结!!

【没有所谓的运气🍬,只有绝对的努力✊】 目录 1、postman读取外部数据文件(参数化) 1.1 数据文件简介 1.2 导入外部数据文件 1.2.1 csv文件 1.2.2 导入 json文件 1.3 读取数据文件数据 1.4 案例 1.5 生成测试报告 2、小…

2024年11月HarmonyOS应用开发者高级认证全新题库

注意事项:切记在考试之外的设备上打开题库进行搜索,防止切屏三次考试自动结束,题目是乱序,每次考试,选项的顺序都不同,作者已于2024年11月22日又更新了一波题库,题库正确率99%! 新版…

【Python网络爬虫 常见问题汇总】

目录 1. 爬取图片出现403解决办法:设置请求头中的Referer字段 2.关于干坏事的问题后续不定期更新 欢迎共同探讨学习进步 1. 爬取图片出现403 问题出自案例9,已解决。 【Python网络爬虫笔记】9- 抓取优美图库高清壁纸 当在爬取图库图片时遇到 403 错误…

《探索形象克隆:科技与未来的奇妙融合》

目录 一、什么是形象克隆 二、形象克隆的技术原理 三、形象克隆的发展现状 四、形象克隆的未来趋势 五、形象克隆的应用场景 六、形象克隆简单代码案例 Python 实现数字人形象克隆 Scratch 实现角色克隆效果(以猫为例) JavaScript 实现 Scratc…

Mac软件推荐

Mac软件推荐 截图SnipasteXnipBob 快捷启动Raycast 系统检测Stats 解压缩The UnarchiverKeka(付费) 视频播放IINA 视频下载Downie(付费) 屏幕刘海TopNotchMediaMate(付费)NotchDrop(付费&#x…

Linux——linux系统移植

创建VSCode工程 1、将NXP官方的linux内核拷贝到Ubuntu 2、解压缩tar -vxjf linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2 NXP官方开发板Linux内核编译 1、将.vscode文件夹复制到NXP官网linux工程中,屏蔽一些不需要的文件 2、编译NXP官方EVK开发板对应的Linux系统…

TikTok运营选什么网络?要用原生IP吗?

不管是跨境电商运营还是个人IP打造,TikTok都是必不可少的一个大流量平台。但运营TikTok必然要面临网络问题,如果没有妥当的解决方案,不仅难以获取流量,还可能面临封号的风险。因此,选择可靠的网络并合理使用是非常重要…

Spring 基础

什么是 Spring 框架? Spring 是一款开源的轻量级 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性。 我们一般说 Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发&#…

Redis篇-5--原理篇4--Lua脚本

1、概述 Redis 支持使用 Lua 脚本来执行复杂的操作,这为 Redis 提供了更强的灵活性和性能优化能力。通过 Lua 脚本,你可以在服务器端执行一系列命令,而不需要多次往返客户端与服务器之间,从而减少了网络延迟并提高了效率。此外&a…

【数据库】关系代数和SQL语句

一 对于教学数据库的三个基本表 学生S(S#,SNAME,AGE,SEX) 学习SC(S#,C#,GRADE) 课程(C#,CNAME,TEACHER) (1)试用关系代数表达式和SQL语句表示:检索WANG同学不学的课程号 select C# from C where C# not in(select C# from SCwhere S# in…

【git】--- 通过 git 和 gitolite 管理单仓库的 SDK

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【git】--- 通过 git 和 gitolite 管理单仓库的 SDK 开发环境一、安装配置 gitolite二…

HDFS高可用模式安装部署

实验步骤 将ZooKeeper集群模式启动获取安装包 安装包在本地:通过XFTP等工具将安装包上传到虚拟机中安装包在网络: 虚拟机可以访问互联网虚拟机无法访问互联网解压缩安装包将解压出来安装目录重命名配置环境变量刷新环境变量,使新增的环境变量…

mysql程序介绍,选项介绍(常用选项,指定选项的方式,特性),命令介绍(查看,部分命令),从sql文件执行sql语句的两种方法

目录 mysql程序 介绍 选项 介绍 常用选项 指定选项的方式 ​编辑配置文件 环境变量 选项特性 指定选项 选项名 选项值 命令 介绍 查看客户端命令 tee/notee prompt source system help contents 从.sql文件执行sql语句 介绍 方式 source 从外部直接导入…

PDF处理的创新工具:福昕低代码平台尝鲜实现PDF2word功能

在当今数字化时代,PDF文件的处理和管理变得越来越重要。福昕低代码平台是新发布的一款创新的工具,旨在简化PDF处理和管理的流程。通过这个平台,用户可以通过简单的拖拽界面上的按钮,轻松完成对Cloud API的调用工作流,而…

【C++】C++11(统一列表初始化、声明、右值引用)

🌈个人主页:秦jh_-CSDN博客🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12575764.html?spm1001.2014.3001.5482 ​ 目录 C11简介 统一的列表初始化 {}初始化 std::initializer_list 声明 …

对比九种MySQL高可用方案

文章目录 一、读写分离如何在业务中落地什么时候需要读写分离MySQL 主从复制技术--binlog日志主从复制过程存在主从复制延时问题主从同步延迟的解决方案主从复制如何避免丢数据总结二、对比九种MySQL高可用方案组复制、半同步复制、异步复制主从复制方案选型-异步复制主从复制方…

再用RNN神经网络架构设计生成式语言模型

上一篇:《用谷歌经典ML方法方法来设计生成式人工智能语言模型》 序言:市场上所谓的开源大语言模型并不完全开源,通常只提供权重和少量工具,而架构、训练数据集、训练方法及代码等关键内容并未公开。因此,要真正掌握人…

httprunner实践样例

目录 1. 安装 HTTPRunner 2. 基本概念和目录结构 3. 编写一个 HTTPRunner 测试用例(YAML 示例) 4. 运行测试用例 5. 使用 Python 编写测试用例 6. 运行 Python 测试用例 7. 集成测试报告 8. 高级用法:集成环境变量、外部数据 9. 集成…

没有在 SCM 配置或者插件中的 Git 存储库配置错误

问题: jenkins 配置新项目后首次运行报错如下,同时git代码分支无法选择。 已返回默认值 没有在 SCM 配置或者插件中的 Git 存储库配置错误 选项"使用仓库"设置为:"http://xxxx.git 请检查配置 原因: 配置pipeline 脚本时指…

HBU深度学习实验15-循环神经网络(2)

LSTM的记忆能力实验 飞桨AI Studio星河社区-人工智能学习与实训社区 (baidu.com) 长短期记忆网络(Long Short-Term Memory Network,LSTM)是一种可以有效缓解长程依赖问题的循环神经网络.LSTM 的特点是引入了一个新的内部状态&am…