vlambda博客
学习文章列表

千万别用DNS轮询来作负载均衡!因为有这两个大坑... | 1分钟系列

域名解析是客户端访问系统的第一步。在架构设计中,DNS Server除了解析域名,还能干点什么呢?又有哪些“挖坑”的用法需要避免呢?


千万别用DNS轮询来作负载均衡!因为有这两个大坑... | 1分钟系列


典型的互联网架构中,我们通过nginx的反向代理来做负载均衡。客户端通过域名访问时,DNS Server将域名解析到nginx服务器的IP,客户端先访问nginx,nginx再将请求分发到下层的web-server。


千万别用DNS轮询来作负载均衡!因为有这两个大坑... | 1分钟系列


我们可以通过增加web-server来扩充web层的性能,但nginx仍是整个系统的唯一入口。如果系统吞吐超过nginx的单机性能极限,此时就需要通过DNS轮询来水平扩展nginx了。


千万别用DNS轮询来作负载均衡!因为有这两个大坑... | 1分钟系列


具体做法是: 增加多台nginx,对于同一个域名配置多个ip,每个ip指向一台nginx。 每次DNS解析,会轮询返回不同的ip,这样就能实现nginx的水平扩展了。


既然DNS轮询可以将请求分派到不同的ip上,那可不可以去掉nginx,直接用DNS轮询来做负载均衡呢?


千万别用DNS轮询来作负载均衡!因为有这两个大坑... | 1分钟系列


通过DNS来实施负载均衡虽然能减少一层网络请求,但也有问题。


首先,DNS只具备解析功能,并不能保证ip对应的服务器可用。而nginx做反向代理时,与web-server之间有保活探测机制,当web-server挂掉时,能够自动迁移流量;


其次,当web-server需要扩容时,虽然可以通过增加域名解析的ip来实现扩容,但解析的生效时间长,而nginx则是完全自己可控,扩容更实时、更方便。


因为上面两个原因,所以架构上,一般都使用nginx来做高可用反向代理。



如果喜欢这篇文章

转发,点赞,再看 三连,谢谢!

关注【老张说架构】

诙谐生动的架构之道
◀ 长按识别二维码

版权所有,欢迎转载