网易蜂巢(云计算基础服务)MongoDB服务重磅来袭
此文已由作者温正湖授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
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服务重磅来袭的更多相关文章
- 网易蜂巢微服务架构:用RabbitMQ实现轻量级通信
本次分享内容由三个部分组成: 微服务架构与MQ RabbitMQ场景分析与优化 RabbitMQ在网易蜂巢中的应用和案例分享 1微服务架构与MQ 微服务架构是一种架构模式,它将单体应用划分成一组微小的 ...
- 云计算服务模型,第 1 部分: 基础架构即服务(IaaS)
英文原文:Cloud computing service models, Part 1: Infrastructure as a Service 本文介绍三个云类别中的第一个:基础架构即服务(infr ...
- 初识云计算的三种服务模式 (IaaS SaaS PaaS)
近期公司在使用其它云服务的同一时候.要封装自己的云服务,以下作为开发产品前的热身.来了解云计算中的三种服务模式,笔者也是从网络上查找,进行综合总结.请拍.. 三种服务模式 依据如今最经常使用.也就是比 ...
- IaaS、PaaS、SaaS是云计算的三种服务模式
IaaS.PaaS.SaaS是云计算的三种服务模式 1. SaaS:Software-as-a-Service(软件即服务)提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设备 ...
- 将MongoDB服务加入随机启动
将MongoDB服务加入随机启动 vi /etc/rc.local 使用vi编辑器打开配置文件,并在其中加入下面一行代码 /usr/local/mongodb/bin/mongod -dbpath=/ ...
- 配置mongoDB服务
上一节说到mongoDB的环境搭建,但是那种方法启动mongoDB太繁琐了. 今天先说说简化mongoDB启动的配置. 首先在命令行中运行的”C:\Program Files\MongoDB 2.6 ...
- Linux下MongoDB服务安装
Linux下MongoDB服务安装 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB是一个介于关系数据库和非关系数据 ...
- J2EE基础之Web服务简介
J2EE基础之Web服务简介 1.什么是Web服务? 在人们的日常生活中,经常会查询网页上某城市的天气信息,这些信息都是动态的.实时的,它是专业的气象站提供的一种服务.例如,在网上购物时,通常采用网上 ...
- MongoDB服务重启及后台运行解决方法
1 在MongoDB 安装目录下 新建一个test文件夹 mkdir /test 2 切换到MongoDB的安装目录(可通过 find -name 'mongod'命令查找安装目录)下 执行: bin ...
随机推荐
- iOS开发 清除电话号码中的其他符号
最近从通讯录读取电话号码,读出得号码如:134-1814-****. 而我需要的为11位纯数字,一直找方法解决此问题,今天终于找到了.. 分享一下…… 代码如下: NSString *original ...
- 【c++】面向对象程序设计之虚函数详解
一.动态绑定什么时候发生 当且仅当通过指针或引用调用虚函数时,才会在运行时解析该调用 二.派生类中的虚函数 当我们在派生类中覆盖了某个虚函数时,可以再一次使用virtual指出该函数的性质,但是这么做 ...
- 跟着实例学习设计模式(7)-原型模式prototype(创建型)
原型模式是创建型模式. 设计意图:用原型实例指定创建对象的类型,并通过拷贝这个原型来创建新的对象. 我们使用构建简历的样例的类图来说明原型模式. 类图: 原型模式主要用于对象的复制.它的核心是就是类图 ...
- Indri和Terrier搜索引擎的使用
介绍 Indri和Terrier都是开源的搜索引擎,当中Indri作为Lemur项目的一个重要部分,具有强大的查询接口,易建索引,可扩展,高效率等长处.能够在SourceForge Lemur Pro ...
- SVN系列之—-SVN版本回滚的办法
例:SVN版本为:TortoiseSVN 1.9.7 一.SVN简介 subversion(简称svn)是一种跨平台的集中式版本控制工具,支持linux和windows. 版本控制解决了:*代码管理混 ...
- UVA 11246 - K-Multiple Free set(数论推理)
UVA 11246 - K-Multiple Free set 题目链接 题意:一个{1..n}的集合.求一个子集合.使得元素个数最多,而且不存在有两个元素x1 * k = x2,求出最多的元素个数是 ...
- tomcat 实现域名crm.test.com訪问
**tomcat 上下文.实现的效果.是在浏览器输入ip或者域名能直接訪问.不用输入项目project名字 正常初始化都是http://10.243.12.34:8080/plcrm.要变成 crm. ...
- flask-本地线程-请求上下文补充
context(上下文)是flask里面非常好的设计,使用flask需要非常理解应用上下文和请求上下文这两个概念 本地线程 本地线程(thread local)希望不同的线程对于内容的修改只在线程内部 ...
- (转)C中的volatile用法
volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进 ...
- openwrt gstreamer实例学习笔记(五. gstreamer BUS)
1)概述 BUS(总线) 是一个简单的系统,它采用自己的线程机制将一个管道线程的消息分发到一个应用程序当中.总线的优势是:当使用GStreamer的时候,应用程序不需要线程识别,即便GStreamer ...