12

分享 | eBay流量管理之负载均衡及应用交付

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzA3MDMyNDUzOQ%3D%3D&%3Bmid=2650507187&%3Bidx=1&%3Bsn=7b4d580b14800222ea0f5e97bc0b4510
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

vAbqAjm.jpg!web

供稿 | Yuting Cao

审稿 |  Victor Yang

编辑 | Yang Liu

本文5159字,预计阅读时间13分钟

更多干货请关注“eBay技术荟”公众号

uaUV7v2.png!web

导 读

eBay FE Team通过在硬件负载均衡器上添加元素、应用负载均衡算法并绑定七层规则,智能地将应用中的请求和网络流量分发到不同的Machine和Pool,实现负载均衡和应用交付,完成流量管理。希望能给同业人员相应的借鉴与启发。

1. HLB基本介绍

在网络安装中,硬件负载均衡器(HLB)一般安装在服务器前面,作为客户端和服务器之间的透明代理,在请求转发到服务器前进行流量管理。

般而言, 在基于TCP代理的负载均衡技术实现中, 客户端与服务器的请求通信过程如下:

1)客户端向负载均衡器提供的虚拟IP地址VIP发送请求(CIP → VIP);
2)负载均衡器从提前配置的多个子网IP地址中选择一个,替代客户端请求的源IP,并依据负载均衡算法,选择一个服务器IP作为目的IP,发送请求 (SNIP → SIP);
3)服务器处理后将响应结果发回负载均衡器(SIP → SNIP);
4)负载均衡器将最终结果返回给客户端(VIP → CIP)。

如下图所示:

feuq2uF.jpg!web

图1.1 点击 可查看大

这样一来,HLB与客户端 、服务器之间实际上是两个相互独立的TCP连接, 服务器并不知道真正的客户端IP ,但CIP可作为附加字段插入HTTP Header以告知服务器。

当然,除了TCP代理,负载均衡常用的实现机制还包括: DSR模式、Tunnel模式等。

2.  流量管理

在eBay有极其庞大数目的机器(Machine)提供各样的服务,而一组提供类似功能的机器可以简单理解为属于一个Pool,那么FE Team 如何借助负载均衡器将流量分发到不同的Machine和Pool呢 ?这里以常用的负载均衡器之一NetScaler为例介绍该过程。

2.1

 NetScaler负载均衡器

NetScaler是Citrix公司提供的应用交付的硬件负载均衡器,其基本配置元素包括:虚拟服务器(Virtual Server)、服务(Service)、监控程序(Monitor)等。

  • 虚拟服务器由名称、VIP、端口、协议等表示, 其端口和协议决定代表的具体服务器;

  • 一般而言,虚拟服务器和服务协同工作,服务作为LB上的逻辑抽象,绑定到虚拟服务器上,可以是服务器的IP:Port,也可以是下一层LB的虚拟服务器;

  • LB对服务对象进行定时(比如每 5 秒)的健康探测,若探测失败,则将服务标记为DOWN,否则为UP。LB分发请求时,DOWN的服务将被排除在外, 流量只分发给UP的服务

2.2

 负载均衡

那么, NetScaler如何将流量分发到不同机器上实现负载均衡流量管理呢

举个例子,如下图所示,客户端Client1和Client2均能通过NetScaler上的虚拟服务器VS_HTTP和VS_SSL连接服务,服务S1、 S2、S3和S4绑定到虚拟服务器,分别表示安装在不同服务器上的应用程序。其中,VS_HTTP和VS_SSL具有相同的IP地址, 但端口和协议均不同; 服务S1和S2是服务器Server1和Server2上的HTTP应用程序,绑定到VS_HTTP,服务S3和S4是Server2和Server3上的SSL应用程序,绑定到VS_SSL。

yEFB7ni.jpg!web

图2.1 点击 可查看大图)

当NetScaler通过10.10.10.10:80收到HTTP请求时,根据VS_HTTP上虚拟服务器和服务的绑定情况、相应的负载均衡算法选择向Server1或Server2发送请求;同样,当通过10.10.10.10:443收到HTTPS请求时,根据VS_SSL上的配置绑定将请求发送给Server2或Server3。由此实现了流量的分配与转发。

2.3

负载均衡算法

