记录最近使用基础云设施的过程中遇到的几个有意思的问题:
1、OceanBase 数据库锁问题
给业务数据模型扩充了一个远程方法调用,利用 ORM 的 hooks 特性加到了 afterCreate 中,导致偶发数据库锁。原因是业务存在事务处理批量调用,新增的 RPC 操作让事务整体时长变得十分漫长,过程中出现了对同一实体的操作被锁。
2、RocketMQ 消息不消费产生堆积
开发环境和测试环境复用了同一个 MQ 消息 Group,为了区分不同的环境,消息在提交和消费的时候都增加了 env Tag,结果在消费的时候,始终丢消息。原因是同一个 Group 对应的 Consumer,其 Topic 和 Tag 必须保持完全一致,否则会因为 RocketMQ 储存模型和消息拉取模型的设计问题导致消息消费不了。
3、MongoDB CPU 暴涨
为了查询更快,给一张表增加了复合索引,突然在某段时间,MongoDB 的 CPU 上涨,飙高到 100%。原因是表体积增长过快,插入一条数据时,需要完成大量的索引更新,每次更新耗时会超过 100ms,服务器不堪重负,最终导致吞吐量变成零。
业务规模扩大之后,类似的云服务使用问题会出现的越来越频繁,也正因如此,事情变得越来越有意思了。感知这些问题,需要对服务的使用和原理有比较全面的了解,同时也需要掌握相应的工具和方法,把核心问题的监控做到位,才有可能避免线上故障。