Service Mesh 开源实现之 Istio 架构概览

1747b25aa1ec9121fb335dbc3159ecbb.gif

来源:无敌码农
作者:无敌码农

今天的文章将从更宏观的概念架构入手,来全面介绍Istio这一最著名的服务网格开源解决方案,以求从整体上将Istio实现服务网格的核心原理阐述清楚!

Istio中的关键概念

b8ae07507774cd976032761758ab6dad.png

要学习Istio需要先明确以下几个关键术语。

1.容器/容器镜像

进入到云原生时代的服务网格架构,应用的发布、部署都是围绕Kubernetes为代表的容器基础设施展开的。这就需要对容器容器镜像的概念有清晰的理解。

实际上,容器的普及要归功于Docker技术的流行,而从本质上说容器就是运行在操作系统中的,受资源隔离限制的一组进程,也称为“容器运行时”。它可以将用户打包的代码及其所赖的关系完整的还原出来。通过容器化运行的应用程序,可以更快、更可靠地运行,而不受具体计算环境的影响。

容器镜像,是容器化的重要介质和载体。从形式上来说,它就是一个轻量级的、独立的、可执行的软件包文件,包括了运行应用程序所需要的一切:代码、工具、系统库及各种设置。

容器技术的出现,彻底颠覆了应用构建、发布及运行的方式,目前已经成为服务端应用发布的事实标准。后续要聊到的Istio服务网格技术,无论是“网格基础组件”还是“应用程序”,都是以容器的方式运行在Kubernetes容器平台之上的。

2.微服务

微服务是一种架构风格,它将一个庞大的单体服务拆分为一组松散耦合的微服务集合,该微服务集合提供了与单个单体应用相同的功能。但微服务可以独立于其他服务进行独立的开发和部署。此外,微服务是围绕业务能力组织的,可以由较小的团队拥有,因此,在开发/部署上能够实现更小、更独立的迭代。

目前主要的微服务架构解决方案,以Spring Cloud为代表的微服务架构体系是主流;但随着云原生技术概念的流行,以Istio为代表的Service Mesh(服务网格)微服务架构方案也在逐步得到推广。

3.控制平面

在以Spring Cloud为代表的传统微服务架构中,应用本身与服务治理逻辑是耦合在一起的。而在Service Mesh(服务网格)方案中,服务治理规则的管理服务治理行为应用本身都是互相独立,这就使得应用可以专注于业务,而服务治理逻辑则完全可以抽离出来由运维团队进行统一的管理。

像这种专门负责服务治理规则管理的逻辑或组件,在Service Mesh(服务网格)架构中就叫做“控制平面“。“控制平面”主要由API和工具组成,用于管理服务治理行为(数据平面)。服务网格运维人员可以操控控制平面,以配置服务网格中的数据平面行为。例如,将流量配置作用于控制平面——翻译配置并将其推送到数据平面。

4.数据平面

在Service Mesh(服务网格)中,数据平面就是具体实现服务治理行为的代理。在Istio中数据平面由负责路由、负载均衡、服务发现、健康检查和授权/认证的Envoy代理组成。这些代理在每个服务实例的旁边运行(在k8s中,与应用容器运行在同一个Pod),拦截所有传入和传出的用户流量,并在这一过程中根据控制平面下发的服务治理规则进行流量管理。

5.Envoy

在Istio中,数据平面就是由Envoy代理实现的。它是一个现代的、高性能边缘的小型L7代理。Envoy是为大型现代微服务架构设计的,可以与Nginx和HAProxy等负载均衡器相匹配。

6.代理

在网络中,代理是一个中间服务器,位于客户端和服务端之间,可以管理请求和响应。在Istio服务网格情况下,代理(Envoy)运行在每个应用实例的前面。当向应用程序发起请求时,代理(Envoy)会拦截该请求,并将其转发给应用程序实例。同样地,当应用程序实例试图发出请求时,代理(Envoy)也会拦截出站请求并将其发送到目的地。

由于代理(Envoy)拦截了所有请求,所以它可以修改请求,从而实现流量路由、故障注入、授权等功能

7.L7代理

L7(第7层)代理在OSI模型的应用层工作。在这一层,代理可以处理每个请求的内容。例如Http就是一个流行的L7协议。因为可以访问请求的数据,所以L7代理(Envoy)就可以根据请求的内容(URL、Cookies等)做出负载均衡的决定。

Istio的架构及模块组成

3be07fe4522fa184a08adf1374f7d1ec.png