NetScaler作为业内领先的硬件负载均衡器,具有极其强大的、多元化的负载均衡算法, 用于决定将客户端请求转发到哪一服务器 。最新版本的NetScaler支持 余种负载均衡算法,能够适应众多应用场景。常用的算法如:

  • 最少连接算法 (Least Connection),优先选择连接数最少的后端节点,是默认的负载均衡算法,在大多数情况下提供了最佳性能;

  • 轮询算法 (Round Robin),将用户请求依次轮流分配给内部服务器;

  • 最少响应时间算法 (Least Response Time), 优先选择具有最少活跃连接和最低平均响应时间的服务器,可扩展为基于监控程序的最小响应时间算法(LRTM);

  • 最小带宽算法 (Least Bandwidth),优先选择当前流量吞吐最小的服务器;

还有令牌算法(Token)、基于URL的Hash算法、域名Hash算法等,不作详述。

如果考虑不同服务器的处理能力不同,还可以给每个服务器分配不同权值,通过设置比率调整调度机率。

2.4

应用交付之七层规则

NetScaler是以软件为中心的应用程序交付解决方案,可以通过特定的负载均衡算法将应用中的流量分发到不同机器上,那 如果应用要求分发到指定Pool, 又该怎么做呢?

这就涉及到 层规则 啦。NetScaler常用的 层规则包括:

  • Content Switching Policy ,将请求路由到指定的下游Pool;

  • Responder Policy ,针对特定的HTTP请求实现重定向(HTTP Redirect)、丢弃(TCP DROP)、重置(TCP RESET)等;

  • Rewrite Policy ,改写请求后转发给后端服务,“改写”包括:改写URL、添加/修改/删除Header。

一个VIP可以根据应用要求同时支持多种规则。

若用户要求将流量分发到指定Pool,则 添加Content Switching Policy ,将符合要求的请求路由到相应Pool,并绑定到VIP对应的虚拟服务器上。

3.   高可用性

了解了如何将流量分发到不同的Machine和Pool后,eBay FE Team又是如何 部署硬件负载均衡器确保其高可用性 呢?

一般而言,FE Team为每个负载均衡器同时部署 台设备。

yqMJziA.jpg!web

图3.1 点击 可查看大

其中,主设备(Primary Node)主动连接并管理服务器,辅助设备(Secondary Node)与主设备配置始终保持同步,若主设备发生故障,则辅助设备成为主设备。 主设备和辅助设备相互定时发送检测信号和运行状况检查请求 ,从而监控彼此,以提供高可用性。

当然为了不同场景的需要,我们还提供了BGP等方式,这里不作详述。

4.   多数据中心多层部署

鉴于eBay拥有多个数据中心,数万Pool及上百万服务单元(VM/BM/Pod等),需要 同时部署多层负载均衡器 以确保流量的正确转发,每个Pool在不同数据中心的各层负载均衡器上都有配置。

如下图所示,假设有3个数据中心, 最上层GSLB/GTM 作为DNS Resolver实现DNS解析,返回给用户不同数据中心最合适的IP列表;GSLB/GTM下面 绑定两层硬件负载均衡器 ,一层主要用于配置七层规则和SSL,另一层主要用于负载均衡的流量转发。每一层中均有不同类型的硬件负载均衡器,包括常用的NetScaler和F5。

UnmqUbU.jpg!web

图4.1 点击 可查看大

一般而言,将来自相同数据中心的客户端访问的大部分流量(如: 99% )分发到本数据中心,少部分流量(如: 1% )转到其他数据中心,实现跨数据中心访问。若一个数据中心出现问题,流量会自动转发到其他数据中心。

5.自动化管理方案

5. 自动化管理方案

流量管理是一个复杂的过程,FE Team结合多年实战经验,基于Python Django框架,利用eBay内部的LBMS等接口,开发出LB的控制面(Control Plane)工具: EasyLB ,实现了流量管理的自动化。 其功能包括: 七层规则的快速准确部署,配置的标准化管理,VIP的无缝迁移,多方位的性能监控等, 为ATB(Availability to Business)提供了坚实保障。 自动化方案不仅降低了人为失误,同时也提升了应用的交付效率。

6.   小试牛刀

介绍到这里,小伙伴们可能会想:“这些系统都不便宜,咱也不知道,咱也不敢问呀”。其实作为普通用户,我们完全有办法 零成本使用负载均衡器

