此文已由作者温正湖授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

MongoDB是目前最为流行的NoSQL数据库,在2017年1月新鲜出炉的数据库权威排行榜上,MongoDB超越PostgreSQL,重回第四宝座,是前五中唯一的NoSQL数据库,遥遥领先其他NoSQL数据库。

MongoDB官方调查得出结论:“MongoDB is generally a good fit for 60%-80% of the applications you may be building today.”。为什么MongoDB能够如此通用且受欢迎?原因在于MongoDB既有关系型数据库的强大查询功能、强一致性和丰富索引功能的优点,同时又具备NoSQL数据库灵活的数据模式(JSON-Style)、更好的扩展性和更高的性能。MongoDB集关系型数据库和NoSQL数据库的精华于一身。

首先,MongoDB具有灵活动态的文档模型(schema-free, document-oriented):MongoDB是文档型的NoSQL数据库,数据以文档的形式在MongoDB中保存,文档实际上就是一个个JSON/BSON字符串,非常直观易懂主流的计算机语言如Java、Python等对JSON都有很好的支持;

其次,提供了基于复制集(Replica Set)的高可用框架:复制集提供领先的服务高可用和读写负载均衡方案,新节点加入到复制集中会自动进行数据初始同步(Initial Sync),无需人工干预;若复制集的Primary节点宕机,MongoDB会自动进行主从切换,在大多数节点在线的情况下,自动地快速选出新的Primary并恢复写服务,同样无需人工干预;

再次,提供了数据在线水平扩展机制(Sharding):Sharding提供了完善的业务数据和负载水平扩展的机制,每个shard都保存业务的一部分数据,shard可以配置为复制集,确保shard上数据的高可用性。相比复制集,sharding在部署和管理上都复杂很多,只有当业务的数据量达到单个复制集无法支撑、或者业务的负载超过了复制集的服务能力的时候,才需将复制集平滑升级为Sharding。

此外,MongoDB还拥有强大的索引能力,支持创建唯一索引、二级索引、TTL索引和地理位置索引等,在此基础上,通过explain()和hint()命令还可以查看查询语句的执行计划、强制查询走某个索引,这些特性可媲美关系型数据库。

网易蜂巢已于2016年底重磅推出MongoDB服务,使用蜂巢MongoDB服务,您除了能够体会到上述所提的MongoDB强大功能,还能够进一步享受最新的MongoDB 3.4版本、数据私网内安全访问、全面而灵活的实例监控、节点故障快速恢复、高效的数据自动备份等服务。

a、基于MongoDB 3.4的私网实例

在网易蜂巢云平台下,您只需为MongoDB实例取个名称,再点击一次鼠标就能够快速完成一个MongoDB 3.4实例的创建。网易蜂巢是业界第一个上线MongoDB 3.4版本的云服务提供商(不包括MongoDB官方的Altas平台)。MongoDB 3.4相比之前版本提供更为强大的功能,修复了一直困扰用户的多个Bug,提供更高更稳定的性能,是您部署新业务的最佳选择。

蜂巢MongoDB实例为3个节点组成的复制集,1个Primary节点,2个用户可见的Secondary节点,通过三个副本保证您数据的高可靠性。您可以通过设置Driver连接参数将业务读请求路由到Secondary节点,分摊Primary节点的读业务压力,提供更为强劲的性能表现。在MongoDB实例控制台详情Tab页,您能够一目了然得获取实例信息。

蜂巢MongoDB服务为每个实例提供一个浮动IP,该浮动IP作为MongoDB Driver的URI种子用于业务访问MongoDB服务,浮动IP始终位于Primary节点上,若Primary发生变化,则浮动IP会飘到新的Primary节点。实例除了浮动IP外,复制集节点各有一个固定IP,只有在节点重建场景下,固定IP才会被更换。

b、数据私网内安全访问

蜂巢MongoDB的浮动IP和固定IP均位于蜂巢实例所属用户的私有网络中,无法通过公网进行访问,除非连上了该用户的私有网VPN,确保MongoDB服务的安全性,让您远离黑客的骚扰。

蜂巢MongoDB提供readWriteAnyDatabase权限的账号,满足对MongoDB进行的集合进行增删改查(CRUD)、创建集合/索引等日常操作。用户只能在蜂巢MongoDB云控制台修改账号的密码。

对于最近在微信中炒得很火的关于很多国内外用户的MongoDB服务受黑客攻击并威胁交赎金的事情。在此,只想说:挂公网IP、不启用安全认证、不设置访问密码这么low的做法,作为最为专业而有态度的网易蜂巢服务,以上这些都是不可能发生的。

c、节点故障快速修复

蜂巢MongoDB提供故障自动修复能力,能够处理节点宕机、节点数据过旧、节点网络分区等各种复制集故障。

