开源分布式数据库发展与实践

2018年,“开源(Open Source)”诞生20年,恰逢开源中国创办十周年。在本土最大开源盛会——源创会年终盛典上,巨杉数据库分享了新一代开源 NewSQL 数据库架构设计与实践方面的相关经验,本文也是演讲内容的整理汇总。

巨杉数据库从2011年开始研发至今已有将近八年的时间,是中国最早从零自研并且将引擎开源的分布式数据库产品。

王涛首先展示了Gartner的开源软件成熟度曲线,它说明任何新技术的发展都需要要经历一个周期。开源软件先会进入快速发展期,当到达某一个时刻大家对它的期望会远超其实际带来的效果,那么接下来就会进入一个热度下行期,最后当大家理性看待这种技术的时候会进入稳步回升期,最后进入成熟期。

可以看到,开源软件和整个开源生态已经逐渐进入成熟期,并且已经有许多开源软件同时在商业化上取得了成功,获得了企业市场的认可。

基础软件开源&应用软件开源

“开源生态”中存在多种类型的产品,不同类型的产品从特性,到开发和运营模式都不尽相同,对于开源产品,一般会将其区分为基础设施与应用软件两大类。这两大类对业务的支撑作用完全不同,因此其开发与运营模式也截然不同。

对于基础软件来说,譬如Linux操作系统,MySQL数据库,Tensorflow框架等,这类产品可以看做是半成品,不会直接对业务提供价值,而是在应用程序的后台提供基础设施支撑,需要进行二次开发。

而另一类应用软件就更加纷繁复杂,大到像CRM、ERP这类行业应用,小到车牌识别、论坛框架、博客服务器、登录验证码模块,这些为了满足某一特定业务需求的项目可以归纳为应用软件。一般来说,大部分应用软件都是为了满足某一类特定客户指定场景下解决特定问题而存在的。

基础软件强调的是通用,其设计目标是为了满足大部分行业的通用需求。软件能够覆盖的更广的范围,能提供其他产品所无法提供的特性与性能,能构建起足够开放的技术生态,是开源基础软件设计的目标。而应用软件则是强调专精,是否能够在细分领域中尽可能满足目标用户的全部需求,是否好用方便,是否足够高效解决特定的问题,是开源应用软件的最终目标。

从开源软件的使用者来看,可以将其分为最终用户与服务提供商两类。

第一类最终用户是直接使用开源软件解决问题的个人或企业。第二类相对复杂得多,包括通常意义上的云服务提供商,他们将MySQL等开源软件经过修改打包成自己的产品线,并与自己的IaaS进行集成,对外收费提供服务。

另一类则是企业级应用软件开发商,专门为一些企业客户提供定制化软件。这类用户经常使用开源软件全部或部分代码,嵌入到自己的应用程序中提供客户端到端的解决方案。

巨杉数据库技术实践

巨杉数据库的技术特点

1)标准SQL支持,MySQL协议级兼容

SequoiaDB采用了业界主流的“计算-存储”分离的架构。SequoiaDB目前支持标准SQL的访问,同时还在协议级别完整兼容了MySQL/PostgreSQL的语法。SequoiaDB除了100%兼容行业标准的MySQL、PostgreSQL以及SparkSQL语法及协议外,还提供了类S3对象访问以及Posix文件系统接口、MongoDB兼容的原生JSON引擎以及深度数据压缩等多项全新功能,能最大程度满足传统应用开发人员对于新一代分布式数据库的结构化、半结构化以及非结构化访问方式的需求。

2)金融级分布式OLTP

作为一款金融级多模分布式数据库,SequoiaDB 全面支持MySQL与PostgreSQL语法协议兼容的OLTP在线交易业务。SequoiaDB使用其自研的开源数据库存储引擎,全面支持ACID(原子性、一致性、隔离性与持久性)、分布式跨表跨节点事务能力、可配置强一致与最终一致性保证、同时在优化器端支持CBO(Cost-Based Optimization)、多维度数据分区、以及HTAP等多种技术特性。

3)分布式架构

SequoiaDB数据存储引擎采用原生分布式架构,数据完全打散在分布式节点间存储,自动化数据分布和管理,数据可以按需灵活扩展。巨杉数据库通过原生分布式架构,可以轻松实现PB级别数据管理,目前生产环境实测支持超过1000个节点集群。用户面对海量数据不再需要“分库分表”。

4)Multi-Model多模数据引擎

SequoiaDB灵活的数据存储类型,支持非结构化、结构化和半结构化数据全覆盖,实现多模(Multi-Model)数据统一管理。SequoiaDB采取了多引擎的设计,除了记录引擎还提供了对象存储引擎。多模引擎设计让数据库平台场景更多样,也能符合云数据架构下对于多样化业务数据的统一管理、运维要求。

5)HTAP混合事务/分析处理

SequoiaDB通过SQL的完全支持以及Spark的整合,实现HTAP混合事务、分析处理,快速实现业务应用的弹性开发,应对更多复杂应用场景。同时,通过分布式数据库多副本机制,可以将在线交易和离线分析业务划分隔离,实现同一组数据在应对不同类型业务时互不干扰。

SequoiaDB巨杉数据库开源实践

巨杉数据库在2014年12月的1.0时代就已经向社区进行了开源,是中国基础软件领域最早拥抱开源的产品。

如同大部分的开源软件,巨杉数据库所有源代码也都被托管在github和码云上面。对于一款数据库来说,用户最看重的是其稳定与可靠性。因此,巨杉数据库的开发与测试人员遵循着非常严格的代码分享流程,必须确定每一段代码都足够稳定可靠才会发布到github社区。即使社区用户下载了最新的源代码进行编译,也可以保证代码中所有的修改都是经过详细测试与验证后,才被最终发布出来的。

因此巨杉数据库团队内部使用了一套SVN进行临时代码的提交。所有的代码必须经过peer review后才会进入SVN代码库。进入SVN代码库的程序会被持续集成框架不停进行重新编译打包并发布到一个拥有上百台物理机设备的测试集群中进行压力测试。

到现在为止,巨杉数据库运行着包括mysql标准测试、PG标准测试、巨杉内部测试框架等在内的数万个测试用例。一整套基准测试用例从开始到结束大约需要运行12小时,整个集群也被切分为几十个不同的区域分别进行特定功能型验证、集群测试、压力测试、以及一些典型用户业务场景的集成测试。

而这些测试只是代码发布到github之前的流程。在发布正式大版本前则会有大概2周左右的全面测试。在两周内该版本的所有提交会被冻结,巨杉数据库整个测试团队八成以上的力量会被投入到版本发布测试中。与普通的自动化测试不同,代码发布前的测试会引入大量的手工测试流程,包括一些典型的客户场景与开发商的解决方案,都会在开发中心搭建相应的用户场景。手工测试与回归测试会确保新的版本能够解决之前发现的问题,完全兼容已有的业务且不会造成任何影响。

年度最具影响力开源软件

在随后的开源中国2018年度最受欢迎中国开源软件颁奖典礼上,SequoiaDB荣获年度最具影响力开源软件的奖项。未来巨杉数据库会秉持初心,在开源数据库领域里加速前进,保持产品技术的创新,点滴积累,回馈社区,让更多的开发者和公司受益。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181225B18XH300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券