NetScaler 为例,Citrix公司提供了一个容器化的应用交付控制器NetScaler CPX,方便用户体验。我们应用NetScaler CPX做了 2个小实验,深入理解负载均衡流量管理和七层规则,有兴趣的小伙伴可以试试。

选择两台CentOS主机S1和S2,假设IP分别为10.148.177.194和10.148.177.197,在S1上安装Docker并设置NetScaler CPX实例,搭建负载均衡拓扑。

6.1

   安装Docker

首先安装Docker。

m2UfAfe.jpg!web

图6.1 点击 可查看大

6.2

   启动NetScaler CPX和主机端口

获取NetScaler CPX 镜像并在后台以 特权模式 运行容器,指定NetScaler最终用户许可协议EULA,暴露SSH 22和HTTP 80端口,并将30000端口映射出来用于实验,设置ulimit参数core=-1不限制core文件大小,输入密码后进入容器伪终端。

2AZzi2R.jpg!web

图6.2 点击 可查看大

使用如下脚本,分别启动S1和S2的80端口,设置GET请求返回主机名Server及IP。

Nvi6nq7.jpg!web

图6.3 点击 可查看大

6.3

  搭建负载均衡拓扑

实验1:负载均衡流量管理

假设S1和S2属于 相同Pool,均安装有应用程序A, 分别表示为服务svc-A-S1和svc-A-S2,并绑定到虚拟服务器VIP-A。CPX对外暴露30000端口用于访问应用程序A, 负载均衡拓扑、CLI命令及CPX中的配置分别如下图所示。

UFnui26.jpg!web

图6.4 点击 可查看大

MVvQNvY.png!web

图6.5 点击 可查看大

jUFrI3B.jpg!web

图6.6 点击 可查看大

则在S1执行for i in {1..100}; do curl -v 127.0.0.1:30000 2>/dev/null | grep Server; done访问服务A,流量会 交替分发 到S1和S2上,如下图所示,即: 将流量转发到不同的机器,实现了负载均衡的流量管理。

vE3UNvn.jpg!web

图6.7 点击 可查看大

实验2:七层规则

假设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中的配置分别如下图所示。

nEFVvqU.jpg!web

图6.8 点击 可查看大

Ary6BbE.jpg!web

图6.9 点击 可查看大

eEVJnqf.png!web

图6.10 点击 可查看大

则在S1上分别访问127.0.0.1:30000和127.0.0.1:30000/check,结果如下, 实际上分别访问了服务器S1和S2, 验证了可通过添加七层规则将流量分发到不同Pool的服务器。

图6.11 点击 可查看大

另外, NetScaler CPX还可以用于管理微服务和负载均衡东西向流量。 这里附上NetScaler官网和API,有兴趣的同学可以扫码了解详情,进一步实验喔 。

☟☟☟

biInmmJ.png!web

点击上图

扫码查看NetScaler

QNzIFvj.png!web

点击上图

扫码查看API

总 结

eBay FE Team应用多数据中心多层部署的硬件负载均衡器,基于负载均衡算法将流量转发到不同Machine,基于七层规则将流量转发到不同Pool, 应用自动化工具实现了高可用的流量分发与管理,确保了用户业务应用能够快速、安全、可靠地交付。

为了方便小伙伴们实验,本文还在基于容器的NetScaler CPX上实现了无成本体验NetScaler,大家是不是很想试试呢?

nQVbArV.jpg!web

本文作者

Yuting Cao

eBay软件开发工程师

2019年上海交通大学硕士毕业

目前致力于负载均衡流量管理

以及自动化平台的实现

流量管理,想说爱你不容易!

UfyYRvI.gif

下集预告 

为什么 pliot推规则给Envoy 需要耗费

如此长长长长长长长的时间?

Emmmmm~

最后竟然还是失败……

怎么肥事?

让我们一起走进下期:

eBay流量管理之

kubernetes 网络的硬核排查!

下周五 ,不见不散!

您可能还感兴趣:

案例分析 | 由Decimal操作计算引发的Spark数据丢失问题

干货 | 起底eBay Flink的上云之路

干货 | eBay Kubernetes集群的存储实践

实战 | eBay PB级日志系统的存储方案实践

RNJV7j7.png!web

↓点击 阅读原文 ,eBay大量优质职位虚位以待。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK