ServiceMesh最火项目Istio架构设计哲学

简介: ServiceMesh最火项目Istio架构设计哲学

架构设计

1.0架构

20210131154633344.pngIstio 服务网格从逻辑上分为数据平面和控制平面。

数据平面

由一组智能代理(Envoy)组成,被部署为 sidecar。这些代理负责协调和控制微服务之间的所有网络通信。他们还收集和报告所有网格流量的遥测数据。

Envoy

sidecar集合。Istio 使用 Envoy 代理的扩展版本。Envoy 是用 C++ 开发的高性能代理,用于协调服务网格中所有服务的入站和出站流量。Envoy 代理是唯一与数据平面流量交互的 Istio 组件。


Envoy 代理被部署为服务的 sidecar,在逻辑上为服务增加了 Envoy 的许多内置特性,例如:

动态服务发现

负载均衡

TLS 终端

HTTP/2 与 gRPC 代理

熔断器

健康检查

基于百分比流量分割的分阶段发布

故障注入

丰富的指标


这种 sidecar 部署允许 Istio 提取大量关于流量行为的信号作为属性。Istio 可以使用这些属性来实施策略决策,并将其发送到监视系统以提供有关整个网格行为的信息。


sidecar 代理模型还允许您向现有的部署添加 Istio 功能,而不需要重新设计架构或重写代码。您可以在设计目标中读到更多关于为什么我们选择这种方法的信息。


由 Envoy 代理启用的一些 Istio 的功能和任务包括:

流量控制功能:通过丰富的 HTTP、gRPC、WebSocket 和 TCP 流量路由规则来执行细粒度的流量控制。


网络弹性特性:重试设置、故障转移、熔断器和故障注入。


安全性和身份验证特性:执行安全性策略以及通过配置 API 定义的访问控制和速率限制。


基于 WebAssembly 的可插拔扩展模型,允许通过自定义策略实施和生成网格流量的遥测。

控制平面

管理并配置代理来进行流量路由。

  • Pilot,负责将配置分发给 sidecar 组件
  • Citadel,负责安全
  • Mixer,负责遥测和策略,一种插件模型。但存在问题:

需要和数据平面进行两次通信,但其又是单独部署的进程外的组件,所以每次请求都要和进程外进行通信,降低整个请求的性能。插件模型虽然带来很好的扩展性,但也产生耦合:当需要添加新插件或修改已有插件,都要重新部署 mixer。所以下一版本就需要解耦

Istio 中的流量分为数据平面流量和控制平面流量。数据平面流量是指工作负载的业务逻辑发送和接收的消息。控制平面流量是指在 Istio 组件之间发送的配置和控制消息用来编排网格的行为。Istio 中的流量管理特指数据平面流量。

1.1

1.png

变化

adapter:

mixer 增加了一个进程外的 adapter概念,即把原来集成在组件内部的插件变成了进程外的一个适配器,如此,当你需要修改插件时,无需修改 mixer本身。

gallery:

负责 istio 的配置验证,提取处理和分发,这些原本都是 pilot 的功能,但他们会导致 pilot 和底层的平台比如 k8s 耦合。

缺点

  • 性能
    插件又拆分,导致网络请求次数又增加
  • 易用性
    组件都需要单独部署,维护困难。

可见解耦虽好,但也不是银弹,我们始终还得坚持软件架构的取舍原则!

MVP 理论:开发团队通过提供最小化可行产品,获取用户反馈,并在最小化可行产品上持续地进行迭代直到产品达到一个相对稳定的状态。

回归单体

复杂是万恶之源,学会停止焦虑,爱上单体一Istio 开发团队

修正原有架构的复杂性:

  • 维护性
  • 多组件分离的必要性
  • 伸缩性
  • 安全性

1.png

istod

Istiod 提供服务发现、配置和证书管理。


Istiod 将控制流量行为的高级路由规则转换为 Envoy 特定的配置,并在运行时将它们传播到 sidecar。 Pilot 抽象了特定于平台的服务发现机制,并将它们合成为任何符合 Envoy API 的 sidecar 都可以使用的标准格式。


Istio 可以支持对 Kubernetes 或 VM 等多种环境的发现。


可以使用 Istio 的流量管理 API 来指示 Istiod 细化 Envoy 配置,以对服务网格中的流量进行更精细的控制。


Istiod 安全性通过内置身份和凭证管理实现强大的服务到服务和最终用户身份验证。您可以使用 Istio 升级服务网格中未加密的流量。使用 Istio,运营商可以基于服务身份而不是相对不稳定的第 3 层或第 4 层网络标识符来实施策略。此外,可以使用 Istio 的授权功能来控制谁可以访问你的服务。


