6月24日至25日,由中国开源软件推进联盟(COPU)主办的“第十一届开源中国开源世界高峰论坛”在北京成功召开。本届论坛以“深化开源交流,壮大开源平台,服务万众创新,发展共享经济”为主题。
阿里云资深开发数据库工程师郑涔(花名明俨),受邀参与了这次大会,为大家介绍了阿里云与开源项目MongoDB的故事,他的演讲内容大致可分为三部分:
- MongoDB简介:主要介绍MongoDB项目
- 利用MongoDB搭建云数据库服务
- 云数据库MongoDB社区建设
以下是郑涔发言整理内容。
关于MongoDB
MongoDB是一个文档型的NoSQL数据库。目前是全世界最受欢迎的文档型数据库之一,仅次于Oracle、MySQL等数据库。
大体认为MongoDB是传统关系型数据库和NoSQL的一个结合。对数据库有所了解的人都知道,传统的关系
型数据库需要一些诸如建表、设置字段等复杂操作。而近几年比较火爆的NoSQL,无需建立schema就可以利用一些简单的K/V存储,来实现数据存储。所以说相对于传统的关系型数据库,NoSQL数据库在扩展性、性能等方面更胜一筹。
MongoDB结合两者优点。一方面,它在某种程度上像是包含了传统关系型数据库的特性,如具备丰富的查询语句及一些索引功能;另一方面,它也继承了NoSQL的优点,省去了设计字段和表的麻烦,并且拥有较好的性能,可以很方便的进行水平扩展。
MongoDB的主要特性可归纳为如下三点:
- 灵活动态的文档模型。适用于需要进行快速迭代开发的场景。
- 高可用。副本集架构具备自动容灾切换的功能。
- 水平扩展。存储的数据相对比较聚集,便于对数据进行水平分割,提高扩展能力。
具体而言,在传统关系型数据库中,我们需要在设计时考虑数据库要有哪些表,哪些字段,有时候需要在不同的表之间通过Join进行一些复杂的查询操作。而MongoDB的文档模型则不需要那些操作,它存储的是JSON格式的文档,以富文档的形式存储所需数据,通过数据冗余来避免Join,并提高性能。
在高可用方面,它采用了多节点副本集架构,使用户完全不需要关心容灾问题,因为其内部实现了选举算法,如果主节点发生宕机,它能自动地进行新的主节点选举,保证服务可用。这个功能可以用来实现多数据中心支持,以及滚动运维,举个例子,当你需要对系统进行维护的时候,你可以主动把当前的主节点降级为一个备节点,对备节点进行维护,维护好后再提升为主节点。在海量数据的支持及可扩展性方面 ,MongoDB同样做得很出色。用户可以对数据进行水平切割,系统可以自动实现负载均衡,对使用者来说则都是透明的。
在适用场景方面,用户所能想到的场景,MongoDB基本上都能可以胜任,除了一些需要复杂的事务处理的场景。
利用MongoDB搭建云数据库服务
阿里云的MongoDB云数据库服务是基于最新的MongoDB社区版本3.2构建的,存储引擎采用WiredTiger,性能比较优秀。目前该服务的特性主要体现在数据库的高可用、高可靠、高可扩展等方面。
此外,MongoDB云数据库服务拥有一支专业的源码团队,团队核心成员全部都是官方认证的DBA,他们可以做到内核的深度优化。目前他们的工作主要关注在MongoDB内核剖析、为用户提供一些增值服务和创新优化、社区建设等方面。阿里云数据库团队拥有一个中台团队,开发了一系列的系统工具并摸索出一整套的流程,可以方便地把一个开源的数据库做成一个云服务。目前阿里云的MongoDB云数据库服务在高可用方面上做的主要改进就是通过N+1个节点再加上负载均衡的方式来保证用户同时有N个节点可用。用户可以拿到一组包含N个节点的连接地址,这N个地址是会通过一个负载均衡服务动态解析到后端的服务节点。当有节点宕机时,阿里云会根据情况对节点连接地址的指向情况进行动态切换,保证用户始终有N个节点是可用的。
具体来说,当N为2时,用户可以拿到两个连接地址,其中一个连接地址是指向当前主节点的服务,另一个指向当前备节点,那么当主节点发生问题宕机时,这个主节点会自动下线,这时备节点会自动提升为主节点,另外原来的一个隐藏节点会提升为备节点,并且系统会根据情况为用户再新建一个隐藏节点,这样就能始终保持两个节点高可用。隐藏的那个节点平时也可以拿来做一些数据备份等操作,由于用户看不到这个节点,这样不会对用户的访问产生影响。
另外,如果需要为用户提供云服务,系统必须要做一些多租户的安全管理。这里我们是用成熟的cgroup解决方案来做一个多租户的隔离和资源限制,来实现IO、CPU及内存等资源的隔离。同时我们做了一些系统权限的独立,使每个用户的每个实例只能存访自己的一个目录,从而进一步提高安全方面的隔离。另外,我们还将内部使用的管理账号和用户的账号隔离开。因为我们需要让用户的使用更加省心,我们对用户屏蔽了内部的一些细节,包括一些高级的运维命令。此外用户还可以设置白名单来增强安全性。
目前阿里云MongoDB云数据库实现了一些企业版本才有的特性。众所周知,MongoDB除了有一个开源的社区版外,它还有一个收费的企业版,有一些高级特性是企业版才具备的。
阿里云团队也针对社区版本实现了一些企业版才有的特性:
- 一个是数据库的审计,这是一个重要的功能,大型企业一般都需要这个特性来获知或是处理安全方面的问题,以及用来做用户行为的分析,或者是做一些索引的自动优化建议等;
- 另一个是对中文索引的支持,原本的社区版本不具备这个中文处理的特性,这对广大的中国开发者来说是一个福音;
- 另外还包括一些创新优化,如动态调整MongoDB主备同步使用的增量日志的空间占用甚至于自适应的进行调整、对短连接做了性能优化,等等。
这些都是阿里云团队在实际开发运维中遇到的问题,并针对这些问题做的一些改进。
云数据库MongoDB社区建设
MongoDB的发展离不开社区的支持,目前MongoDB的社区人气火爆,用户活跃。在MongoDB开源社区的一些建设中,可以获得的最大的好处就是我们可以站在巨人的肩膀上。现在MongoDB这个开源数据库已经做得非常好了,程序员可以把它拿过来做一些改造、优化以及配套周边服务,来提供云服务。
具体而言,我们首先直接利用了一些现成的基础设施,然后,因为开源,我们团队能够更好地吸引人才,开拓视野并提高软件质量等等。另外,我们当然也要遵守开源协议,对开源产品做出的改进会回馈到社区。这包括我们做的针对原来功能上的改进、新的特性,以及一些Bugfix等等。因为MongoDB公司内部使用的特性和Bug追踪系统是对外开放的,任何人都可以提交一些需求或是代码补丁,并可以看到他们最新的一些进展。还有,我们还会不定期做一些最佳实践,并分享一些博客、文档,共同促进MongoDB在中国的普及和发展,让大家知道并解决实际使用中会遇到的问题,把MongoDB用得更好 !
云数据库MongoDB首页:https://www.aliyun.com/product/mongodb/