你管这破玩意儿叫负载均衡?( 三 )


综上所述 , 我们在Nginx上再加了一层LVS , 以让它来承接我们的所有流量 , 当然为了保证LVS的可用性 , 我们也采用主备的方式部署LVS , 另外采用这种架构如果Nginx容量不够我们可以很方便地进行水平扩容 , 于是我们的架构改进如下:
你管这破玩意儿叫负载均衡?

当然只有一台LVS的话在流量很大的情况下也是扛不住的 , 怎么办 , 多加几台啊 , 使用DNS负载均衡 , 在DNS服务器解析域名的时候随机打到其中一台LVS不就行了
你管这破玩意儿叫负载均衡?

通过这样的方式终于可以让流量稳定流转了 , 有个点可能一些朋友会有疑问 , 下面我们一起来看看
既然LVS可以采用部署多台的形式来避免单点故障 , 那Nginx也可以啊 , 而且Nginx在1.9之后也开始支持四层负载均衡了 , 所以貌似LVS不是很有必要?
如果不用LVS则架构图是这样的
你管这破玩意儿叫负载均衡?

通过部署多台Nginx的方式在流量不是那么大的时候确实是可行 , 但LVS是Linux的内核模块 , 工作在内核态 , 而Nginx工作在用户态 , 也相对比较重 , 所以在性能和稳定性上Nginx是不如LVS的 , 这就是为什么我们要采用LVS+Nginx的部署方式 。
另外相信大家也注意到了 , 如果流量很大时 , 静态资源应该部署在CDN上 , CDN会自动选择离用户最近的节点返回给用户 , 所以我们最终的架构改进如下
你管这破玩意儿叫负载均衡?

总结
架构一定要结合业务的实际情况来设计 , 脱离业务谈架构其实是耍流氓 , 可以看到上文每一个架构的衍化都与我们的业务发展息息相关 。
对于中小型流量没有那么大的公司 , 其实用Nginx作为负载均衡足够 , 在流量迅猛增长后则考虑使用lvs+nginx , 当然像美团这样的巨量流量(数十Gbps的流量、上千万的并发连接) , lvs也不管用了(实测虽然使用了lvs但依然出现了不少丢包的现象)所以它们开发出了自己的一套四层负载均衡器MGW
另外看了本文相信大家对分层的概念应该有更透彻的理解 , 没有什么是分层解决不了的事 , 如果有 , 那就再多加一层 。
分层使每个模块各司其职 , 功能解藕 , 而且方便扩展 , 大家很熟悉的TCP/IP就是个很好的例子 , 每层只管负责自己的事 , 至于下层是什么实现的上层是不care的 。
作者:坤哥 , 前独角兽技术专家 , 现创业者 , 持续分享个人的成长收获
编辑:陶家龙
出处:转载自公众号码海(ID:seaofcode)