事情本身不复杂,线索都在日志里。为了高可用把应用和数据库放在不同可用区,内网地址能通,但接口延迟比单机部署高出一截。

原因不止一个,得分开看。同一地域不同可用区之间内网互通,但物理链路更长。还有一种是跨区流量可能产生额外费用。

另外,串行调用会把单次延迟成倍放大。

测两端网络延迟

ping -c 20 对端内网IP

接着看路由是否走内网

ip route get 对端内网IP

随后统计业务接口耗时分布

grep 'upstream_time' /var/log/nginx/access.log | tail -20

剩下的就是把高频调用收敛到同区

ss -tn state established | wc -l

同样的操作我在测试机上先走了一遍,线上只做验证过的部分。

恢复的判定其实很直接。关键链路延迟回到一毫秒以内,跨区只保留低频调用,高可用架构仍然成立。

高可用和低延迟需要权衡;把数据库主节点与应用放在同区,从节点跨区,是常见的折中做法。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189