作为国内***梯队的电商企业,京东拥有亿万用户,每天要应对数以千百万计的访问需求,在其架构和管理方面有何妙招来对数据加以支撑呢?在会上,51TO记者采访了京东资深架构师张成远。
张成远,《Mariadb原理与实现》作者,开源项目speedy作者。目前就职于京东数据库系统研发团队,负责京东分布式数据库系统架构与研发工作,主导了京东分布式数据库系统在公司的落地及大规模推广。擅长高性能服务器开发,擅长分布式数据库/存储/缓存等大规模分布式系统架构。
分布式数据库的技术核心
京东每天面对海量的数据处理采用的是分布式数据库的系统,其核心技术及思路又是怎样的呢?
张成远表示,京东分布式数据库的关键是引入中间件的方式来提供对数据的拆分,解决了业务上单机扛不住数据量的问题。对于业务来说,在单机扛不住的情况下还要自己去关注数据,这样它的负担会非常重,所以京东采用了分布式数据库的方案,让业务可以比较方便的使用。京东会进入MySQL的协议,提供代理的方式,把整个集群管理好,业务接入时只需要用原生的MySQL客户端来使用就可以,所以对于业务的使用负担会非常的轻。同时京东也有非常完善的监控,所以能够保证业务接入以后系统的稳定和可靠。
数据库的设计架构
京东对容量非常的重视。在前期设计过程中,需要针对业务进行未来一到两年甚至两到三年的容量预估,来进行合理的资源配置。以及考虑到未来扩容的需求,京东可以实现在业务增长的情况下自动化扩容。
京东在发展过程中,早期的一些业务可能放在Oracle里面,也有一些数据量较小的业务是放在MySQL里面。简单说,因为单机的数据量放不下,如果采用分布式数据库我们能够把它的数据进行拆分,相当于可以获取到一个容量比原来大很多的数据库。
分布式数据库可以存放所有的关系型存储数据,并且还可以支撑京东非常多的核心系统。例如订单、商品、物流还有财务等等。
数据的可靠性
但是在这个过程中,数据的可靠性又是如何保障的呢?
张成远表示数据的可靠性有两点,一是服务本身是高可用的,二是数据本身是高可靠的。
比如说MySQL层面,我们通过主层,分布式数据库中间件层面,因为我们本身是无状态的,所以可以部署多份,来解决高可用的问题。关于数据本身高可靠的问题,我们会对数据库里面的数据定期进行备份,所以哪怕有误操作或者其他任何问题,都可以完整的恢复回来。
分布式事物的难点
在实现整个分布式数据库的系统的过程中也不可避免面临一些困难,比如分布式节点相关,京东团队又是如何解决的呢?分布式事物相关最难的问题在于事物的原子性很难保证,一个访问可能涉及多个节点,并且每个节点可能都有问题。尤其是基于MySQL层面做分布式数据库,因为每个节点事物的ID不一样,但如果基于存储的不是MySQL而是其他层面,相对来说会有类似两阶段提交的协议可以参考,从而解决问题。
很多人会关心到分布式数据库能否保证数据的一致性,张成远认为这不是一致性的问题,而是关系到的分布式事物的原子性的问题。从本质上说如果事物涉及到多个节点,并且节点异常,为满足业务的需求会引入相关系统,可以把丢失的东西补回来。还有一种方法,就是在使用上和业务沟通,将相关的事务进行拆解。拆分后,每次的访问之落在一个分部或者节点上,如此一来可以保证每次的访问要么成功要么失败,可以很巧妙的从另一个方式绕过这个问题,用来保证原子性。
采访***
国内不乏综合型电商平台,而京东却是中国***的自营式电商企业,是中国***个成功赴美上市的大型综合性电商平台,同时与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜,京东的成功与其有着优秀的数据库管理是密不可分的。