基于 MongoDB 的分布式数据库架构 Sharding

Posted twt企业IT社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于 MongoDB 的分布式数据库架构 Sharding相关的知识,希望对你有一定的参考价值。

1. 背景

随着大数据时代的到来,数据的收集存储能力得到了大幅度。与此同时,企业数据库系统的存储压力和运算压力也越发严峻。在传统的RDBMS时代,针对这个问题,大多会进行纵向扩容,比如说购买存储、机器升级等。但这种方案很多时候不仅造成资源和时间的浪费,而且在海量数据的碰撞下仅是杯水车薪。而增加机器资源纵向扩容,横向扩容或者说分布式架构,更能支撑大数据时代的存储和算例要求。

本文主要介绍一种基于MongoDB的分布式数据库架构(Sharding)。MongoDB Sharding是官方原生的分布式方案,它可以满足数据量快速增长下的无缝扩容,也可以存储多样化非结构数据,是互联网时代下一种成熟可靠的架构。


2. Sharding架构介绍

1、MongoDB Sharding是MongoDB数据库一种水平扩展的分布式架构。由shards(存取数据,计算),config server(数据元信息、控制节点),mongos(路由,分发请求和汇聚结果)三个组件构成。


2、MongoDB Sharding架构通过添加shards节点可以平滑水平扩展,以解决单机存储、IO、计算资源不足的问题。此外可以和hadoop生态进行对接,对大数据进行处理。其本身的replica set是基于raft协议的高可用架构,无论升级还是单机器宕机,皆可稳定提供服务。


3. 成功案例

· 奇虎360 2015年

  • 就用户基数而言,中国前三的互联网公司

  • 中国最大的基于安卓的移动发布平台

  • 中国最大的互联网及移动病毒软件防护产品及服务提供商

业务与应用: 基于位置的移动搜索应用,用户认证数据的缓存层,日志分析平台等

问题:用户基数大,数据量大。存数需要快速扩容,IO也需要相对均匀分布,避免热点问题。

方案效果:目前支撑100多个应用,1,500多个实例,每天200亿次查询。中国最大的MongoDB集群之一。

· 东方航空 2016年

  • 中国三大航空公司之一

  • 年旅客运输量超过1亿人次,位列全球第七

  • 航线网络通达全球177个国家、1062个目的地

业务与应用: 新一代旅客服务系统

问题: 由于客户个性化的航班查询需求出现,一次前端搜索,所带来的后端的库存和运价搜索复杂度是原来的几十倍或者上百倍。因此,该项目对系统的性能要求很高。

方案效果:系统支持了旅客的查询量每日600万次+,转换成数据库的查询量每日4500万次+。数据库数据总计720亿条,每日更新次数2600万次+,99%以上查询效率低于200ms。

· 汇丰银行 2017年

  • 全球最大的银行及金融服务机构之一

  • 遍布在67个国家,约有3900个分支机构

业务与应用: 运营数据管理

问题:迭代速度要求越来越快。数据格式复杂,来自不同数据源。需要弹性扩展,对SLA要求高。

方案效果: MongoDB的schema-less特性支持了汇丰微服务的架构,可快速迭代。数据库分布式集群宕机可自动恢复,不影响服务,提供给全球用户。


4.现有问题与解决方案

  • 数据量日益增大

问题:现代企业系统每日生产的数据量越发庞大,传统的单机大容量已无法支持。而专业级存储在海量的数据下,成本也相对高昂。

解决方案:MongoDB的Sharding架构,可以直接基于x86服务器进行横向扩容。每次需要扩容时,额外增加2至3台同配置的服务器,即可简单完成扩容操作。其中1台是扩容用的服务器,另外一或两台做冗余和高可用,故只增加一台硬盘大小的容量。

  • 系统高可用要求

问题:由于软件或者硬件问题,任何IT系统中某一节点的宕机无可避免,若业务中断,往往会带来较大的损失。因此更看重系统的高可用,自动恢复时间,系统整体运行率等参数。

  • 在线扩容

问题:许多IT系统在扩容时,往往需要暂停相关服务,进行配置修改和数据的迁移,但是很多业务不允许那么长的停机时间。

解决方案:MongoDB的Sharding架构由于是官方原生的架构,所以扩容时,只需要准备好服务器,安装MongoDB服务,在原来的节点上输入添加的命令即可完成整个扩容操作。整个过程无需停机,没有繁琐的配置修改和数据迁移步骤。

  • 单机IO/CPU发生瓶颈

问题:在高并发的场景下,数据库的IO和CPU的压力会集中在单台服务器上,拖慢整个系统的速度。而由于物理设备的限制,IO和CPU性能会存在瓶颈,无法提供满意的服务。

解决方案:MongoDB的分布式架构,在合理的片键选择和应用的代码下,可以有效的将IO和CPU分散至每个节点上,以此增加总体的性能。

  • 与大数据对接

问题:越来越多的系统引入了如Hadoop之类的大数据解决方案,但是每次从数据库抽取数据到HDFS中也需要耗费不少的代价和成本。

解决方案:MongoDB官方提供了hadoop、spark等连接件。通过该连接件,spark等可以直接将mongodb当hdfs使用,避免了资源的浪费,提高了整个系统的使用率。


5.项目实施的价值

1.企业价值

  • 基于开源,成本较低

    整套架构使用开源软件,避免相关授权等费用。有人才储备的企业,也可以自行研读源码,进行定制化修改。

  • 方案成熟

    本方案所有组件都由官方原生提供,已在各行业的生产环境中使用多年,是一个可靠成熟的架构。

  • 可靠性高

    方案中已包含高可用设计,发生异常后可以在极短时间内恢复服务

  • 专业服务团队

    很多开源软件解决方案没有官方支持,在遇到问题后容易束手无策。本方案除了使用开源软件外,可以向官方采购企业版,官方提供相关的售后支持。

  • 对接大数据灵活

    原生可以对接多种大数据处理系统,可以方便的和其他系统对接。

  • 易建多活

    Sharding中有zone的特性,此特性易于进行地区划分等多活架构设计。