Service Mesh(服务网格)的架构方式为我们提供了一种统一的方式来连接、保护和观察微服务。网格内的代理(如Envoy)可以捕获网格内所有的通信请求和指标——每一次失败或成功的调用、重试或超时的请求都可以被捕获,并被可视化和报警。

这种将通信逻辑从业务和应用逻辑中分离出来的架构方式,可以使开发人员专注于业务逻辑,而服务网格运维人员则专注于服务网格配置。

前面通过对几个关键术语的解释,以及对服务网格架构好处的介绍,相信大家或多或少理解了什么是服务网格。接下来将重点介绍Istio这一开源的服务网格实现。

从宏观上看,Istio主要支持以下功能:

1.流量管理

流量管理是Istio最核心的功能,通过配置,可以控制服务之间的流量——例如设置断路器、超时或重试等服务治理机制,在Istio中都可以通过简单的配置改变来完成。

2.可观察性

Istio可以通过跟踪、监控和记录服务间的请求来更好地实现对服务的监控,方便我们了解服务运行情况,并及时发现和修复问题。

3.安全性

Istio可以在代理层面来管理认证、授权和通讯的加密,而无需对应用本身造成侵入。而这些安全配置操作只需要通过快速的配置变更即可完成。

接下来,我们看下Istio的架构组成。如下图所示:

2defe780e4af1178e1e8c6ade1f0bf78.png

如上图所示,Istio实现服务网格,仍然遵循了将组件分离成“控制平面”和“数据平面”这一常见的分布式系统构建模式。

Istio中的数据平面由Envoy代理组成,控制服务之间的通信。Envoy是一个用C++开发的高性能代理。Istio将Enovy代理作为一个sidecar容器注入到应用容器的旁边,然后拦截该服务的所有入站和出站流量。而这些注入应用容器旁边的Enovy代理组合在一起就构成了Istio服务网格的数据平面。

Istiod则是Istio的控制平面组件,主要提供服务发现、配置和证书管理等功能。Istiod采用YAML文件格式来编写流量控制规则,并将其转换为Envoy的可操作配置,之后通过xDS协议将配置传播给网格中的所有sidecar代理。

Istiod主要由Pilot、Citadel、Galley这三个组件组成。其中Pilot抽象了特定平台的服务发现机制(如Kubernetes、Consul或VM),并将其转换为可以被sidecar使用的标准格式。Citadel则是Istio的核心安全组件,实现证书授权、证书生成,实现数据平面中sidecar代理之间的mTLS安全通信。

而Galley则主要服务配置管理,包括验证配置信息的格式和内容正确性,并将这些配置信息提供给Pilot等其他控制平面组件使用。

Istio的流量管理实现

5bc6f5e92bbc269ab506b3b931aa1986.png

流量管理是Istio服务网格的核心能力。通过Istio的流量管理功能,演示了在服务网格中实现灰度发布的具体方法。接下来,将从原理层面来总结下Istio实现流量管理的核心逻辑。

Istio流量管理示意图如下:

6562e9aba64fc5b32014e736c06bebe3.png

如上图所示,要在Istio服务网格中实现流量管理,需要通过VirtualService(虚拟服务)DestinationRule(路由规则)资源来管理流量路由规则。

而具体的路由规则流量的执行由Istio网关资源来实现。其中Ingress Gateway(入口网关)Egress Gateway(出口网关)是Istio服务网格组件的一部分,这两个网关都运行着一个Envoy代理实例,它们在服务网格的边缘作为负载均衡器运行,入口网关接收入站连接,而出口网关则接收从集群出去的连接。

需要注意,这里理解入口网关和出口网关的概念不要狭义的理解为就是Istio服务网格的边缘入口和出口。对于Istio服务网格来说除了外部流量的进出可以通过VitrualService(虚拟服务)关联Gateway(网关资源)来实现流量路由外,网格之间也可以通过该方式来实现流量的路由。

所以,在使用Istio服务网格来实现微服务的流量管理时,可以根据场景来分别创建针对外部流量的Gateway+VirtualService资源,以及针对具体微服务网格间流量的Gateway+VirtualService资源,并通过VitrualService随时修改相应的路由规则。

而对于Gateway网格资源的创建来说,则根据是控制入口流量还是出口流量来选择关联Ingress Gateway(入口网关)还是Egress Gateway(出口网关)。

后记

04a68463f9ee1a16508a45052dfe9aa9.png

以上内容就是对Istio服务网格实现流量管理核心逻辑的简单介绍,也是为了方便大家理解之前文章中的一些操作。虽然目前以Istio服务网格架构还没有完全替代Spring Cloud微服务体系,但服务网格这种将控制平面和数据平面分离的架构思想,将是未来微服务架构的主流。

8c6c1c2fb5b2b9590816b53ca388dd0d.gif

eeaf74e51801e4a3adb6cc1e3e6fd8ef.png

往期推荐

阿里云投入 20 亿发力操作系统

移动云API大赛决赛大奖花落谁家?

Redis很厉害,使用规范来啦

阿里云发布首颗云芯片倚天710

1d00ac461d963c4ca3ec75bc6ba85bf5.gif

点分享

b2bac173461dbd13fd33d6b3049e1154.gif

点收藏

a2f447d7fe8f43a4cf204d53516acf48.gif

点点赞

dbcf41ffb50c58a9009ec8d7e015a81d.gif

点在看

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

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

相关文章

mysql外键约束分数_MySQL提高(外键约束)

外键约束1.条件语句的写法在sql中可以通过where 条件语句 来对操作对象进行筛选 -筛选a.比较运算符&#xff1a;&#xff0c;<>,,<,>注意&#xff1a;判断一个字段的值是否为空不用使用和<>&#xff0c;而是使用is null和is not nullselect number from t_co…

Java Map中那些巧妙的设计

简介&#xff1a; 他山之石可以攻玉&#xff0c;这些巧妙的设计思想非常有借鉴价值&#xff0c;可谓是最佳实践。然而&#xff0c;大多数有关Java Map原理的科普类文章都是专注于“点”&#xff0c;并没有连成“线”&#xff0c;甚至形成“网状结构”。因此&#xff0c;本文基于…

java json转xml_关于JSON与XML的区别比较

现在互联网上&#xff0c;最流行的两大传输数据的标准就是json和XML了&#xff0c;关于谁是最好的&#xff0c;一直以来都是人们争论的话题&#xff0c;其实各有各的缺点和优点&#xff1b;1.定义介绍(1).XML定义扩展标记语言 (Extensible Markup Language, XML) &#xff0c;用…

揭秘!阿里实时数仓分布式事务Scale Out设计

简介&#xff1a; Hybrid Transaction Analytical Processing(HTAP) 是著名信息技术咨询与分析公司Gartner在2014年提出的一个新的数据库系统定义&#xff0c;特指一类兼具OLTP能力&#xff08;事务能力&#xff09;和OLAP能力&#xff08;分析能力&#xff09;的数据库系统。 …

mysql对本地文件的读取_Mysql 任意读取客户端文件

load data infile "/etc/passwd" into table test FIELDS TERMINATED BY \n;实现&#xff1a;Mysql Server会读取服务端的/etc/passwd&#xff0c;然后将其数据按照\n分割插入表中&#xff0c;但现在这个语句同样要求你有FILE权限&#xff0c;以及非local加载的语句也…

使用了12个月的苹果 M1 芯片,我发现了它的「致命」弱点

作者 | Attila Vg译者 | 弯月出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;首先&#xff0c;我仍然相信苹果 M1 的芯片在技术上取得了巨大的飞跃&#xff0c;再次站在了创新的最前沿&#xff0c;然而一旦新鲜感消失之后&#xff0c;裂痕就会慢慢显现&#xff0c;…

spi 动态加载、卸载_理解 ServiceLoader类与SPI机制

对于Java中的Service类和SPI机制的透彻理解&#xff0c;也算是对Java类加载模型的掌握的不错的一个反映。了解一个不太熟悉的类&#xff0c;那么从使用案例出发&#xff0c;读懂源代码以及代码内部执行逻辑是一个不错的学习方式。一、使用案例通常情况下&#xff0c;使用Servic…

探秘RocketMQ源码——Series1:Producer视角看事务消息

简介&#xff1a; 探秘RocketMQ源码——Series1&#xff1a;Producer视角看事务消息1. 前言 Apache RocketMQ作为广为人知的开源消息中间件&#xff0c;诞生于阿里巴巴&#xff0c;于2016年捐赠给了Apache。从RocketMQ 4.0到如今最新的v4.7.1&#xff0c;不论是在阿里巴巴内部还…

三大院士、十大数据库掌门人,岳麓对话开启数字经济新时代!

10月23日&#xff0c;第二届“长沙 中国1024程序员节”在湖南长沙盛大开幕。大会以“开源开放、算据赋能——开启数字经济新时代”为主题&#xff0c;囊括岳麓尖峰对话、2021技术英雄大会、18场专业主题论坛/峰会&#xff1b;50企业创新展&#xff0c;联动100海内外高校&#…

java 队列_百战程序员:Java并发阻塞队列

