网易首页 > 网易号 > 正文 申请入驻

Docker Compose部署翻车记:我们先用了Traefik,两小时后乖乖切回HAProxy

0
分享至

说个真事。我们团队做了一个监控服务叫StatusDude,现在每分钟处理几千次检查请求,跨多个区域跑着工作节点,一天部署好几次。整套基础设施就是Docker Compose加HAProxy,没有Kubernetes,没有etcd半夜三点爬起来修。请求零丢失,服务零中断。

但最开始我们用的不是HAProxy。我们选了Traefik,那个在Docker圈子里几乎成了标配的反向代理。配置看起来简单,用标签自动发现服务,还有个挺漂亮的仪表盘。文档翻一翻,感觉半小时就能搞定。结果上线四个小时,我们就把它换掉了。

当时的需求很常规:用Docker Compose启动一个新版本的服务实例,等它健康检查过了,再把流量切过去,旧的关掉。我们在配置文件里定义了一个叫backend_new的服务,和正在运行的backend服务并排跑。两个服务配置了相同的Traefik路由标签——同一个Host规则,同一个服务定义。逻辑上这条路是通的,滚动更新嘛,新旧同时接流量,切完了把旧的撤掉。

Traefik不认这个逻辑。它的Docker Provider把每个Compose服务当成独立的配置源,两条相同的路由规则一出现,直接报"Service defined multiple times",所有请求返回404。没有回退机制,不会自动合并,就是硬生生拒绝路由任何流量。这个坑踩得极其干脆。

我们赶紧换了思路。不单独定义新服务,改用docker compose --scale backend=4命令把实例数从2个扩到4个,2个旧的加2个新的,等新的健康了再把旧的缩掉。标签冲突的问题确实解决了,但下一个问题立刻冒出来。

滚动部署的缩容环节出了问题。当我们从4个实例缩回2个时,Traefik内部的路由表更新根本跟不上节奏。容器已经开始走关闭流程了,Traefik还在把请求往正在关闭的实例上转发。结果就是每几个请求里就有一个撞上502错误。路由状态比Docker的实际状态滞后了好几秒——在每秒几百个请求的场景里,这几秒已经够你丢一大波流量了。

我们试过加延时等路由表刷新。试过在停容器之前先把它们从网络中断开,让健康检查能干净地报失败。试过开被动健康检查,结果误判率太高,开了马上就回滚了。折腾了一圈,没有一个方案让人觉得干净利落。

但真正让我们决定放弃Traefik的,是另一个更致命的问题:当一个请求打到正在关闭的后端实例上时,Traefik不会把它重试到另一个健康的实例上。这个问题在GitHub上挂了很久,编号是issue 2723,不少开发者都知道,但就这么悬着。

场景是这样的:docker stop发SIGTERM信号给容器,Uvicorn开始优雅关闭,中间有一个很短的时间窗口。在这个窗口里,已经到达的请求还没处理完,新的请求又被路由表送过来了。当这些请求撞上正在死亡的实例时,连接就断了。客户端收到的不是一个友好的错误码,而是空响应、连接重置,或者半个响应体。

我们做的监控服务,请求丢不起。一条检查打出去,拿到的如果是半截响应或者连接直接炸了,下游的告警逻辑就会乱套。这不是能用延时脚本缝缝补补解决的问题,这是架构层面的缺陷。

切回HAProxy的决策没花多长时间。两小时的折腾足够让我们看清一件事:Traefik在单实例或者非关键服务上用着挺好的,但一碰到需要零中断滚动更新的场景,它的自动发现机制和路由更新策略就开始掉链子。Docker Compose本来就不复杂,加一个Kubernetes来管部署是杀鸡用牛刀。但恰恰因为不用K8s,反向代理这一层必须得稳住——不能比你的应用先崩。

现在的方案跑了好几个月。HAProxy用Unix socket做健康检查,stop脚本先把旧实例从后端列表摘掉,等活跃连接处理完再真正停容器。整个过程没有花哨的标签自动发现,没有酷炫的仪表盘,但每次部署请求数曲线一条直线拉过去,报警一条没响。这就是我们想要的。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
零跑"神车"官宣:6月25日,正式上市

零跑"神车"官宣:6月25日,正式上市

科技堡垒
2026-06-25 10:20:07
大众计划淘汰DSG换装8AT变速箱,市场关注度却极低

大众计划淘汰DSG换装8AT变速箱,市场关注度却极低

华庭讲美食
2026-06-25 09:26:33
不惯着印度人!南京和庐山对印度人做出重罚,英国和新加坡学着点

不惯着印度人!南京和庐山对印度人做出重罚,英国和新加坡学着点

世界地缘观察
2026-06-16 08:10:11
Shams:火箭将55号签交易给快船以换取现金

