多实例协作、可观测性与线上排错
WebSocket、消息队列与实时通信#Python全栈#第十六阶段#WebSocket、消息队列与实时通信#多实例协作、可观测性与线上排错约 919 字 · 3 分钟阅读
追问显示点击任意追问卡片可收起 / 展开
应用从一个进程扩为多个 Worker 后,内存连接表为什么无法全局共享?
追问 用户连接在实例 A,事件却在实例 B 产生时怎样投递?为什么把用户标识放入 Redis 不等于把真实 Socket 连接也共享了?
连接保持在某实例上,与按用户查找实例的路由机制如何配合?
追问 广播所有实例和按目标实例转发各有什么成本?重连或实例退出后,用户位置记录怎样更新并处理过期?
粘性会话能解决哪些问题,为什么不能替代跨实例消息分发?
追问 已有长连接和下一次重连分别怎样选取实例?业务事件从其他实例产生、用户多设备接入时还需要什么机制?
经过反向代理后 WebSocket 连不上或定时断开,怎样排查?
追问 HTTP/1.1 升级头、代理到后端的协议、路由、空闲超时和心跳怎样核对?怎样比较直连后端与代理访问结果?
SSE 服务端已经输出事件,浏览器却成批延迟收到,如何定位?
追问 应用刷新、代理缓冲、压缩、链路超时和客户端解析怎样分别检查?为什么不能只根据后端打印日志判断端到端延迟?
实时链路应记录哪些指标和关联标识?
追问 活跃连接、握手失败、重连、发送队列、消费积压和端到端延迟如何关联?怎样用 event_id 追踪事件,同时避免用户 ID 成为无限增长的指标标签?
队列积压不断增长时,怎样区分生产过快、消费过慢和异常重试?
追问 Ready、Unacked、消费速率、处理耗时和失败率怎样一起观察?什么时候扩消费者有效,什么时候只是把压力转移给数据库?
大量客户端同时重连造成服务雪崩,如何恢复?
追问 抖动、连接准入、鉴权缓存、补齐分页和分批恢复怎样配合?怎样保留关键功能并避免恢复阶段再次形成历史查询洪峰?
怎样验证实时系统的容量,而不是只统计建立了多少连接?
追问 连接数、消息速率、广播范围、慢客户端和在线时长如何组合?测试应记录哪些延迟、内存、错误与恢复结果,怎样识别压测客户端先到瓶颈?
怎样防止实时消息泄漏到其他用户或租户?
追问 订阅权限、服务端路由、事件字段裁剪和日志脱敏怎样验证?跨实例订阅变化与权限撤销的延迟怎样界定并处理?
排错核对资料: Nginx:WebSocket proxying、RabbitMQ:Dead Letter Exchanges、Kafka:Design 与交付语义。