本文转载自微信公众号“于大胆的推特”,作者于大胆。转载本文请在twitter上大胆联系Yu公众号。在mysql应用中,最让人担心的就是同步延迟问题。原因有很多,但负面影响之大,甚至无法解释。作为最流行的关系型数据库之一,mysql的强项可能不是速度,它的并行复制能力并不强,所以如果你想严重依赖mysql,你必须意识到同步延迟可能是常态。那么如何尽可能避免呢?1:在应用方案的开发中,假设有延迟,核心业务一定要严谨。比如文章队列无法从图书馆获取文章信息,是不是要重新投递到队列?或者从主库查询,尽量减少延迟的影响,当然设计的复杂度会增加。如果严重依赖缓存,如何避免脏缓存信息就比较难解决了。2:mysql的减负不能增删改查。为了控制数据量,我喜欢在不影响应用程序的情况下删除数据。看似低效的解决方案,其实非常有效。尽量减少慢速查询。以前同步延迟都是查询引起的,这次不是队列中大量的更新和插入引起的。比如每天全量推送用户,长时间高并发写入,同步是不可避免的,所以一定要控制并发写入量和更新量。3:选择合适的解决方案。尽量使用mysql作为存储,因为大规模的查询和更新不是它的优势,所以对于非核心业务可以考虑redis和mongodb,尤其是队列方案。mysql不推荐,或者有多种解决方案。4:拆分受限于mysql本身的机制,可以通过升级mysql的版本来提高并行复制能力。或者,根据不同的场景,使用多个库,甚至多个mysql实例,避免核心服务受到影响。一方面可以实现服务解耦,另一方面便于扩展。这也是分而治之的解决方案之一。5:负载均衡有时候会发现有些从库没有延迟,只有一个延迟,可以通过策略去掉这个从库,但是必须认识到这只是临时解决,大量的延迟发生,说明问题可能已经消失了比较严重。现在的规模还小,万一做大了呢?那时候可能是灾难性的。
