您的位置  > 互联网

如何将流量负载到服务器集群方案演进?

标准化服务器可以承受的并发量是有限的。 在业务发展初期,单台服务器即可满足业务需求。 但随着业务的发展,用户群体越来越大,服务将承担的并发量也会越来越大。 当超过单台服务器可以承受的并发数时,并发到极限时如何解决大并发问题? 目前业界常见的解决方案是使用多台服务器进行处理,即集群技术。

如何将流量均匀分配到集群? 本文将介绍如何将流量加载到服务器集群,从百并发到数亿并发的演变。

1.1 单机处理流程及并发限制计算 1.1.1 单机处理流程

业务初期,用户数量和服务访问量都非常低。 在不考虑容灾的情况下,一台服务器就可以满足业务场景的需求。 搭建独立服务器,我们需要定义域名,在DNS服务器上配置域名与服务器IP的映射关系,并在服务器上部署应用程序。

当用户通过访问域名请求服务时,用户首先向DNS服务器请求获取该域名对应的服务器IP,然后通过该IP地址找到后端应用服务器。 后端服务器将请求结果返回给用户。

单机架构处理流程

1.1.2 单机并发计算

并发定义:每秒处理的请求数。

场景定义:假设业务处理时间为30ms,其中CPU处理时间为10ms,IO等待时间为20ms,使用4核8G服务器。

在上述场景中,最佳线程数为 12。

对于大于 7 的版本。

假设忽略线程切换带来的CPU开销,单核可以在1秒内处理。

请求方面,4核8G服务器可支持400个并发请求。

1.2 nginx负载均衡

当业务并发超过400时,单台服务器已经不能满足需求,需要多台服务器进行处理。 如何将流量分配到多台服务器? 这时候就需要使用负载均衡组件了。 这里是nginx负载均衡组件。

1.2.1 负载均衡流程

当用户请求后端服务时,请求首先到达nginx服务器。 nginx服务器将请求分发到后端服务器。 后端处理后将数据返回给nginx服务器,nginx服务器将结果数据返回给用户。

nginx负载均衡流程

1.2.2 nginx原理

nginx是一个七层负载均衡组件。 nginx由一个进程和多个进程组成。 主线程用于创建和管理工作进程。 当work进程创建监听器后,会fork出子进程,子进程可以监听nginx服务器的请求。

工作进程收到nginx请求后,根据具体的负载均衡策略选择目标服务器,并将请求转发给目标服务器进行处理。 目标服务器处理完成后,将结果返回给工作进程,然后工作进程将结果返回给用户。

nginx使用epllo复用模型(NIO模型)。 nginx几乎不处理业务相关逻辑,只转发请求。 因此CPU处理时间极短,这也是nginx能够支持高并发的根本原因。 假设处理时间为0.1ms,对于4核8G的机器来说,1s可以处理的请求数为4W。

1.3 LVS负载均衡

LVS 是一种负载均衡器,可工作于两层到四层。 它由张文松博士发明,是中国最早的自由软件项目之一。

1.3.1 LVS负载均衡架构处理流程

当请求进入LVS服务器时,在传输层(第四层)或数据链路层(第二层),消息的IP地址或mac地址被更改为目标服务器的IP地址或mac地址。 请求处理完毕后,将结果返回给用户。

1.3.2 LVS负载均衡原理

NAT模式(网络地址转换)

原理:将客户端发送的数据包的IP头的目的地址更改为负载均衡器上其中一台RS的IP地址,然后发送给该RS进行处理。 RS处理完成后,将数据交给负载均衡器。 然后负载均衡器将数据包的原始IP地址更改为自己的IP,并将目标地址更改为客户端IP地址。 在此期间,传入和传出的流量都必须经过负载均衡器。 。

优点:集群中的物理服务器可以使用任何支持TCP/IP的操作系统,只有负载均衡器需要合法的IP地址。

