LVS、NAT、TimeWheel

LVS 是基于linux内核开发的负载均衡技术,工作在 TCP/IP 第四层
在拿到客户端Syn报文之后,即在hash表中维护连接的socket记录
它会从Web后端服务器池中挑选一个服务器,然后利用NAT技术改写目标地址和端口,将客户端发过来的TCP报文转发过去;返回的时候,将利用ip隧道技术,web服务器将直接将数据转发到web客户端;

它有几种负载算法
a. round robin轮询 + 加权权重
b. 随机 + 加权权重
c. hash负载均衡(根据请求参数里的某个值,把这个固定的值算一个hash,就固定路由到那台服务器上去),这种比较适合后端缓存服务,比如redis缓存集群
d. 动态反馈负载均衡算法,根据连接数量和接口耗时动态计算

LVS 有以下几种模式设置:
I. Virtual Server via NAT
II. Virtual Server via IP Tunneling
III. Virtual Server via Direct Routing

上面我们说过,LVS 通过一个hash表维护了 Linux virtual server 与客户端socket的连接,超时任务会从hash表中剔除,那它是怎么做的呢?
在最开始的linux版本中,是通过为每一个连接建立一个定时器;但是大量的定时器会带来极高的cpu负载;
后来的版本优化了,采用多个时间轮timeWheel,原理与kafka一致;

我们大概描述一下 时间轮的工作原理:
每个时间轮都是一个数组,数组中每个元素放了一个任务列表(TimerTaskList), TimerTaskList是一个双向链表,小轮和大轮都在不停的走表,例如kafka是1ms,小轮带大轮,在走的过程中,会有任务加入,如果超过小轮的范围,则把任务放到大轮;当时间走到大轮某个元素的时候,它会把里面任务移动到小轮中去;这样等小轮走到时候,就可以执行任务了;

在互联网大型架构中,我们经常能见到 LVS + ngnix

那么ngnix 与LVS有什么区别呢?
ngnix是工作在Http第七层网络协议上的,针对Http文本协议进行的负载、路由、转发
而LVS是工作在TCP第四层协议,在linux内核对tcp包转发
NAT就是Network Address Translation,也就是网络地址转换,LVS利用NAT技术实现负载功能

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容