博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个高速lvs-dr替代系统设计 -- 基于dpdk的高性能负载均衡器
阅读量:6629 次
发布时间:2019-06-25

本文共 1632 字,大约阅读时间需要 5 分钟。

LVS DR 原理

LVS-DR不同于普通的haproxy代理机制,它在网络中的作用层级更加底层。haproxy一般代理应用层的应用数据,所有的数据都会通过haproxy收发,导致了haproxy是一个性能瓶颈。而lvs-dr作用在IP和数据链路层,效率更高,并且只代理进入proxy的数据,应用的返回数据由应用服务器直接返回给client。

 

pros

cons

haproxy

可以基于端口做代理

真实server与proxy不需要在一个二层网络

单点问题

进出流量都走proxy,负载高

lvs-dr

只有request请求通过proxy,response数据直接返回给客户,性能高。

proxy和server必须在同一个二层网络

 


 

整个数据包的处理流程如下:

  1. Client要访问192.168.1.2上的服务

  2. request数据经过路由到达我们的proxy,上面运行着负载均衡器,负载均衡器通过策略算法,把目标MAC改成真实的Server MAC,并发送给目标MAC(这里决定了proxy和server只能在同一个二层网络中)

  3. Server收到请求后,将响应数据直接通过路由发送给client,不再经过proxy

 

 

基于DPDKDR架构

为什么要用DPDK呢?因为lvs是基于linux内核的,而linux内核处理包的速度太慢(10G网卡34Mpps),特别是对小包的处理,导致了性能瓶颈。而利用DPDK技术可以绕过linux内核从而直接处理网络数据报,写的好的话可以达到线速(10G网卡14Mpps)。

 

这个负载均衡器主要由两部分组成,转发器(Forwarder)和健康检查器(Monitor)。


Monitor通过ping或者arp的方式检查Server的状态,如果无法连接,则将此Server设置成unreachable的状态。

Forwarder通过hash算法把同一个来源的数据报发往同一个Server,以保证连接的一致性。

 

 

技术细节的考虑

来看看现在的设计距离google的设计还差多远?


还差着一个集群这么远。。。。。。。。。

目前只有单个proxy的设计,那作为一个集群要怎么玩呢?

首先是DNS层面,根据来源返回一个就近的VIP地址(如果在多个数据中心部署了的话)

然后是Router层面,使用了ECMP,把大量的请求分发到不同的负载均衡器上。

这就带来了一个问题,如何让同一个来源的请求总是能够到达同一个Server呢?有两个方法。

  1. 通过配置ECMP,把相同来源的请求都发往相同的负载均衡器。

  2. 使用一致性hash算法,让不同的负载均衡器在处理同一个请求时都能够转发到同一台Server。

 

 现有技术

在构思这篇博文的时候还没注意到VPP刚出的LoadBalancing,之前一直想自己实现一个lb application或者基于ovs-dpdk进行修改。但是搜索了一下之后发现了VPP LoadBalancing plugin这个plugin就是仿照了Maglev进行设计和实现的。

不知道VPP是何技术的可以去google一下,这是cisco开源的sdn技术,类似于openvswitch,自称转发性能比openvswitch高不知道哪去了。VPP底层基于dpdk或者netmap的技术实现高速收发数据报。

VPP实现的LB跟上面说的有一部分不太一致,就是从proxy到server的过程,VPP是用gre tunnel技术实现的,这样就不需要server和proxy在同一个二层网络里了,相应的,tunnel技术会增加每个封包的长度,需要相应的修改MTU,启用Jumbo Frame

最后的最后,至于VPP的LB性能如何,怎么用,我现在并没有试过:P

 

 Reference

本文转自 Tenderrain 51CTO博客,原文链接:http://blog.51cto.com/tenderrain/1983570
你可能感兴趣的文章
android 避免线程的重复创建(HandlerThread、线程池)
查看>>
SQL Lazy Spool Eager Spool
查看>>
type的解释
查看>>
Windows Phone 8 开发环境搭建
查看>>
2017:IDC市场规模将持续增长 增速放缓
查看>>
从自动驾驶到学习机器学习:解读2017科技发展的15大趋势
查看>>
在Linux中永久并安全删除文件和目录的方法
查看>>
全民直播时代 内容监管还得靠技术
查看>>
c++ 类的对象与指针
查看>>
Boolean operations between triangle meshes
查看>>
面积并
查看>>
java-JDBC
查看>>
通信术语解释
查看>>
对.NET跨平台的随想
查看>>
ng-view 路由 简单应用
查看>>
Nginx Rewrite规则初探(转)
查看>>
黑魔法NSURLProtocol 可拦截网络加载
查看>>
Webtop中新建文档,无法选择Type和Format
查看>>
Integration Services创建ETL包
查看>>
IE浏览器开发中遇到的问题
查看>>