作为支撑百亿级数据量业务的基础服务,京东云数据库在可用性及高性能方面有极高的要求。本期我们的采访嘉宾是京东资深架构师张成远,本文根据采访整理而成。
张成远,京东资深架构师,《Mariadb原理与实现》作者,开源项目speedy作者。2012年加入京东云数据库技术团队,擅长高性能服务器开发、分布式数据库、分布式存储/缓存等大规模分布式系统架构,主导了京东分布式数据库系统及容器系统的架构与开发工作。在 ArchSummit北京2015 全球架构师峰会上,张成远将作为专题讲师为大家带来 《京东云数据库支撑百亿级数据量业务的探索与实践》 :
云数据库服务是一项基础性的云服务,解决用户自己搭建数据库时需要考虑的各种问题,让用户在使用时可以按需申请数据库资源,保证整个数据库服务的稳定性及数据的可靠性,同时提供弹性伸缩等的支持,尽可能的降低用户在使用云数据库时的成本。
本主题主要是分享京东私有云分布式数据库集群的实现,包括如何支撑上亿级数据量的业务,如何保证数据高可靠、服务高可用以及在线集群扩容等机制。另外还会分享京东公有云数据库的架构与设计,如何实现一个稳定、可靠、可弹性伸缩的公有云数据库服务,涉及到备份、恢复、监控、迁移、高可用切换等一整套方案。
京东内部有大量业务的数据是存放在Oracle中的,为了完成京东内部去O的过程,我们为此打造了一套私有云分布式数据库集群,这套私有云分布式数据库集群目前支撑着京东大量拥有上百亿级数据量的业务,本主题中会重点介绍去O过程中遇到的难点同时详细介绍在内部数据库云化以及在支撑大规模业务过程中积累的经验,包括如何打造一套高性能的私有云分布式数据库集群服务,如何在支撑京东上百亿级别数据量业务正常服务的情况下做到在线无缝集群扩容,分享来自京东生产一线的经验。
云服务最重要的是要做到可弹性伸缩可按需获取资源,让用户可以尽可能的花最少的代价满足业务的需求。用户使用云数据库时面临当业务量增长时申请的资源不够,需要做到快速的扩张现有资源,当业务量降低时需要快速缩小现有资源。当数据库实例甚至整个机房发生故障时,要做到用户在云数据库中的数据是安全的可靠的,可以第一时间恢复云数据库服务,包括跨机房恢复等,保证云上的用户业务是不受影响的,这些都是云服务尤其是云数据库服务需要解决的事情,本主题也会介绍京东公有云数据库是怎么解决这些问题的以及在解决这些问题时积累的经验。
精彩内容敬请期待,以下是InfoQ记者对京东资深架构师张成远的专访:
张成远:京东云数据库主要包括公有云数据库服务和私有云数据库服务两部分。公有云数据库主要是面向外部用户,定位是中小型公司;私有云数据库主要针对公司内部业务,有时候甚至会特殊业务特殊对待,会针对业务的特点来具体问题具体分析,数据量较大的业务我们会建议业务使用我们私有云分布式数据库集群,将数据进行拆分等。这两项服务在京东都是由同一个团队来提供支持,京东云数据库的总体做法是将私有云数据库中积累的经验逐步的输出到公有云数据库上。
张成远:云数据库集群服务主要是指分布式数据库集群,用户在使用这个集群的时候可以像使用单台数据库一样去使用,在业务层面不用关心集群中的数据是如何分布的,对用户来说后端的数据库实例是不可见的或者不需要关心的,在使用层面来说心智负担会大大降低。
N个数据库同时提供服务一般是指N个数据库服务多个不同的业务,或者是某个业务同时使用了N个数据库,但是业务对这些数据库是有感知的,换句话说这N个数据库对业务都是可见的。
张成远:云数据库服务其实也可以理解为将传统的数据库服务搬到云上,但是云数据库服务尤其是公有云数据库和传统的数据库确实是有区别的,最大的挑战在于不仅仅要提供数据库服务,还需要与用户的私有网络及云主机甚至包括云存储等各项云服务相互配合提供高可用的服务、保证数据的高可靠,是一整套云服务中的一项。传统的数据库技术更多关注的是数据库本身的,网络及主机等问题一般会比较简单。
张成远:京东公有云数据库的架构都是基于私有云数据库的实践经验所得,在实际输出的时候考虑到安全及弹性伸缩等的考虑,公有云上采用基于虚机部署的方式,结合云主机云存储以及云数据库系统自身相配套的信息采集系统再整合公司的监控系统等各项服务,对外提供可伸缩高可用及高可靠的公有云数据库服务。
私有云中的分布式数据库集群架构主要是采用引入中间件的方式来支撑业务,中间件本身完全兼容mysql协议,在内部业务使用的时候可以像使用原生数据库一样简单。
张成远:公司内部有一套完整的统一的监控系统,云数据库自身还有一套信息采集系统,采集系统会采集数据库实例上的相关信息包括慢查询以及机器负载等信息,这些采集的信息经分析处理以后如果如果发现有异常比如有慢查询或者机器负载较高,会通过统一的监控系统触发报警,做到及时发现问题及时处理问题。
在私有云分布式数据库集群中的性能监控主要是两部分构成,一部分是分布式数据库中间件会对查询做一些统计信息,这些统计信息中有超过某些阈值的情况就会触发报警,另外一部分是数据库本身的完善的监控系统。
张成远:京东公有云数据库目前是部署在虚拟机里的,基于虚拟机的快速创建我们可以做到公有云数据库实例的较快的创建。私有云数据库目前有很大一部分已经将数据库实例放到容器里,在创建部署方面将更加的便捷,当内部验证以后后续我们也会考虑输出到公有云上。
张成远:私有云数据库在重大活动中确实有很大的压力,这些方面没有捷径,我们能做的是在活动之前做好预案,包括提前演练压测等以及各种异常情况的应对方案。
将数据库放到容器里解决了我们较大的一个问题,可以快速的创建需要的数据库实例资源,另外我们也针对内部业务的特点开发了一套私有云分布式数据库中间件系统,让压力分散到多个实例上,降低每个数据库实例的压力。
张成远:京东的业务发展非常的迅猛,所以在很大程度上来说京东的技术都在被业务驱动着往前跑,很多业务早期数据可能是放在Oracle或者Sqlserver中的,等到业务量比较庞大的时候再着手将数据从原来的数据库迁移到mysql里的时候就会比较痛苦,一般都需要业务方和数据库团队紧密配合才能真正的完整的迁移出来,但是也正是因为有这些实际的业务需求驱使着京东的技术不断的提升。
感谢龙永昕对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群 (已满),InfoQ读者交流群(#2) )。