基础设施、云与 DevOps · 进阶
扩展:横向、纵向,以及你真正需要的
一句话: 在扩展之前,先量清楚瓶颈在哪——大多数系统里瓶颈是数据库或某一条查询,而不是服务器数量。
两个方向
纵向:换更大的机器。见效快,有上限,而且是单点故障。
横向:负载均衡器后面放更多实例。要求应用是无状态的——会话放在共享存储里、文件放在对象存储里、不依赖本地内存。
真正卡住的地方
数据库连接、没有索引的查询、锁,以及漫长的同步流程。在瓶颈是数据库的时候把服务器翻倍,只会加大压力。
所以:先做性能剖析,再扩展。半小时的度量能省下一个月不必要的架构工作。
读与写
大多数系统读远多于写。只读副本、缓存和物化视图能撑很久,之后才轮到真正的数据拆分。
深入一层
自动扩缩容需要一个先行指标,而不是滞后指标:队列长度或请求速率比CPU使用率反应更早。并且要设一个上限——不设上限的自动扩容,会把一个循环bug变成一张惊喜账单。