缺点:可扩展性有限。 当服务器节点(普通PC服务器)增长过多时,负载均衡器就会成为整个系统的瓶颈,因为所有的请求报文和响应报文都流经负载均衡器。 当服务器节点过多时,大量数据包会汇聚到负载均衡器上,速度就会变慢!

DR模式(直接路由模式)

原理:负载均衡器和RS都使用同一个IP对外提供服务。 但只有 DR 响应 ARP 请求,所有 RS 对自己 IP 的 ARP 请求保持沉默。 也就是说,网关将发送针对该服务IP的所有请求。 定向到DR,DR收到数据包后,根据调度算法找到对应的RS,将目的MAC地址更改为该RS的MAC(因为IP一致),并将请求分发给该RS。 此时RS收到这个数据包后,处理完后,由于IP一致,可以直接将数据返回给客户端。 这相当于直接从客户端接收数据包。 处理后直接返回给客户端。 由于负载均衡器需要处理第二层报头来进行更改,因此负载均衡器和RS必须在广播域中,也可以简单地理解为在同一台交换机上。

优点:与TUN(隧道模式)一样,负载均衡器只分发请求,响应数据包通过单独的路由方式返回给客户端。 与VS-TUN相比,VS-DR不需要隧道结构,因此大多数操作系统都可以用作物理服务器。

缺点:(不能说缺点,只能说缺点)负载均衡器的网卡必须与物理网卡在同一个物理网段。

TUN模式(IP隧道模式)

原理:首先要知道互联网上大多数服务的请求包都很短,而响应包通常很大。那么隧道模式就是用一个新的IP封装客户端发送的数据包标头标签(仅目标IP)并将其发送到RS。 RS收到后,首先解开数据包的包头,恢复数据包,并进行处理。 ,直接返回给客户端,不经过负载均衡器。 需要注意的是,由于RS需要恢复负载均衡器发送的数据包,因此必须支持该协议。 因此,在RS内核中,必须编译支持这个

优点:负载均衡器只负责将请求报文分发到后端节点服务器,而RS直接将响应报文发送给用户。 因此,减少了负载均衡器中的大量数据流,负载均衡器不再是系统的瓶颈,可以处理海量的请求。 这样,一个负载均衡器就可以分配给多个RS。 并且可以通过运行在公共互联网上分布在不同的区域。

缺点:隧道模式RS节点需要合法IP。 这种方法要求所有服务器都支持“IP”(IP)协议,并且服务器可能仅限于某些Linux系统。

LVS 在数据链路层(第二层)进行传输层(第四层)的负载均衡。 与nginx在应用层(七层)的负载均衡相比,少了拆包逻辑和序列化操作,也没有业务逻辑。 ,所以CPU占用率很低。 另外,LVS负载均衡不需要建立连接、创建资源、创建用户态进程和线程。 它只是转发请求,因此占用大量内存。

LVS的瓶颈主要是CPU软中断、网卡性能以及ipvs内核模块的限制。 一台部署LVS的普通机器可以承受20万左右的并发。

1.4 硬件负载均衡

硬件负载均衡通过专门的负载均衡设备来分配流量。 目前广泛使用的是F5负载均衡器。

处理流程如下:

1. 客户向VIP发送服务请求

2. BIGIP接收到请求,将数据包中的目的IP地址更改为选定的后端服务器的IP地址,然后将数据包发送到选定的后端服务器。

3. 后台服务器收到后,根据其路由将响应包发送回BIGIP。

4. BIGIP收到响应报文后,将其中的源地址改回VIP地址并发回给客户端。 这样就完成了一个标准的服务器负载均衡过程。

与普通计算机相比,硬件负载均衡设备进行了大量的定制,使其能够承受更大的并发量。 但价格也比较贵。 目前,F5负载均衡器的报价约为30W。

1.5 DNS轮询负载均衡

当并发量达到上亿级,超过单台硬件的负载均衡限制时,可以采用多机房部署。 一个域名申请多个公网IP,每个IP对应一个机房。