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

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

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. awk批量处理文件,对第一列去重并,累加第二列数值,打印一二列存入新文件

    awk '{if(NR>1)a[$1]+=$2}END{for(i in a)printf "%s\t %d\n",i,a[i]}' querylog* > total ...

  2. 卸载 linux http

    当我们想卸载httpd 的时候,使用rpm -qa httpd 的时候,我们发现有很多的依赖包.我们耐心的想一个一个的卸载的时候(使用rpm -e httpd-*),还会进入死循环.解决的办法是:使用 ...

  3. FLEX接收外部参数 .

    FLEX参数传递与FLASH有点不同 login..swf?name=aa&password=bb Flex上是这样接收参数的 myname=mx.core.Application.appli ...

  4. 网络请求--Retrofit2用法

    欢迎Follow我的GitHub, 关注我的CSDN. Retrofit是Square开发的网络请求库, 简化了网络请求的使用, 这个库太知名了, 优点我就不多说了. 让我们看看怎样使用吧? 注意: ...

  5. BIOS维修技术

    BIOS是电脑中最基础且最重要的程序,为电脑提供最低级且最直接的硬件控制,电脑的原始操作都是依照固化在BIOS里的程序来完成的.因此如果BIOS出现故障将会导致影响电脑的正常工作.BIOS故障有很多, ...

  6. 数组index

    1. 数组index与数组名的位置关系     a[b] = *(a + b) = *(b + a) = b[a] int a[5] = {1, 2, 3, 4, 5}; printf("% ...

  7. JfreeChart折线图 CSDN-李鹏飞

    今天公司里分配给我的工作是JfreeChart折线图本人之前也没接触过如今让我们大家一起完毕! 在这个公司,用到了太多的JfreeChart,今天就对折线图作一个总结,希望对大家有点帮助,我这里直接是 ...

  8. 常用DOS下MSC指令

    xp:copy C:\WINDOWS\repair\*.* 到 c:\windows\system32\config 2k: copy C:\winnt\repair\*.* 到 c:\winnt\s ...

  9. Ajax的简单实现(Json)

    之前写的是一般的Ajax if (request.status === 200) { document.getElementById("createResult").innerHT ...

  10. CocoaPods初体验

    之前没用过cocoapods,但是新项目需要用到. 安装cocoapods: 按照官方的: $ sudo gem install cocoapods    // 但是什么都没有发生 升级gem $ s ...