Istiod 充当证书颁发机构 (CA) 并生成证书以允许数据平面中的安全 mTLS 通信。

image.png

目录
相关文章
Kubernetes 安全 容器
515 0
|
人工智能 自然语言处理 JavaScript
Github又一AI黑科技项目,打造全栈架构,只需一个统一框架?
Motia 是一款现代化后端框架,融合 API 接口、后台任务、事件系统与 AI Agent,支持 JavaScript、TypeScript、Python 多语言协同开发。它提供可视化 Workbench、自动观测追踪、零配置部署等功能,帮助开发者高效构建事件驱动的工作流,显著降低部署与运维成本,提升 AI 项目落地效率。
956 0
|
存储 Java 数据库连接
简单学Spring Boot | 博客项目的三层架构重构
本案例通过采用三层架构(数据访问层、业务逻辑层、表现层)重构项目,解决了集中式开发导致的代码臃肿问题。各层职责清晰,结合依赖注入实现解耦,提升了系统的可维护性、可测试性和可扩展性,为后续接入真实数据库奠定基础。
919 0
|
消息中间件 监控 前端开发
如何开发项目管理系统中的项目结项板块?(附架构图+流程图+代码参考)
在企业项目管理中,“项目结项”是关键环节,常因流程不清、文档不全、审批滞后等问题导致交付困难。本文介绍如何通过“项目结项”模块实现线上化管理,涵盖结项申请、审批流程、成果上传、权限控制等功能,帮助团队高效完成项目收尾,避免成果丢失与流程混乱。内容包括功能设计、业务流程、系统架构、数据库设计、核心代码实现、前端交互及优化建议,助力项目管理系统快速落地并稳定运行。
|
监控 前端开发 BI
如何开发项目管理系统中的项目收支板块?(附架构图+流程图+代码参考)
本文深入讲解项目管理系统中项目收支模块的设计与实现,涵盖预算、收入与支出管理,以及报表分析功能。内容包括模块功能概述、业务流程、开发技巧与实现方法,并提供数据库设计及前后端代码示例,助力企业打造高效的项目财务管控系统。
|
SQL 前端开发 项目管理
如何开发项目管理系统中的项目执行板块?(附架构图+流程图+代码参考)
随着企业项目规模扩大,传统管理方式已难以满足需求。本文介绍项目管理系统中“项目执行”板块的开发,涵盖任务管理、创建、验收及进度汇报等核心环节。通过功能设计、业务流程和开发技巧,结合代码示例,帮助企业高效推进项目执行,提升管理效率。
|
数据挖掘 项目管理 Python
如何开发项目管理系统中的项目启动板块?(附架构图+流程图+代码参考)
本文介绍了项目管理系统中“项目启动”板块的设计与实现,涵盖功能模块、业务流程、开发技巧及效果展示,并提供代码参考和常见问题解答,助力企业高效搭建项目管理平台。
|
缓存 Java 数据库
Java 项目分层架构实操指南及长尾关键词优化方案
本指南详解基于Spring Boot与Spring Cloud的Java微服务分层架构,以用户管理系统为例,涵盖技术选型、核心代码实现、服务治理及部署实践,助力掌握现代化Java企业级开发方案。
563 2
|
设计模式 开发者
一、HarmonyOS Next 开发者手册项目之项目架构设计
该项目是一个基于HarmonyOS Next的开发者学习手册应用,旨在帮助开发者系统学习HarmonyOS开发知识。项目采用分级学习方式,从基础到高级逐步深入讲解技术与实践案例。前四章重点介绍应用架构相关内容,助力快速掌握应用核心。 项目结构清晰,包含主入口、源代码目录、公共资源和工具等。页面导航分为多个阶段:萌新小白(基础入门)、登堂入室(进阶学习)、进阶高手(高级开发)。支持Markdown解析,使用`@luvi/lv-markdown-in`插件展示内容,并定义了多种数据结构以规范开发流程。 源码已开源,持续更新中
349 1
|
存储 数据采集 机器学习/深度学习
新闻聚合项目:多源异构数据的采集与存储架构
本文探讨了新闻聚合项目中数据采集的技术挑战与解决方案,指出单纯依赖抓取技术存在局限性。通过代理IP、Cookie和User-Agent的精细设置,可有效提高采集策略;但多源异构数据的清洗与存储同样关键,需结合智能化算法处理语义差异。正反方围绕技术手段的有效性和局限性展开讨论,最终强调综合运用代理技术与智能数据处理的重要性。未来,随着机器学习和自然语言处理的发展,新闻聚合将实现更高效的热点捕捉与信息传播。附带的代码示例展示了如何从多个中文新闻网站抓取数据并统计热点关键词。
817 2
新闻聚合项目:多源异构数据的采集与存储架构