7层网络负载优化

最初单位的网络结构是这样的

20180912153673575274283.png

请求流程:用户发送请求,DNS解析并轮训打到vip上,最后通过lvs进行流量调度

这样的网络结构存在几个问题
1.负载不均衡。DNS会在客户端浏览器、系统等有缓存,在缓存期间请求一直打到同一个机房;各机房机器数量不等,即使打到机房流量相等,最终单机负载依旧不等。
2.调度不灵活。

  • 无法快速调整调度策略,在晚高峰时,由于各个机器负载不均衡,只能手动或凭借经验调整DNS策略。
  • 由于LVS使用DR策略,LVS只能对本机房机器做流量调度。

这里LVS采用DR策略,即LB和RS必须在同一物理网段
多机房之间已经实现互通,相当于内网

使用LVS的FULLNAT策略可以解决跨网的问题,不过调度策略配置不够灵活。
在此我们引入新的7层负载均衡,引入7层后的网络结构:
2018091215367372247793.png

请求流程:用户发送请求,DNS机洗并轮训到vip上,接着lvs直接将请求发送给dproxy,通过dproxy代理打到实际主机
dproxy是使用openresty实现的7层调度器
加入dproxy后的收益:
1.通过dproxy对流量进行调度,没有无法跨网段的限制,实现各机器负载均衡
2.动态upstream。通过manager订阅注册中心机器变化,如有变化及时生成新的upstream文件并触发reload
3.简单定制开发

  • 通过balancer_by_lua模块来完成自定义流量分配
  • 通过access_by_lua来完成防抓及traceid生成等
  • 可通过lua进行快速地定制逻辑开发

dproxy系统设计