京东资深架构师张成远:京东分布式数据库是如何炼成的?
作为国内***梯队的电商企业,京东拥有亿万用户,每天要应对数以千百万计的访问需求,在其架构和管理方面有何妙招来对数据加以支撑呢?在会上,51TO记者采访了京东资深架构师张成远。
张成远,《Mariadb原理与实现》作者,开源项目speedy作者。目前就职于京东数据库系统研发团队,负责京东分布式数据库系统架构与研发工作,主导了京东分布式数据库系统在公司的落地及大规模推广。擅长高性能服务器开发,擅长分布式数据库/存储/缓存等大规模分布式系统架构。
分布式数据库的技术核心
京东每天面对海量的数据处理采用的是分布式数据库的系统,其核心技术及思路又是怎样的呢?
张成远表示,京东分布式数据库的关键是引入中间件的方式来提供对数据的拆分,解决了业务上单机扛不住数据量的问题。对于业务来说,在单机扛不住的情况下还要自己去关注数据,这样它的负担会非常重,所以京东采用了分布式数据库的方案,让业务可以比较方便的使用。京东会进入MySQL的协议,提供代理的方式,把整个集群管理好,业务接入时只需要用原生的MySQL客户端来使用就可以,所以对于业务的使用负担会非常的轻。同时京东也有非常完善的监控,所以能够保证业务接入以后系统的稳定和可靠。
数据库的设计架构
京东对容量非常的重视。在前期设计过程中,需要针对业务进行未来一到两年甚至两到三年的容量预估,来进行合理的资源配置。以及考虑到未来扩容的需求,京东可以实现在业务增长的情况下自动化扩容。
京东在发展过程中,早期的一些业务可能放在Oracle里面,也有一些数据量较小的业务是放在MySQL里面。简单说,因为单机的数据量放不下,如果采用分布式数据库我们能够把它的数据进行拆分,相当于可以获取到一个容量比原来大很多的数据库。
分布式数据库可以存放所有的关系型存储数据,并且还可以支撑京东非常多的核心系统。例如订单、商品、物流还有财务等等。
数据的可靠性
但是在这个过程中,数据的可靠性又是如何保障的呢?
张成远表示数据的可靠性有两点,一是服务本身是高可用的,二是数据本身是高可靠的。
比如说MySQL层面,我们通过主层,分布式数据库中间件层面,因为我们本身是无状态的,所以可以部署多份,来解决高可用的问题。关于数据本身高可靠的问题,我们会对数据库里面的数据定期进行备份,所以哪怕有误操作或者其他任何问题,都可以完整的恢复回来。
分布式事物的难点
在实现整个分布式数据库的系统的过程中也不可避免面临一些困难,比如分布式节点相关,京东团队又是如何解决的呢?分布式事物相关最难的问题在于事物的原子性很难保证,一个访问可能涉及多个节点,并且每个节点可能都有问题。尤其是基于MySQL层面做分布式数据库,因为每个节点事物的ID不一样,但如果基于存储的不是MySQL而是其他层面,相对来说会有类似两阶段提交的协议可以参考,从而解决问题。
很多人会关心到分布式数据库能否保证数据的一致性,张成远认为这不是一致性的问题,而是关系到的分布式事物的原子性的问题。从本质上说如果事物涉及到多个节点,并且节点异常,为满足业务的需求会引入相关系统,可以把丢失的东西补回来。还有一种方法,就是在使用上和业务沟通,将相关的事务进行拆解。拆分后,每次的访问之落在一个分部或者节点上,如此一来可以保证每次的访问要么成功要么失败,可以很巧妙的从另一个方式绕过这个问题,用来保证原子性。
采访***
国内不乏综合型电商平台,而京东却是中国***的自营式电商企业,是中国***个成功赴美上市的大型综合性电商平台,同时与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜,京东的成功与其有着优秀的数据库管理是密不可分的。
相关文章
- DB-Engines公布8月最新数据库排行榜
- Redis Labs宣布正式更名为Redis
- 为什么你的数据库这么慢?
- Forest v1.5.3 正式版本发布
- 10月数据库排行榜出炉,Oracle位居第一
- MySQL 8.0.27正式GA
- c语言中如何计算数组长度
- 如何使用mysql查询where条件里的or和and
- 【ASP.NET Core】EF Core - “影子属性”
- 如何用python list删除指定元素?
- 【ASP.NET Core】EF Core 模型与数据库的创建
- 如何处理单元测试中的请求?
- 【.net 深呼吸】连接Access数据库应注意的几点
- 【Win 10 应用开发】Sqlite 数据库的简单用法
- 【Win 10 应用开发】通过数据绑定更新进度条
- 【Win 10 应用开发】UDP广播
- 【Win 10应用开发】延迟共享
- 【Win 10 应用开发】共享目标(UWP)
- 金融/语音/音频处理学术速递[11.24]
- 计算照片的面积(UWP篇)