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

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

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

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

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

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

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

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

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

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

关注【老张聊架构】,成为百万年薪架构师!