Istio流量治理原理之负载均衡(内含福利)

 

流量治理是一个很是宽泛的话题,例如:html

  • 动态修改服务间访问的负载均衡策略,好比根据某个请求特征作会话保持;算法

  • 同一个服务有两个版本在线,将一部分流量切到某个版本上;后端

  • 对服务进行保护,例如限制并发链接数、限制请求数、隔离故障服务实例等;浏览器

  • 动态修改服务中的内容,或者模拟一个服务运行故障等。网络

在Istio中实现这些服务治理功能时无须修改任何应用的代码。较之微服务的SDK方式,Istio以一种更轻便、透明的方式向用户提供了这些功能。用户能够用本身喜欢的任意语言和框架进行开发,专一于本身的业务,彻底不用嵌入任何治理逻辑。只要应用运行在Istio的基础设施上,就可使用这些治理能力。架构

一句话总结Istio流量治理的目标:以基础设施的方式提供给用户非侵入的流量治理能力,用户只需关注本身的业务逻辑开发,无须关注服务访问管理。并发

Istio流量治理的概要流程如图1所示:负载均衡

图1  Istio流量治理的概要流程框架

 

在控制面会通过以下流程:
(1)管理员经过命令行或者API建立流量规则;
(2)Pilot将流量规则转换为Envoy的标准格式;
(3)Pilot将规则下发给Envoy。异步

在数据面会通过以下流程:
(1)Envoy拦截Pod上本地容器的Inbound流量和Outbound流量;
(2)在流量通过Envoy时执行对应的流量规则,对流量进行治理。

负载均衡

下面具体看看Istio提供了流量治理中的负载均衡功能。

负载均衡从严格意义上讲不该该算治理能力,由于它只作了服务间互访的基础工做,在服务调用方使用一个服务名发起访问的时候能找到一个合适的后端,把流量导过去。

如图2所示,传统的负载均衡通常是在服务端提供的,例如用浏览器或者手机访问一个Web网站时,通常在网站入口处有一个负载均衡器来作请求的汇聚和转发。服务的虚拟IP和后端实例通常是经过静态配置文件维护的,负载均衡器经过健康检查保证客户端的请求被路由到健康的后端实例上。

图2  服务端的负载均衡器

 

在微服务场景下,负载均衡通常和服务发现配合使用,每一个服务都有多个对等的服务实例,须要有一种机制将请求的服务名解析到服务实例地址上。服务发现负责从服务名中解析一组服务实例的列表,负载均衡负责从中选择一个实例。

如图3所示为服务发现和负载均衡的工做流程。无论是SDK的微服务架构,仍是Istio这样的Service Mesh架构,服务发现和负载均衡的工做流程都是相似的,以下所述:
(1)服务注册。各服务将服务名和服务实例的对应信息注册到服务注册中心。
(2)服务发现。在客户端发起服务访问时,以同步或者异步的方式从服务注册中心获取服务对应的实例列表。
(3)负载均衡。根据配置的负载均衡算法从实例列表中选择一个服务实例。

图3  服务发现和负载均衡的工做流程

 

Istio的负载均衡正是其中的一个具体应用。在Istio中,Pilot负责维护服务发现数据。如图4所示为Istio负载均衡的流程,Pilot将服务发现数据经过Envoy的标准接口下发给数据面Envoy,Envoy则根据配置的负载均衡策略选择一个实例转发请求。Istio当前支持的主要负载均衡算法包括:轮询、随机和最小链接数算法。

图4  Istio负载均衡的流程

 

在Kubernetes上支持Service的重要组件Kube-proxy,实际上也是运行在工做节点的一个网络代理和负载均衡器,它实现了Service模型,默认经过轮询等方式把Service访问转发到后端实例Pod上,如图5所示。

图5  Kubernetes的负载均衡

 

本篇内容节选及改编自《云原生服务网格Istio:原理、实战、架构与源码解析》

本书购买连接:https://item.jd.com/12538407.html

 

将本篇内容转发至朋友圈集齐6个赞,并截图于“京东云开发者社区”公众号后台进行回复。

咱们将为第六、6六、99位回复者送出《云原生服务网格Istio:原理、实战、架构与源码解析》。

本期获奖名单将于本周日(7月7日)揭晓,快快点击“好看”,而且转发到朋友圈吧!

欢迎点击“连接”了解京东云更多精彩内容

 

推荐阅读

干货 | 三分钟带你挑选专属负载均衡

干货 | 京东云应用负载均衡(ALB)多功能实操

 

点击"京东云"了解更多负载均衡产品信息

相关文章
相关标签/搜索