架构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)服务网格的未来展望
  • **挑战:**市场碎片化、产品成熟度不足、兼容性问题。
  • **前景:**服务网格可能是未来的发展方向,但需要时间和实践来验证其价值。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

constexpr、const和 #define 的比较

constexpr、const 和 #define 的比较 一、定义常量 constexpr 定义:constexpr用于定义在编译期可求值的常量表达式。示例:constexpr int x 5;这里,x的值在编译期就确定为5。 const 定义:const表示变量在运行期间不能被修改&…

C# RSA加密和解密,RSA生成私钥和公钥

C# RSA加密和解密,RSA生成私钥和公钥(使用XML格式秘钥) 目录 前言生成xml格式的公钥和私钥 PrivateKeyPublicKey测试加密、解密 方案1:RSA公钥加密,RSA私钥解密方案2:RSA私钥加密,RSA私钥解密…

洛谷P1208

[USACO1.3] 混合牛奶 Mixing Milk - 洛谷 [USACO1.3] 混合牛奶 Mixing Milk 题目描述 由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要。帮助 Marry 乳业找到最优的牛奶采购方案。 Marry 乳业从一些奶农手中采购牛奶&…

Linux命令进阶·软链接命令(ln)、查看系统时间命令(date)、自动校准系统时间程序(ntp)

目录 1. 软链接——ln命令 2. 查看系统时间——date命令 3. 自动校准系统时间——ntp程序 1. 软链接——ln命令 在系统中创建软链接,可以将文件、文件夹链接到其他位置。作用相当于windows中的快捷方式。 语法:ln -s 参数1 参数2 -s选项&#xff…

RabbitMQ如何保证消息不被重复消费

前言: 正常情况下,消费者在消费消息后,会给消息队列发送一个确认,消息队列接收后就知道消息已经被成功消费了,然后就从队列中删除该消息,也就不会将该消息再发送给其他消费者了。不同消息队列发出的确认消…

#Vue3篇:生命周期简洁

setup类似breforeCreate create setup() 钩子是在组件中使用组合式 API 的入口 挂载 onBeforeMount组件被挂载之前执行 onMounted 组件挂载完后执行 更新 onBeforeUpdate组件响应式状态变更而更新Dom树之后执行 onUpdated 组件响应式状态变更而更新Dom树之后执行 卸载 …

java 使用JSqlParser和CCJSqlParser 解析sql

maven <dependency><groupId>com.github.jsqlparser</groupId><artifactId>jsqlparser</artifactId><version>4.9</version> </dependency>解析SQL String sql "select aa,bb from b"; Statement statementCCJSq…

动态规划——机器分配、01背包问题

一、机器分配 题目名称&#xff1a;机器分配 题目描述&#xff1a; 总公司拥有高效设备M台&#xff0c;准备分给下属的N个分公司。 各分公司若获得这些设备&#xff0c;可以为国家提供一定的盈利。 问&#xff1a;如何分配这M台设备才能使国家得到的盈利最大&#xff1f;求出最…

深入解析 JavaScript 中的 Blob 对象:二进制数据处理的核心

文章目录 1.Blob是什么2.Blob用法实例属性Blob方法slice方法text方法 示例1&#xff1a;字符串 Blob示例2&#xff1a;数组和字符串 Blob示例3&#xff1a;从文件输入创建 3.使用场景1.创建 Blob 并生成 URL&#xff0c;下载文件2.文件上传3.切片上传3.Blob用于URL在线预览PDF文…

NanoLog起步笔记-7-log解压过程初探

nonolog起步笔记-6-log解压过程初探 再看解压过程建立调试工程修改makefile添加新的launch项 注&#xff1a;重新学习nanolog的README.mdPost-Execution Log Decompressor 下面我们尝试了解&#xff0c;解压的过程&#xff0c;是如何得到文件头部的meta信息的。 再看解压过程 …

人工智能大模型LLM开源资源汇总(持续更新)

说明 目前是大范围整理阶段&#xff0c;所以存在大量机翻说明&#xff0c;后续会逐渐补充和完善资料&#xff0c;减少机翻并增加说明。 Github上的汇总资源&#xff08;大部分英文&#xff09; awesome-production-machine-learning 此存储库包含一系列精选的优秀开源库&am…

C++实现排序算法:冒泡排序

目录 前言 冒泡排序性质 C代码实现冒泡排序 冒泡图解 第一趟排序 第二趟排序 第三趟排序 排序结果 结语 前言 冒泡排序的基本思想是通过从前往后&#xff08;从后往前&#xff09;两两比较&#xff0c;若为逆序&#xff08;即arr[i] < arr[i 1]&#xff09;则交换…

中介者模式的理解和实践

一、中介者模式概述 中介者模式&#xff08;Mediator Pattern&#xff09;&#xff0c;也称为调解者模式或调停者模式&#xff0c;是一种行为设计模式。它的核心思想是通过引入一个中介者对象来封装一系列对象之间的交互&#xff0c;使得这些对象不必直接相互作用&#xff0c;从…

PlantUML——类图

背景 类图是UML模型中的静态视图&#xff0c;其主要作用包括&#xff1a; 描述系统的结构化设计&#xff0c;显示出类、接口以及它们之间的静态结构和关系。简化对系统的理解&#xff0c;是系统分析与设计阶段的重要产物&#xff0c;也是系统编码和测试的重要模型依据。 在U…

【Java知识】Java进阶-如何开启远程调式

java远程调试 概述Java远程调试的开启与底层原理开启Java远程调试底层原理 JVM参数 概述 Java远程调试的开启与底层原理 开启Java远程调试 Java远程调试允许开发者在本地IDE&#xff08;如Eclipse、IntelliJ IDEA等&#xff09;中调试运行在远程服务器上的Java应用程序。以下…

入选国家数据局案例!浙江“一体化智能化公共数据平台”总体架构详解~

国家数据局在2024中国国际大数据产业博览会上发布了首批50个数字中国建设典型案例。案例涉及数据基础设施、数据资源、数字技术创新、数字政府、数字经济、数字社会、数字文化、数字生态文明等领域&#xff0c;集中反映了近年来数字中国建设的实践和成效。 其中&#xff0c;由…

vscode IntelliSense Configurations

IntelliSense 是一个强大的代码补全和代码分析功能&#xff0c;它可以帮助开发者提高编程效率。图中显示的是 VSCode 的 IntelliSense 配置界面&#xff0c;具体配置如下&#xff1a; Compiler path&#xff08;编译器路径&#xff09;: 这里指定了用于构建项目的编译器的完整路…

同三维TL200H2S6 6机位精品教育录播主机

录制点播、直播导播、互动、音频处理器、中控等多功能为一体 8路视频输入:6路SDI1路HDMI1(4K30)1路(3选1:HDMI2/2路VGA) 2路视频输出&#xff1a;1路HDMI1(4K30)1路&#…

欢乐斗地主案例

1&#xff0c;创建对象 package anlidoudizhu;public class pai implements Comparable<pai> {private Double value;private String name;Overridepublic int compareTo(pai o) {return -Double.compare(this.value,o.value);}//升序排序&#xff0c;treeset集合public…

技术型企业如何高效搭建企业博客以增强品牌影响力和市场竞争力

在数字化时代&#xff0c;技术型企业面临着激烈的市场竞争和快速变化的行业环境。为了在这场竞争中脱颖而出&#xff0c;企业需要寻找新的营销渠道和品牌建设工具。企业博客作为一种低成本、高效率的在线内容平台&#xff0c;已经成为技术型企业增强品牌影响力和市场竞争力的重…