MongoDB World 2016参会全记录

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,通用型 2核4GB
简介: 上周和 @叶翔 一起参加了在 纽约举行的MongoDB World 2016,MongoDB作为一个NewSQL数据库越来越受关注,这一点从google趋势、百度指数都可以看出来。 本次会议举办得非常用心,演讲主题丰富,涵盖了MongoDB产品规划、内部实现、 用户案例、devops、

上周和 @叶翔 一起参加了在 纽约举行的MongoDB World 2016,MongoDB作为一个NewSQL数据库越来越受关注,这一点从google趋势百度指数都可以看出来。

本次会议举办得非常用心,演讲主题丰富,涵盖了MongoDB产品规划、内部实现、用户案例、devops、driver使用等很多内容,能满足各种不同岗位听众的需求。我目前在阿里云数据库团队主要负责MongoDB源码方面的开发工作,所以重点会放在MongoDB内部实现的部分,接下来跟大家分享下参会的一些重要内容及感悟。

MongoDB 3.4 preview

MongoDB的版本迭代非常快,我接触MongoDB还不到一年的时间,已经经历了MongoDB 3.0、3.2两个大版本,云数据库为了跟官方保持同步,已经使用了最新的3.2版本。大版本的发布,新功能改进上还是非常给力的,比如3.2相比3.0版本,重大的改进包括:

  • 默认的存储引擎从mmapv1切换为wiredtiger,提升性能的同时也能通过压缩降低存储成本
  • 复制集的选举使用raft协议,可靠性进一步增强
  • 支持文档校验功能(document validation)
  • 支持left join($lookup)
  • 支持in memory存储引擎(企业版),MongoDB支持复制集各成员使用不同的存储引擎,应用场景的想象空间很大

本次会议上介绍了下一个大版本3.4里的主要特性

总体看来,MongoDB还是很注重社区反馈的,像collation、只读视图的功能都是社区vote比较多的特性;企业版本支持上,3.2里只有企业版支持的功能主要包括审计日志、数据加密、mongodb compass/ops manager、bi connector,in memory存储引擎,大都是数据库外围的增值功能,放在商业版本里很能理解,但in memory存储引擎放到企业版我觉得很意外。

数据库引擎是MongoDB核心的组成部分,开发一个新的引擎很复杂的,而且引擎在各个场景下是否能表现得符合预期,不经过大量的使用验证是很难稳定的,以wiredtiger为例,wiredtiger在作为mongodb存储引擎之后,社区的各种使用案例遇到的问题也帮助wiredtiger改进了很多;希望官方能把in memory引擎放出来,让社区一起来提升它,这样MongoDB就能适应于更多场景了,比如在缓存的场景代替redis...成为真正强大的NewSQL。

MongoDB Atlas

本次大会最重量级的内容就是MongoDB Atlas Cloud Service的发布,MongoDB公司正式提供Database-as-a-service服务模式,用户可以选择在AWS(后续可能支持azure,gcp)上部署MongoDB云服务,模式跟现在的mlab类似。

Async network framework

这个主题主要介绍MongoDB 3.2异步网络框架的改造,Mongos跟Mongod的通信,典型的流程是connect ==> auth ==> [send request ==> recv response] * N ==> close,在之前的版本里整个过程是按顺序同步进行的,总体效率很低。

在3.2里实现了Async network framework,采用状态机转换的模式实现异步通信。一个线程池负责做实际的工作,并处理状态转换。请求的状态可分为『connect、auth、send、recv、close』等状态,connect状态会触发线程执行connect动作,并在连接成功的回调函数里将请求设置为auth状态,然后auth触发认证过程,成功后进入send状态,依此类推...整个过程异步化。

目前这个网络框架主要用于mongos与mongod、复制集mongod之间的通信,driver到MongoDB之间还是connection per thread的模式,跟MongoDB的工程师交流了下,这块有改进计划但不在3.4里。

Async network framework在设计实现时还考虑了代码可读性方面的问题,异步代码是非常难读的,各种回调很容易把人绕晕;MongoDB在在实现时大量使用了C++ 11的lamda表达式,尽可能将异步的代码写得『同步化』,以提升代码可读性。

Raft Protocol in MongoDB

从3.2版本起,MongoDB使用raft协议来保证一致性,这个主题思远同学在之前中文社区的Webinar也分享过,有兴趣的同学直接去看中文的PPT及视频,不做过多介绍。

Sharded cluster

这个主题主要介绍了Sharded cluster的config server从『多个独立mongod节点』演变为『复制集』后的一些设计考虑。

