分享 | eBay流量管理之负载均衡及应用交付
Posted eBay技术荟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分享 | eBay流量管理之负载均衡及应用交付相关的知识,希望对你有一定的参考价值。
导 读
eBay FE Team通过在硬件负载均衡器上添加元素、应用负载均衡算法并绑定七层规则,智能地将应用中的请求和网络流量分发到不同的Machine和Pool,实现负载均衡和应用交付,完成流量管理。希望能给同业人员相应的借鉴与启发。
1. HLB基本介绍
在网络安装中,硬件负载均衡器(HLB)一般安装在服务器前面,作为客户端和服务器之间的透明代理,在请求转发到服务器前进行流量管理。
一般而言,在基于TCP代理的负载均衡技术实现中,客户端与服务器的请求通信过程如下:
3)服务器处理后将响应结果发回负载均衡器(SIP → SNIP);
4)负载均衡器将最终结果返回给客户端(VIP → CIP)。
这样一来,HLB与客户端、服务器之间实际上是两个相互独立的TCP连接,服务器并不知道真正的客户端IP,但CIP可作为附加字段插入HTTP Header以告知服务器。
当然,除了TCP代理,负载均衡常用的实现机制还包括:DSR模式、Tunnel模式等。
2. 流量管理
在eBay有极其庞大数目的机器(Machine)提供各样的服务,而一组提供类似功能的机器可以简单理解为属于一个Pool,那么FE Team如何借助负载均衡器将流量分发到不同的Machine和Pool呢?这里以常用的负载均衡器之一NetScaler为例介绍该过程。
虚拟服务器由名称、VIP、端口、协议等表示,其端口和协议决定代表的具体服务器;
一般而言,虚拟服务器和服务协同工作,服务作为LB上的逻辑抽象,绑定到虚拟服务器上,可以是服务器的IP:Port,也可以是下一层LB的虚拟服务器;
LB对服务对象进行定时(比如每5秒)的健康探测,若探测失败,则将服务标记为DOWN,否则为UP。LB分发请求时,DOWN的服务将被排除在外,流量只分发给UP的服务。
当NetScaler通过10.10.10.10:80收到HTTP请求时,根据VS_HTTP上虚拟服务器和服务的绑定情况、相应的负载均衡算法选择向Server1或Server2发送请求;同样,当通过10.10.10.10:443收到HTTPS请求时,根据VS_SSL上的配置绑定将请求发送给Server2或Server3。由此实现了流量的分配与转发。
-
最少连接算法 (Least Connection),优先选择连接数最少的后端节点,是默认的负载均衡算法,在大多数情况下提供了最佳性能; -
轮询算法 (Round Robin),将用户请求依次轮流分配给内部服务器; -
最少响应时间算法 (Least Response Time), 优先选择具有最少活跃连接和最低平均响应时间的服务器,可扩展为基于监控程序的最小响应时间算法(LRTM); -
最小带宽算法 (Least Bandwidth),优先选择当前流量吞吐最小的服务器;
NetScaler是以软件为中心的应用程序交付解决方案,可以通过特定的负载均衡算法将应用中的流量分发到不同机器上,那如果应用要求分发到指定Pool,又该怎么做呢?
这就涉及到七层规则啦。NetScaler常用的七层规则包括:
-
Content Switching Policy ,将请求路由到指定的下游Pool; -
Responder Policy ,针对特定的HTTP请求实现重定向(HTTP Redirect)、丢弃(TCP DROP)、重置(TCP RESET)等; -
Rewrite Policy ,改写请求后转发给后端服务,“改写”包括:改写URL、添加/修改/删除Header。
一个VIP可以根据应用要求同时支持多种规则。
3. 高可用性
其中,主设备(Primary Node)主动连接并管理服务器,辅助设备(Secondary Node)与主设备配置始终保持同步,若主设备发生故障,则辅助设备成为主设备。主设备和辅助设备相互定时发送检测信号和运行状况检查请求,从而监控彼此,以提供高可用性。
当然为了不同场景的需要,我们还提供了BGP等方式,这里不作详述。
4. 多数据中心多层部署
一般而言,将来自相同数据中心的客户端访问的大部分流量(如:99%)分发到本数据中心,少部分流量(如:1%)转到其他数据中心,实现跨数据中心访问。若一个数据中心出现问题,流量会自动转发到其他数据中心。
5.自动化管理方案
5. 自动化管理方案
6. 小试牛刀
以NetScaler为例,Citrix公司提供了一个容器化的应用交付控制器NetScaler CPX,方便用户体验。我们应用NetScaler CPX做了2个小实验,深入理解负载均衡流量管理和七层规则,有兴趣的小伙伴可以试试。
选择两台CentOS主机S1和S2,假设IP分别为10.148.177.194和10.148.177.197,在S1上安装Docker并设置NetScaler CPX实例,搭建负载均衡拓扑。
使用如下脚本,分别启动S1和S2的80端口,设置GET请求返回主机名Server及IP。
假设S1和S2属于相同Pool,均安装有应用程序A,分别表示为服务svc-A-S1和svc-A-S2,并绑定到虚拟服务器VIP-A。CPX对外暴露30000端口用于访问应用程序A,负载均衡拓扑、CLI命令及CPX中的配置分别如下图所示。
图6.4(点击可查看大图)
图6.5(点击可查看大图)
假设S1和S2属于不同Pool,S1安装应用程序A1,S2安装应用程序A2,分别表示为绑定到LBV-A1的服务svc-A1和绑定到LBV-A2的服务svc-A2,CPX对外暴露30000端口,默认情况下访问S1上的应用程序A1。添加Content Switching Policy,当请求token为/check时,将请求路由到S2上的A2,负载均衡拓扑、CLI命令及CPX中的配置分别如下图所示。
另外,NetScaler CPX还可以用于管理微服务和负载均衡东西向流量。这里附上NetScaler官网和API,有兴趣的同学可以扫码了解详情,进一步实验喔 。
☟☟☟
点击上图
扫码查看NetScaler
点击上图
扫码查看API
总 结
eBay FE Team应用多数据中心多层部署的硬件负载均衡器,基于负载均衡算法将流量转发到不同Machine,基于七层规则将流量转发到不同Pool,应用自动化工具实现了高可用的流量分发与管理,确保了用户业务应用能够快速、安全、可靠地交付。
为了方便小伙伴们实验,本文还在基于容器的NetScaler CPX上实现了无成本体验NetScaler,大家是不是很想试试呢?
本文作者
Yuting Cao
eBay软件开发工程师
2019年上海交通大学硕士毕业
目前致力于负载均衡流量管理
以及自动化平台的实现
下集预告
kubernetes网络的硬核排查!
↓点击阅读原文,eBay大量优质职位虚位以待。
以上是关于分享 | eBay流量管理之负载均衡及应用交付的主要内容,如果未能解决你的问题,请参考以下文章