节点宕机包括mongod宕机、系统宕机、Agent宕机等。mongod宕机原因可能是mongod本身bug导致、mongod所在系统OOM导致进程被kill掉;系统宕机指的是OS宕机,导致整个复制集节点无法访问;Agent宕机指的是部署在复制集节点用于执行管理操作的Agent进程宕机或OOM导致Agent无法正常执行操作命令。在这之中,mongod宕机最容易发生。

节点数据过旧发生在Secondary节点,原因是由于opLog集合设置过小使部分oplog未应用到该Secondary节点就已经被覆盖,导致该节点无法再跟上其他节点进行复制,数据变得stale不可访问。

节点网络分区是由于复制集中不同节点将网络通信出现挂载,导致相互间或单向无法连通。该场景可能是网络设置的问题,或者是网络故障导致。在生产环境中时有发生,但在蜂巢MongoDB下,网络分区出现概率很小,蜂巢底层网络服务能够确保网络连通。

针对上述不同故障,蜂巢MongoDB服务采取不同的故障恢复方法,对于最常见的mongod宕机场景,通过重启进行修复。下图所示为Primary mongod进程宕机重启修复的场景。

其他场景,无法通过重启来解决,则直接进行重建。下图所示为Primary 系统宕机重建的场景。

总之,通过对故障节点进行重启、重建等方式进行处理,确保MongoDB复制集快速恢复到3节点均可用的正常状态。

d、全面的实例监控

蜂巢MongoDB提供了国内公有云服务最为全面和灵活的实例监控功能。复制集的每个节点均有30余种监控指标,包括系统资源、数据库资源、性能、复制集和日志等多个监控维度,相比业界其他公有云服务,蜂巢MongoDB的监控粒度更细,覆盖更全面。

您可以选择查看复制集中任一节点的监控数据,还可以选择查看您关心的某一时间段的数据,调整监控数据点的时间间隔,数据的统计指标。

更为贴心的是,用户还可以根据业务需求,自定义监控视图版面,自由组合监控指标,仅呈现对业务最为重要的监控数据。

e、数据备份和恢复

蜂巢MongoDB基于LVM snapshot进行数据物理备份,相比使用mongodump的逻辑备份方式,基于LVM的物理备份优势明显:物理备份不会因为逻辑查询导致WiredTiger Cache中的热点数据被污染、直接拷贝数据文件性能更高、数据恢复时无需进行请求重放等。

通过在创建LVM snapshot前后使用db.fsyncLock()/db.fsyncUnlock()命令,物理备份能够非常方便得获取一致性数据快照,而mongodump由于在完成数据全量备份后,还需要拷贝备份期间产生的opLog才能达到一致性备份点,如果此时有部分opLog已经被覆盖,那么就会导致本次备份失败。

为了进一步减小备份对业务的影响,蜂巢MongoDB的备份操作只允许在Secondary节点进行,默认情况下,我们会选取数据最新的Secondary节点作为备份源。

用户除了随时能够对实例进行手动备份外,还可以设置在业务低峰期对实例进行周期性地自动备份,将这一切托管给蜂巢MongoDB的备份模块。基于已有的备份,通过点击“恢复”可以快速恢复出一个新的MongoDB实例(而不是覆盖当前的MongoDB实例)。需要强调的是,蜂巢MongoDB的备份是免费的,这进一步降低了客户的使用成本。

除此之外,用户还可通过实例管理控制台修改账号密码、实例名称、自动备份参数、查看mongod运行日志和对实例进行的操作等。

蜂巢MongoDB服务由业界著名的数据库专家姜承尧负责产品和架构设计,免费提供售前技术支持。为您提供最好地MongoDB服务的同时,我们的服务价格也是业界最具竞争力的。最后,如果你的业务满足下面一个或多个特点,那么选择MongoDB是个正确的决定:

  • 无需要跨文档或跨表的事务及复杂的join查询支持

  • 敏捷迭代的业务,需求变动频繁,数据模型无法确定

  • 存储的数据格式灵活,不固定,或属于半结构化数据

  • 业务并发访问量大,需数千的QPS

  • TB级以上的海量数据存储,且数据量不断增加

  • 要求存储的数据持久化、不丢失

  • 需要99.999%的数据高可用性

  • 需要大量的地理位置查询、文本查询

网易云计算基础服务深度整合了 IaaS、PaaS 及容器技术,提供弹性计算、DevOps 工具链及微服务基础设施等服务,帮助企业解决 IT、架构及运维等问题,使企业更聚焦于业务,是新一代的云计算平台,点击可免费试用

网易云免费体验馆,0成本体验20+款云产品!

更多网易技术、产品、运营经验分享请点击

相关文章:
【推荐】 深入解析 SQL Server 高可用镜像实现原理
【推荐】 遭遇各种内容监管,有些企业到底欠缺的是什么,仅仅是价值观吗?
【推荐】 关于网易易盾的加固保护