config server改为复制集模式后,复制集的备节点同步可能存在延时,而且primary节点还可能出现回滚(rollback)的情况,为了让所有mongos看到一样的视图,一致性的问题得重新考虑,3.2版本里引入了Read Concern的功能来解决这个问题。

mongos向config server写入时,使用默认的write concern,但读取时使用read concern majority级别,确保读取的数据已经成功写入大多数节点,这样就不会读到可能会回滚的数据了;

但光靠majority还不够,读到的数据可能不是最新的,比如3节点复制集,primary上成功更新了信息,比如chunk迁移后更新路由信息,但2个secondary还未同步,通过majority级别的read concern读取时,仍然可能读到未更新的路由信息。为了解决这个问题,在readConcern里加了一个afterOpTime的选项,指定读取的数据一定在某个时间戳以后,以确保读到最新的数据。

Testing Infrastructure

本次大会有好几个分享MongoDB内部测试相关的主题,我听了3个分享,分别讲MongoDB的持续集成测试、宕机测试、性能测试,感觉MongoDB在测试上的确做得很好,非常值得学习,总的来说就是将所有的测试『自动化』。

MongoDB使用evergreen(evergreen目前也是开源的)做持续继承测试,因为MongoDB实现上包含很多模块如replication、sharding、index等,再加上MongoDB是能在linux、windows、solaris等多个平台上运行的,测试是相当难做的。

MongoDB通过evergreen来实现自动化的持续集成测试,其自动追踪代码commit,并根据配置(哪个模块、哪个OS平台、哪些测试case)来执行测试,测试通过后,将代码提交到内部的代码仓库。绝大部分的测试工作都是在AWS机器上完成的,而且ervegreen还能弹性的控制测试需要的AWS的机器资源,以尽量降低成本。

为了保证MongoDB在异常情况下的数据可靠性,需要针对MongoDB运行的不同环境(虚拟机 or 物理机)进行断电测试,他们使用一种可编程插座来实现通过ssh的方式来自动启停服务器,以模拟断电测试环境。

性能测试(这里说的性能测试并不是说单纯测MongoDB的服务能力,目的是要发现MongoDB可能存在的性能问题,并进行优化),性能测试的基础还是『测试自动化』,多种workload持续测试,当发现性能问题后(有的问题可能要跑很久才会出现),就做case study,分析原因以及如何让问题重现,然后改进代码,重新测试...直到问题解决。

Wiretiger cache调优

wiredtiger cache的配置是个老大难的问题,社区里最近很多用户遇到持续insert场景下,cache满了之后,cache evict导致请求响应很慢,通过设置小的cache size可以缓解这个问题,所以wiredtiger的cache并不是越大越好。

wiredtiger的cache里存储解压缩后的数据,访问时如果WT cache命中,则直接读取数据;如果cache不命中,则会在OS page cache查找,再不命中则从磁盘读取。如果WT没有开启压缩、加密,则数据不会存储到WT cache里,相当于关闭了cache(这一点未实际验证过)。

对于WT cache的配置,没有明确的规则,建议如果读多写少,可以配置较大的cache size;如果写多读少,则配置较小的cache size。

存储引擎API及mongorocks

MongoDB 3.2已经支持wiredtiger、mmapv1、in-memory存储引擎,其他的一些存储引擎比如rocksdbterakdb也对MongoDB做了适配,但没有被合到官方代码里。

MongoDB存储引擎适配工作量还是很大的,需要实现的接口挺多,还需要考虑各种可能的优化,比如wiredtiger引擎针对oplog采用特殊的删除策略来提升性能。希望存储引擎API的抽象能做得越来越好,适配起来更简单,这样才能让更多的引擎加入进来,让用户能有更多的选择。

SQL Proxy (BI Connector)

MongoDB 3.2企业版里支持bi connector来适配了多种bi分析工具如tableau等,通常这些工具都是直接使用SQL来进行数据分析,MongoDB开发了SQL proxy用于实现从sql到MongoDB的查询语言MQL的转换。

SQL里大部分操作都在MongoDB里都能找到对应操作符,重点需要解决数组字段的查询、MongoDB在实现SQL PROXY时,把数组的多个元素当做多个文档来看待(类似与$unwind操作符的工作),目前也有类似的项目做SQL到MQL的转换,如querymongo

