当反向代理让你感到意外时:大规模运营的惨痛教训

主要观点:代理层虽重要但易出问题,本文通过案例讲述了代理层的各种问题及应对经验。
关键信息:

  • 代理层作用多样但常出故障,如优化在实际工作负载下失效等。
  • 优化陷阱:如 Apache Traffic Server 的 freelist 设计在 64 核主机上反受其害,RCU 设计在大规模下成本高昂,HAProxy 的 DNS 解析在大规模下成本凸显。
  • 日常故障:如 YAML 中的逗号错误导致代理崩溃,OS 限制导致的 FD 耗尽和看门狗误杀进程等。
  • 测量热点:如缓存头未缓存、随机数生成的全局锁导致性能问题、“天真”的头部检查在生产中造成开销等。
  • 区分常规与异常:如哈希键的不必要查找,为异常情况过度调整导致性能下降,实验性扩展导致的问题等。
  • 为压力下的运维人员设计:如监控系统依赖代理导致的问题,复杂的负载均衡算法给运维带来困难等。
    重要细节:
  • 列举了多个具体的优化失败案例,如 Apache Traffic Server 在不同硬件上 freelist 的表现。
  • 详细描述了各种日常故障的场景和影响,如 YAML 逗号错误对代理的影响。
  • 深入分析了测量热点中的各个问题,如函数实际行为与预期不符。
  • 强调了区分常规与异常的重要性,以及过度迎合异常导致的不良后果。
  • 分享了为运维人员设计的经验,如保留基本工具的可用性等。
阅读 44
0 条评论