nginx 以及haproxy 通过dns服务发现实现负载处理的一些问题

nginx 以及haproxy 都支持基于dns 的服务负载处理,比如nginx 支持基于A记录以及srv的,haproxy 基于service_template 也支持基于A记录以及srv的,但是实际上是有一些缺陷的,以下简单说明下

一些问题

  • 灵活性不够好

nginx 的做好是配置valid 时间,太小了,请求多,太大了服务更新慢,haproxy 相对好一些,但是dns 请求会多一些,相对支持的配置参数还是比较少的,可以基于服务发现工具,基于模版模式解决

  • 权重处理上有点弱

目前包括nginx 以及haproxy 的都是基于平等策略,问题就比较明显了,比如不同主机配置,一般我们希望负载时不一样的,目前暂时缺少这种能力,可以基于服务发现工具,基于模版模式解决

  • 监控不是很灵活

与静态配置不一样,因为那个参数时动态的,监控上看到的数据会有差异,比如haproxy 是自定义的名称,这个对于监控比较费事,当然nginx 实际也存在类似的问题

  • dns 动态更新的问题

如果基于dns 的负载处理,核心是dns 数据的准确性,如果有问题(比如配置有问题,造成异常数据进入了系统)当然haproxy 包含了主动健康监测,社区版的nginx 只有被动的,最好的方式是基于服务发现平台(consul,nacos 的等)然后扩展dns 支持(consul 自带,nacos 需要可以基于coredns plugin)

说明

dns 很不错,用好了,用对了价值很大,但是如果使用不当,造成的影响会是灾难级别的(依赖的都会有影响),了解套路,结合业务特点设计方案是比较重要的

参考资料

https://github.com/rongfengliang/nginx_haproxy_dnsmasq_ds_learning

https://www.haproxy.com/blog/dns-service-discovery-haproxy

https://blog.nginx.org/blog/dynamic-dns-resolution-open-sourced-in-nginx

https://github.com/rongfengliang/coredns-nacos

https://github.com/cloud66-oss/coredns_mysql

https://www.haproxy.com/documentation/haproxy-configuration-manual/latest/#server-template

https://nginx.org/en/docs/http/ngx_http_upstream_module.html#server

https://www.haproxy.com/documentation/haproxy-configuration-tutorials/proxying-essentials/dns-resolution/

posted on 2025-06-15 08:00  荣锋亮  阅读(20)  评论(0)    收藏  举报

导航