阻塞队列 (BlockingQueue)是Java util.concurrent包下重要的数据结构&#xff0c;BlockingQueue提供了线程安全的队列访问方式&#xff1a;当阻塞队列进行插入数据时&#xff0c;如果队列已满&#xff0c;线程将会阻塞等待直到队列非满&#xff1b;从阻塞队列取数据时&#xff…

select事件有哪些_Android 深入底层:Linux事件管理机制 epoll

在linux 没有实现epoll事件驱动机制之前&#xff0c;我们一般选择用select或者poll等IO多路复用的方法来实现并发服务程序。在linux新的内核中&#xff0c;有了一种替换它的机制&#xff0c;就是epoll。select()和poll() IO多路复用模型select的缺点&#xff1a;单个进程能够监…

如何从 0 到 1 开发 PyFlink API 作业

简介&#xff1a; 以 Flink 1.12 为例&#xff0c;介绍如何使用 Python 语言&#xff0c;通过 PyFlink API 来开发 Flink 作业。 Apache Flink 作为当前最流行的流批统一的计算引擎&#xff0c;在实时 ETL、事件处理、数据分析、CEP、实时机器学习等领域都有着广泛的应用。从 F…

殷浩详解DDD:如何避免写流水账代码?

简介&#xff1a; 在日常工作中我观察到&#xff0c;面对老系统重构和迁移场景&#xff0c;有大量代码属于流水账代码&#xff0c;通常能看到开发在对外的API接口里直接写业务逻辑代码&#xff0c;或者在一个服务里大量的堆接口&#xff0c;导致业务逻辑实际无法收敛&#xff0…

重度使用Flutter研发模式下的页面性能优化实践

简介&#xff1a; 淘宝特价版是集团内应用Flutter技术场景比较多&#xff0c;且用户量一亿人以上的应用了。目前我们首页、详情、店铺、我的&#xff0c;看看短视频&#xff0c;及评价&#xff0c;设置等二级页面都在用Flutter技术搭建。一旦Flutter有性能瓶颈&#xff0c;重度…

蚂蚁构建服务演进史

简介&#xff1a; 自动化构建和CI/CD往往是相辅相成的&#xff0c;可以理解为&#xff0c;自动化构建是温饱问题&#xff0c;解决了温饱就会有更多的提高生产力的诉求&#xff0c;也就是对应的CI平台&#xff0c;CI/CD本篇文章不做扩展。 作者 | 琉克 来源 | 阿里技术公众号 一…

这个云原生开发的痛点你遇到了吗?

简介&#xff1a; 上云从来都不是一片坦途&#xff0c;在此过程中我们总会遇到一些困难和挑战&#xff0c;得益于云原生技术的日益成熟&#xff0c;这些问题一定会有相应的解法。 作者&#xff1a;纳海 背景 在云原生时代&#xff0c;国内外众多云厂商释放出强大的技术红利…

mysql安装pymyaql_python安装mysql的依赖包mysql-python操作

一般情况下&#xff0c;使用pip命令安装即可&#xff1a;[rootdthost27 ~]# pip install mysql-python但是在实际工作环境中&#xff0c;往往会安装失败&#xff0c;这是因为系统缺少mysql的相关依赖组件。所以必须先安装mysql-devel类的包&#xff0c;而且必须要对应好mysql客…

「技术人生」专题第1篇:什么是技术一号位?

前言 什么是技术一号位、有哪些关注点、怎么做技术一号位&#xff1f; 做了研发团队的技术 leader 以后&#xff0c;要处理的事情非常多&#xff0c;如果对自己扮演的角色没有一个清晰的认知&#xff0c;就会出现该做的事情没有做&#xff0c;不该做的事情投入了过多的精力&…

服务器之后加码存储,浪潮信息重磅发布新一代 G6 存储平台

作者 | 宋慧 出品 | CSDN云计算 提到浪潮&#xff0c;业界首先想到的是浪潮信息服务器占有的优势和市场份额。不过&#xff0c;其实浪潮在存储领域也持续深耕和发力中。据国际分析机构 Gartner 报告显示&#xff0c;2021 年第一季度&#xff0c;浪潮存储在全闪存存储、分布式存…

技术干货 | 轻松两步完成向 mPaaS 小程序传递启动参数

简介&#xff1a; 以传递 name 和 pwd 参数为例&#xff0c;分别介绍此场景在 Android 小程序和 iOS 小程序中的实现过程。 前言 在部分场景下&#xff0c;需要向小程序的默认接收页&#xff08;pages/index/index&#xff09;传递参数。 本文将以传递 name 和 pwd 参数为例&…