团队内没有用 k8s,此主题之讨论 docker swarm。
目前是用 docker swarm 的 docker network create 创建一组 overlay 网络,然后用 docker service create 创建服务集群,并加入到上面提供的网络,nginx 也一样加入到上面的网络。nginx 的配置如下:
location / {
resolver 127.0.0.11 ipv6=off;
proxy_pass http://docker_service_name:8080;
}
通过 docker swarm 实现负载均衡和动态扩容。但是这里就有个问题,对于个别接口从日志看后端处理时间也就 20ms,但是 nginx 那一层日志看有 1.003S。请问有什么办法能优化吗?
1
monsterxx03 2019-12-17 13:44:04 +08:00
swarm 的 overlay 网络很慢, 1s 有点夸张了, create 的语句发出来看看, 有没有加 --opt encrypted? 这个很慢的.
再排除 dns 的问题, proxy_pass 直接填 ip 试试. nginx 日志打详细点,看时间花在哪里了: https://www.nginx.com/blog/using-nginx-logging-for-application-performance-monitoring/ |
2
luger1990 OP @monsterxx03 用你的方法输出日志试了试,看来主要是`upstream_connect_time` 这个时间比较长。并不是所有的都要 1S 是部分 但是也挺多的
|
3
luger1990 OP 解决问题了,具体可以参考 https://stackoverflow.com/questions/59392603/overlay-network-performance-issues-with-docker-swarm#59392603
``` sudo nsenter --net=/var/run/docker/netns/{your_load_balancer} sysctl -w net.ipv4.vs.conn_reuse_mode=0 sudo nsenter --net=/var/run/docker/netns/{your_load_balancer} sysctl -w net.ipv4.vs.expire_nodest_conn=1 ``` ``` version: "3.7" services: core: image: nginx sysctls: - net.ipv4.vs.conn_reuse_mode=0 - net.ipv4.vs.expire_nodest_conn=1 ``` |
4
luger1990 OP 建议如果有足够的人力还是用 k8s,没必要尝试 swarm
|