在现代基础架构中,最核心的一环就是扩展性,也即动态扩展架构,不需要人工干预的负载均衡器成为了必需品。
而DNS就是一种负载均衡器,比如 Nginx 作为一个反向代理的时候,就会去解析本地DNS,获取实际的服务地址。
但传统的DNS有几个问题,本地 Local DNS可能会出现问题,最一种的就是 TTL 更新时间可能很长,导致获取不到最新的记录。
Nginx 为了解决该问题,且考虑到微服务和K8s的普及,开源了一个解决方案,即DNS 服务发现,而且已经集成到 Nginx 中了,原来该功能只能 Nginx Plus 才能使用。
它的核心功能:
- 可以同时配置多个 DNS 服务器,不管是公共DNS服务器、第三方DNS服务提供商,还是内部DNS服务器。
- 可以配置更短的 TTL 时间,让DNS记录更新更快。
具体如何配置呢?直接看一个例子:
http {
resolver 10.0.0.1 valid=300s ipv6=off;
resolver_timeout 10s;
upstream backend {
server backend1.example.com resolve;
server backend2.example.com resolve;
}
server {
location / {
proxy_pass http://backend;
}
}
}
指定 DNS 的配置,比如 TTL 时间和具体的DNS 地址;然后配置一个 upstream service,配置多个 DNS 服务器,最后就是代理到 upstream service。
而旧的解决方案:
http {
upstream backend {
server backend1.example.com ;
server backend2.example.com ;
}
server {
location / {
proxy_pass http://backend;
}
}
}
思考下有什么问题?Nginx 会通过 Local DNS 解析服务,控制能力较弱。