Shams:火箭将55号签交易给快船以换取现金

北青网-北京青年报
2026-06-25 10:52:03
他一野二号人物,保卫主席28年没当元帅,但儿子比元帅后代都厉害

他一野二号人物,保卫主席28年没当元帅,但儿子比元帅后代都厉害

莹莹的历史说
2026-06-25 02:45:51
世界杯战报:再爆大冷预警世界第6苦战2-2第87,日本很难很难了

世界杯战报:再爆大冷预警世界第6苦战2-2第87,日本很难很难了

金风说
2026-06-25 07:37:09
燃油断供、大桥堵车!乌克兰发出最后警告,离开克里米亚

燃油断供、大桥堵车!乌克兰发出最后警告,离开克里米亚

天马幸福的人生
2026-06-25 15:27:10
张韶涵演唱会上的丝袜,应该借给谢娜穿穿,差距一目了然!

张韶涵演唱会上的丝袜,应该借给谢娜穿穿,差距一目了然!

木子爱娱乐大号
2026-06-22 14:53:51
豆包收费版,正把WPS逼近死角

豆包收费版,正把WPS逼近死角

象先志
2026-06-24 19:52:50
1988年师长李德金开会路上被当场控制,全方位搜身后找到一串钥匙

1988年师长李德金开会路上被当场控制,全方位搜身后找到一串钥匙

磊子讲史
2026-06-23 14:10:47
确认了,台风+冷空气影响杭州!明天记得开窗!大反转马上就到

确认了,台风+冷空气影响杭州!明天记得开窗!大反转马上就到

19楼
2026-06-25 15:22:00
我没举报董路!国脚王晓龙紧急辟谣,网友:100万赌约+退网承诺?

我没举报董路!国脚王晓龙紧急辟谣,网友:100万赌约+退网承诺?

寒士之言本尊
2026-06-25 16:09:06
我穿父亲旧夹克去省厅报到,省长看到旧夹克脸色大变:你父亲是谁

我穿父亲旧夹克去省厅报到,省长看到旧夹克脸色大变:你父亲是谁

晓悦流年
2026-05-29 22:28:45
2036奥运主办权悬而未决,中国台北见回应获赞

2036奥运主办权悬而未决,中国台北见回应获赞

孤城落叶
2026-06-24 21:16:17
精神小妹的生活原来是这样的!网友:终于知道她们为啥都这么瘦了

精神小妹的生活原来是这样的!网友:终于知道她们为啥都这么瘦了

深度报
2026-02-11 23:35:03
旅居东京三个月彻底悟透:日本遍地没早餐店,根本不是没钱没人做

旅居东京三个月彻底悟透:日本遍地没早餐店,根本不是没钱没人做

老特有话说
2026-06-24 15:07:56
2026年山东高考成绩一分一段表出炉

2026年山东高考成绩一分一段表出炉

闪电新闻
2026-06-25 15:25:59
2026世界杯第三名晋级概率追踪:L组最稳,E组仅31%

2026世界杯第三名晋级概率追踪:L组最稳,E组仅31%

篮坛第一线
2026-06-25 01:10:16
伟伟道来 | 四方来财,伊朗即将开启经济建设新时代

伟伟道来 | 四方来财,伊朗即将开启经济建设新时代

经济观察报
2026-06-24 16:42:09
伊朗专家:全世界都要感谢伊朗,是伊朗治好了全世界的美军恐惧症

伊朗专家:全世界都要感谢伊朗,是伊朗治好了全世界的美军恐惧症

农夫史记
2026-06-22 20:56:04
2026-06-25 17:04:49
报错免疫体
报错免疫体
一名在需求评审和数据异常中反复横跳的产品运营。
250文章数 36关注度
往期回顾 全部

科技要闻

宇树机器人大降价

头条要闻

爆冷输球后韩国记者追问球队是否食物中毒 主教练回应

头条要闻

爆冷输球后韩国记者追问球队是否食物中毒 主教练回应

体育要闻

世界杯最动人一吻:我若离世 你就改嫁吧

娱乐要闻

这国产剧太装了,居然还热播第一?

财经要闻

财报炸裂!美光让空头闭嘴

汽车要闻

2027款星途ES 天马1:11:36背后的实力

态度原创

本地
教育
健康
数码
军事航空

本地新闻

2026世界杯全勤太难?这份保姆级攻略请收好

教育要闻

22万人围观AI志愿填报,这背后透露了什么信号?

神经内科专家破解中风十大谣言

数码要闻

Max同款!REDMI K90至尊版搭载8550mAh电池+100W快充

军事要闻

特朗普:现在到了关注朝鲜问题的时候了

无障碍浏览 进入关怀版