其他

  • 国外技术会议参会平均年龄远大于国内,现场见到不少白头发的老头
  • MongoDB专门为会议开发了一个app,每个参会者会发一个小的智能设备,相互碰一下,app上就会自动加好友,app的数据就存储在MongoDB,这是对技术最好的诠释。
  • 会议除了技术分享,会议第一天晚上安排了一个after party的活动,把参会的人拉到酒吧,听歌吃东西;第二天早上还有一个跟CTO一起晨跑的活动(老美的身体都太棒了,跑了几分钟就被甩得跟不上了,经常锻炼太重要了),会议结束后大家一块在会场喝啤酒、吃点心聊天。整个会议感觉很棒,学到了也玩到了。
  • foursquare是目前我了解到使用MongoDB规模最大的公司,部署节点700+,大量使用shareded cluster,MongoDB大有可为
  • 百度、东航分享了使用MongoDB的经验,关注度很高,尤其百度的同学分享后很多听众提问
  • MongoDB的slogan是FOR GIANT IDEAS,本次会议也有2场keynote的分享跟技术及MongoDB无关,而是分享一些『很有创意的想法及实践』。

阿里云数据库团队常年招工,欢迎加入,和我们一起实现Giant Ideas!

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
存储 运维 监控
当游戏爱上MongoDB!阿里云&MongoDB中国区域游戏行业私享会
始于2019年底的新冠疫情改变了我们的生活方式,游戏成为了很多人排遣寂寞的一种方式,由此带来了游戏市场的异常火爆。游戏市场比拼的是谁能更快速地开发迭代,让玩家体验更佳,因此能够敏捷开发、快速扩展、全球部署和轻运维的数据库产品无疑将为游戏的开发和后期运营奠定良好的基础。 诚邀您与Mongo DB、阿里云数据库专家团队, 以及游戏行业同行共同探讨如何使用Mongo DB帮您打造全球化高效、易用、稳定的数据库架构,并为您详细解读MongoDB5.0新特性在游戏行业的最佳实践。
3677 1
当游戏爱上MongoDB!阿里云&MongoDB中国区域游戏行业私享会
|
NoSQL 关系型数据库 数据库
天生一对,当游戏遇上MongoDB
当游戏遇上MongoDB,会碰撞出什么样的火花,本文为您一一道来。MongoDB针对游戏灵活多变需求、一些专有场景-道具自动过期和附近玩家、高可用、高可扩展、回档、滚服、运营数据分析等场景都有非常好的解决方案,可谓是天生一对。
10599 0
|
10天前
|
NoSQL 安全 MongoDB
|
11月前
|
存储 NoSQL MongoDB
开心档-软件开发入门之MongoDB 查询分析
【摘要】 本章将会讲解MongoDB 查询分析可以确保我们所建立的索引是否有效,是查询语句性能分析的重要工具。
|
NoSQL 架构师 大数据
SegmentFault 与 MongoDB 建立官方合作—— 共建MongoDB 中文爱好者社区
日前,SegmentFault 和 MongoDB 正式建立官方合作关系。SegmentFault 为MongoDB 团队提供专业的子站问答平台、博客专栏以及活动平台等服务,帮助MongoDB更好的跟中国本土的开发者更好的交流,通过SegmentFault 平台建立一个MongoDB 中文爱好者社区,以便于更好的为中文开发者服务,拓展中国市场。
147 0
SegmentFault 与 MongoDB 建立官方合作—— 共建MongoDB 中文爱好者社区
|
安全 Cloud Native 数据管理
【技术短视频】OceanBase 5mins Tips 第一期来啦:小姐姐带你入门数据库
OceanBase 5mins Tips 第一期上线啦!初心很简单,就是看到一些好的东西,想分享给你们。听高颜值程序媛讲解分布式数据库技术,和“OB小话唠”一起探索奥秘吧~
【技术短视频】OceanBase 5mins Tips 第一期来啦:小姐姐带你入门数据库
|
存储 NoSQL 关系型数据库
【MongoDB训练营】第一课:走进 MongoDB 答疑汇总
【MongoDB训练营】第一课:走进 MongoDB 答疑汇总
1176 0
【MongoDB训练营】第一课:走进 MongoDB 答疑汇总
|
运维 NoSQL 定位技术
阿里云荣膺MongoDB年度最佳ISV伙伴奖,首个共建特性上线MongoDB最新版 ​
日前, MongoDB全球合作伙伴及亚太区高级副总裁Alan Chhabra在MongoDB年度盛会MongoDB.live上宣布,阿里云荣膺MongoDB “年度最佳ISV伙伴奖”。
667 0
阿里云荣膺MongoDB年度最佳ISV伙伴奖,首个共建特性上线MongoDB最新版 ​
|
机器学习/深度学习 NoSQL 安全
MongoDB全球云端技术盛会强势来袭,阿里云MongoDB新特性首发,期待ing!
作为全球排名第一的NoSQL数据库,也是业界最受欢迎的开源数据库之一,MongoDB又有“大动作”啦!
751 0
MongoDB全球云端技术盛会强势来袭,阿里云MongoDB新特性首发,期待ing!
|
NoSQL MongoDB 数据库