2.IT人员价值

  • 扩容便捷

    shard节点的的横向扩容可以在线进行,不用额外的配置修改。数据rebalance自动进行,无需人工干预,可以快速响应业务的需求。

  • 开发效率提升

    整个mongodb是schema-less的设计,应用开发和迭代时,可以较少考虑schema带来的限制,提高开发效率。此外,本分布式架构对应用是透明的,应用只需要完成业务逻辑,存储时无需考虑具体数据的分布。

  • 掌握最成熟的非关系型数据库技术

    MongoDB在各大排行中,是全球排名第一的NoSQL数据库,遥遥领先于其他各类NoSQL数据库,是一个值得去学习和掌握的非关系型数据库技术。

  • 生态活跃

    MongoDB在全世界有着众多的社区,可以在大多数社区网站上进行问题讨论与研究。有相当多的资料可以在网上阅读,积累相关经验。


6.风险控制

在进行实施一个新的架构前,风控评估和控制是必不可少的。本章节将会梳理常见的问题,发生的条件和解决方案。

1.性能风险(shardkey)

风险点:由于选择了错误了shard key,性能降低明显,数据和IO分布不均

解决方案:mongodb sharding的shard key好比分区表的分区条件,当常见查询中未包含分区条件,那么将会在所有的shard中进行查询,极大的增加查询代价,降低效率。而且不合适的shard key会导致数据和IO分布不均匀,导致热点问题。所以需要在表设计之初,就考虑好以后常见的查询条件并选择合适的shard key。此外,shard key一旦建立就不可修改。如果要修改,只能新建一个新的集合,重新导出导入。期间,该表的相关业务会中断。

2.运维风险

风险点:当集群过大时,备份等操作难以进行

解决方案:建议控制shards在10个以内,可以按也许将shards拆分成多套,避免所有业务共用一套sharding。

3.技术风险

风险点:本方案将对较新,有一定概率遇到未知问题。

解决方案:优先使用最新的稳定版本或者上一个大版本最新的稳定版本。每次部署和升级时,做好充分的测试,避免因为各类问题导致的异常(如驱动和数据库版本不一致,加密方式不一致等)。购买官方的企业版,得到专业的售后服务。

4.项目风险

风险点:老业务从原有架构迁移至MongoDB时。需要修改部分逻辑、数据同步等,导致项目延期。

解决方案:建议技术团队先将新项目在MongoDB上部署,熟悉相关的开发技术和运维技术,然后再进行老数据迁移。老数据迁移阶段,可以将应用程序进行双写,或者使用kettle或者自行开发程序进行新老架构的数据同步。


7.成本管理

本章节将介绍实施该项目所需要的软件成本、硬件成本和人员成本

1.软件成本

操作系统可以使用开源免费的Linux发行版,MongoDB数据库可以使用社区版。整体无软件成本,但可根据企业需求,购买相应的企业版。

2.硬件成本

一套基础mongodb sharding一般由3台mongos,3台config server和9台shards组成。

mongos和config server配置和一般应用服务器一样即可。

shards服务器建议最低CPU 32线程,内存64G,全SSD硬盘 1T,raid 10,具体报价请咨询硬件供应商。

3.人员成本

MongoDB的应用开发语言非常直接明了,开发人员无需更多精力去学习,可以快速上手。由于MongoDB无模式的设计,反而可以降低开发的人力成本。

运维方面,只需要投入相关的DBA人力即可。

4.成本优化

由于软件成本和额外人力成本几乎没有,在此介绍如何节约硬件成本。

mongos:本身无状态,也可以复用,或者通过虚拟化或者docker方式部署,或者和应用部署在同一台服务器。

config server:config server资源占用较少,可以在服务器上部署多套,不同的shard集群使用同批服务器部署config server,CPU和内存需求较少,硬盘可直接使用机械盘。

shards:shards自身的replication可以采用一主一从一仲裁的架构,仲裁的服务器可以复用,并且仲裁本身不占用计算和存储资源。简单理解为一主两从简洁至一主一从。本方法保留了高可用功能,只是当某主节点宕机后可能有长时间单点风险。


8.技术选型

本方案是MongoDB唯一的官方支持的分布式方案,无需再进行其他的方案比较。



相关资料,欢迎阅读下载:

  • Linux下mongoDB安装及配置

    http://www.talkwithtrend.com/Document/detail/tid/414289

  • mongoDB在windows下的安装配置

    http://www.talkwithtrend.com/Document/detail/tid/414915

  • MongoDB入门培训

    http://www.talkwithtrend.com/Document/detail/tid/414373

  • MongoDB数据库容灾与监控

    http://www.talkwithtrend.com/Document/detail/tid/414377

  • 《MongoDB大数据处理权威指南》

    http://www.talkwithtrend.com/Document/detail/tid/284227


更多相关内容,请点击阅读原文


以上是关于基于 MongoDB 的分布式数据库架构 Sharding的主要内容,如果未能解决你的问题,请参考以下文章

java架构之数据库MongoDB4.0入门到实践掌握NoSQL数据库企业主流解决方案

1 Mongodb安装

Docker——基于Docker搭建MongoDB分片集群

数据库评测报告MongoDB-3.2

58同城高级系统架构师带你实战MongoDB集群分布式存储

Mongodb集群架构之分片架构