网易蜂巢(云计算基础服务)MongoDB服务重磅来袭的更多相关文章

  1. 网易蜂巢微服务架构:用RabbitMQ实现轻量级通信

    本次分享内容由三个部分组成: 微服务架构与MQ RabbitMQ场景分析与优化 RabbitMQ在网易蜂巢中的应用和案例分享 1微服务架构与MQ 微服务架构是一种架构模式,它将单体应用划分成一组微小的 ...

  2. 云计算服务模型,第 1 部分: 基础架构即服务(IaaS)

    英文原文:Cloud computing service models, Part 1: Infrastructure as a Service 本文介绍三个云类别中的第一个:基础架构即服务(infr ...

  3. 初识云计算的三种服务模式 (IaaS SaaS PaaS)

    近期公司在使用其它云服务的同一时候.要封装自己的云服务,以下作为开发产品前的热身.来了解云计算中的三种服务模式,笔者也是从网络上查找,进行综合总结.请拍.. 三种服务模式 依据如今最经常使用.也就是比 ...

  4. IaaS、PaaS、SaaS是云计算的三种服务模式

    IaaS.PaaS.SaaS是云计算的三种服务模式 1. SaaS:Software-as-a-Service(软件即服务)提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设备 ...

  5. 将MongoDB服务加入随机启动

    将MongoDB服务加入随机启动 vi /etc/rc.local 使用vi编辑器打开配置文件,并在其中加入下面一行代码 /usr/local/mongodb/bin/mongod -dbpath=/ ...

  6. 配置mongoDB服务

    上一节说到mongoDB的环境搭建,但是那种方法启动mongoDB太繁琐了. 今天先说说简化mongoDB启动的配置. 首先在命令行中运行的”C:\Program Files\MongoDB 2.6  ...

  7. Linux下MongoDB服务安装

    Linux下MongoDB服务安装 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB是一个介于关系数据库和非关系数据 ...

  8. J2EE基础之Web服务简介

    J2EE基础之Web服务简介 1.什么是Web服务? 在人们的日常生活中,经常会查询网页上某城市的天气信息,这些信息都是动态的.实时的,它是专业的气象站提供的一种服务.例如,在网上购物时,通常采用网上 ...

  9. MongoDB服务重启及后台运行解决方法

    1 在MongoDB 安装目录下 新建一个test文件夹 mkdir /test 2 切换到MongoDB的安装目录(可通过 find -name 'mongod'命令查找安装目录)下 执行: bin ...

随机推荐

  1. C# step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型

    C# 2012 step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型 本章内容 声明一个枚举类型 创建并使用一个枚举类型 声明一个结构类型 创建并使用一个结构类型 解释结 ...

  2. AnimalWindow使用,实现界面动态消失

    http://m.blog.csdn.net/blog/shufac/24932279 http://blog.sina.com.cn/s/blog_455245fc01000a42.html Ani ...

  3. Effective C++ 条款六 若不想使用编译器自动生成的函数,就该明确拒绝

    class HomeForSale //防止别人拷贝方法一:将相应的成员函数声明为private并且不予实现 { public: private: HomeForSale(const HomeForS ...

  4. 这个捕鱼游戏制作的真心不错,原创音乐,AV动作,让人流连忘返啊呵呵

     女生看完这篇文章后果断地命令男朋友打开电脑和手机 2014-10-10 茶娱饭后 本人纯屌丝宅男一名.专注游戏十年有余,玩过无数大大小小的游戏,对捕鱼游戏情有独钟.我不想说在捕鱼游戏方面有多专业 ...

  5. vs2010配置VL_FEAT库

    VL_FEAT库是计算机视觉中的一个开源库,支持C/C++,Matlab,可以在http://www.vlfeat.org/下载. 本文主要讲一下VS2010中如何配置vl_feat库(算是对原文的一 ...

  6. Ubuntuserver版安装

          近期因为工作的须要.又一次部署server.安装了Ubuntuserver版本号,依据当时遇到的一些问题,整理了下,为方便以后的使用做个记录.       因为直接安装server端.无法 ...

  7. object-c iOS 教程 git for mac

    本文转载至 http://blog.csdn.net/u011728347/article/details/10035191   http://rypress.com/tutorials/object ...

  8. MapReduce算法形式六:只有Map独自作战

    案例六:Map独自直接输出 之前一直没有用过这个map独自输出的模式,就算是输出一些简单的我也会经过一次reduce输出,但是,发现这个map输出的结果跟我预想的有点不一样,我一直以为shuffle的 ...

  9. Lambda 闭包 匿名 函数 类

    深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法) - _Luc_ - 博客园 https://www.cnblogs.com/figure9/p/java-8 ...

  10. .Net之路(十四)com组件、OLEDB导入EXCEL

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/chenfanglincfl/article/details/30546777 .NET com组件 ...