2019年,我作为技术负责人主导了公司核心业务系统向大数据服务器的迁移。彼时,我们标榜自己是“数据驱动型企业”,拥有数十TB的日志与交易数据。但理想很丰满,现实却是一台单点MySQL数据库在双十一期间频繁OOM,老板拍板:“上Hadoop集群!”于是,我成了那个把服务器从物理机折腾到云原生的“救火队长”。

第一个大坑是数据倾斜。我们将用户行为数据按时间分区,但每日活跃用户集中在晚8点到10点,导致RegionServer负载失衡。我们花了三周设计自定义分区策略,将热点用户ID按哈希散列到不同节点,才勉强稳住。第二个教训是网络拓扑。最初采用千兆以太网,shuffle阶段MapReduce任务卡死,IO等待飙升到90%。被迫全部升级为万兆光纤,并调整了机架感知策略,才将任务耗时从小时级降到分钟级。

第三个关键点是GC调优。Java堆内存配置不当导致频繁Full GC,我们不得不重写部分序列化逻辑,从Kryo切换到Protobuf,并调整了G1GC的停顿时间目标。那段时间,每天凌晨三点都在看GC日志。三年下来,我总结了三条铁律:第一,永远预留30%的冗余资源应对流量尖峰;第二,监控系统必须覆盖从硬件到应用的每一层;第三,数据治理比服务器性能重要百倍。如今再看那些踩过的坑,它们最终成了架构师最宝贵的肌肉记忆。