这篇文章主要以京东618的实践:一元抢宝系统的数据库架构优化为例子来讲述数据库的设计对整体性能的影响以及如何改进数据库来满足需求。
改进的原因:
“一元抢宝系统”是京东一个新兴的业务系统,从上线以来用户下单的数量一直持续增长。在距离618前两个月时,京东商城商品虚拟研发部对系统做了整体预估,订单量快速增长及618大促的到来都将带来单量剧增的结果,到时势必会对数据库容量和负载造成压力,此时数据库的性能都将影响整体系统运行的性能,所以对数据库的结构改进设计就很重要。
改进的措施:对数据库底层分库分表
优点:能够确保数据水平动态扩展能力,满足数据容量持续增长的需求,提高下单效率。
1.数据库容器预估:依据数据量和业务特性估算出容器/库/表的数量及分库分表规则
2.底层路由策略选择及实现:分库分表路由策略是基础,影响整个系统架构,后期业务需求是否满足和支持,使用是否方便都与此有关。路由策略设计合理,上层业务使用会很方便。
常见的分表策略有两种:
-
hash路由
优点:可实现数据分散,热点分散;
不足:增加数据库节点时,会影响路由策略,需做数据迁移;
-
分区路由(增量区间路由)
优点:策略支持动态扩容,理论上可无限扩展;
不足:存在数据热点问题,新产生的表,读写频率较高;每次查询需要经过路由策略表。
每种策略都不是最完美的,只有最适合业务场景的才是最好的策略,所以在制定分表策略时,一定要着重考虑业务需求。
3.聚合查询及聚合数据同步的实现
4.历史数据迁移
5.系统关键点降级
总结:
从业务本身出发,前期的设计非常重要,每个时间点和各种步骤都要做好详细计划,细致深入测试。
分层架构在系统各个部分基本都有体现,在架构设计的时候要做好分层。