Istio流量治理原理之负载均衡
流量治理是一个非常宽泛的话题,例如:
● 动态修改服务间访问的负载均衡策略,比如根据某个请求特征做会话保持;
● 同一个服务有两个版本在线,将一部分流量切到某个版本上;
● 对服务进行保护,例如限制并发连接数、限制请求数、隔离故障服务实例等;
● 动态修改服务中的内容,或者模拟一个服务运行故障等。
在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
欢迎点击“链接”了解更多精彩内容
推荐阅读
干货 | 三分钟带你挑选专属负载均衡
干货 | 京东云应用负载均衡(ALB)多功能实操
Istio流量治理原理之负载均衡的更多相关文章
- Istio 流量治理功能原理与实战
		
一.负载均衡算法原理与实战 负载均衡算法(load balancing algorithm),定义了几种基本的流量分发方式,在Istio中共有4种标准负载均衡算法. •Round_Robin: 轮询算 ...
 - idou老师教你学Istio 19 : Istio 流量治理功能原理与实战
		
一.负载均衡算法原理与实战 负载均衡算法(load balancing algorithm),定义了几种基本的流量分发方式,在Istio中一共有4种标准负载均衡算法. •Round_Robin: 轮询 ...
 - HBase流量限制和表负载均衡剖析
		
1.概述 在HBase-1.1.0之前,HBase集群中资源都是全量的.用户.表这些都是没有限制的,看似完美实则隐患较大.今天,笔者就给大家剖析一下HBase的流量限制和表的负载均衡. 2.内容 也许 ...
 - istio流量管理:非侵入式流量治理
		
在服务治理中,流量管理是一个广泛的话题,一般情况下,常用的包括: 动态修改服务访问的负载均衡策略,比如根据某个请求特征做会话保持: 同一个服务有多版本管理,将一部分流量切到某个版本上: 对服务进行保护 ...
 - 【转】Nginx学习---负载均衡的原理、分类、实现架构,以及使用场景
		
[原文]https://www.toutiao.com/i6593604356799463944/ [原文]https://www.toutiao.com/i6592741060194075143/ ...
 - 最小轻量级的Istio来了,仅使用流量治理能力
		
Istio 1.0.1作为8月份的版本已经发布,主要修复了1.0版本发布以来发现的一些关键Issue.官网的release note(https://istio.io/about/notes/1.0. ...
 - 每天进步一点点——负载均衡之DNS域名解析
		
转载请说明出处:http://blog.csdn.net/cywosp/article/details/38017027 在上一篇文章(http://blog.csdn.net/cywosp/ ...
 - 【系统架构】亿级Web系统搭建(1):Web负载均衡
		
当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要通过搭建不同的服务 ...
 - 负载均衡之DNS域名解析
		
转载请说明出处:http://blog.csdn.net/cywosp/article/details/38017027 在上一篇文章(http://blog.csdn.net/cywosp/arti ...
 
随机推荐
- C++  99表
			
#include<iostream> using namespace std; class Sumes { public: int sum; int i, j; }; int main() ...
 - Ubantu学习笔记2
			
又是新的一天,继续学习Ubantu命令 cat 可以查看文件内容 cat -n p.py 可以在查看文件内容的同时显示行号 cat -s p.py 可以将多行空白的地方进行合并成一行(输入空格的地方不 ...
 - UVA - 11584 Partitioning by Palindromes(划分成回文串)(dp)
			
题意:输入一个由小写字母组成的字符串,你的任务是把它划分成尽量少的回文串,字符串长度不超过1000. 分析: 1.dp[i]为字符0~i划分成的最小回文串的个数. 2.dp[j] = Min(dp[j ...
 - BZOJ:2242: [SDOI2011]计算器
			
题解:BSGS 问题:map空间 BSGS判无解 a%p!=0 0与最小非负整数 有区别 函数传参类型转换int->long long long long ->int; 费马小定理充分必要 ...
 - 自学Java第五章——《面向对象的基本特征》
			
面向对象的基本特征: 1.封装 2.继承 3.多态 6.1 封装 1.好处: (1)隐藏实现细节,方便使用者使用 (2)安全,可以控制可见范围 2.如何实现封装? 通过权限修饰符 面试题:请按照可见范 ...
 - Vulkan SDK 之 Depth Buffer
			
深度缓冲是可选的,比如渲染一个3D的立方体的时候,就需要用到深度缓冲.Swapchain就算有多个images,此时深度缓冲区也只需要一个.vkCreateSwapchainKHR 会创建所有需要的i ...
 - GitHub Token for composer
			
a2248520cdd2b1d27c2c70741003b9078530d81c
 - 第42章    AWR报表的使用
			
第42章 AWR报表的使用exec dbms_gather.gather_table_stats('scott','emp');exec dbms_gather_gather_index_stats( ...
 - SQL SERVER 2012 OBJECT_ID
			
原来一个存储过程执行正常,升级sqlserver后提示临时表已存在,后查找资料 sql server 2012 OBJECT_ID('临时表')返回的数值是负数,在 2008r2及前是正数,所以导致 ...
 - 【数据库】SQL 关系代数
			
环境:MySQL ID:MySQL WorkBench 6.3 CE 实现以下有点难度的关系除法. 先给定义: 除运算是同时从关系的水平方向和垂直方向进行运算.给定关系R(X,Y)和S(Y,Z),X. ...