标准答案
- 全局锁或单写入者会让新增实例只增加竞争,必须细化资源边界或改变数据分区。
- 热点 Key 会集中请求到同一缓存、分片或对象,需隔离热点、复制读或改变访问模型。
- 数据库、HTTP 和消息连接池以及下游配额可能限制总并发,新增实例还可能把总连接数推过上限。
- 扩展前要用 profile、锁等待、分片分布、连接和下游指标证明瓶颈确实可横向分散。
题目解析
横向扩展只有在工作可以分散时才有效。全局锁、单分片、热点 Key、数据库连接上限和外部配额会让新增实例集中等待同一个资源,甚至增加竞争和重试。
扩容前要用 profile、锁等待、分片分布、连接池和下游指标证明瓶颈可分散。热点对象可能需要拆分、复制读、改变 Key 或改变业务访问模型,而不是简单加实例。
每增加一个实例都可能增加数据库连接、消息消费者和远端请求总量。容量评估要按故障扩容后的最大实例数重新计算,并设置全局连接和并发预算。
常见误区
- 误区:只看 CPU 不看锁和下游。改正:确认有效工作、锁等待、热点分布和下游配额,判断瓶颈是否可横向分散。
- 误区:每个实例都按最大连接数配置。改正:按全局预算和实例规模分配连接,给扩容和运维留出空间。
- 误区:扩容后不重新评估数据库总连接。改正:把实例数、连接池、后台任务和故障容量一起纳入上限计算。