基于MongoDB的高并发高可用政府云平台架构实践

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 3月12日下午在阿里巴巴西溪园区,举行了MongoDB杭州用户交流会。微软MSDN特邀讲师徐雷分享《基于MongoDB的政府云平台高并发高可用HA架构实践 》,从自身实践出发,讲述了政府云平台分层、技术栈选型、物理架构、API架构及DB数据库架构的设计思路和方法。

3月12日下午在阿里巴巴西溪园区,举行了MongoDB杭州用户交流会。微软MSDN特邀讲师徐雷分享《基于MongoDB的政府云平台高并发高可用HA架构实践 》,从自身实践出发,讲述了政府云平台分层、技术栈选型、物理架构、API架构及DB数据库架构的设计思路和方法。

 

以下内容根据现场分享和演讲PPT整理而成。

 

学习MongoDB的重要性


目前,几乎所有国内外的互联网大公司都在用MongoDB,学习企业需要的技术很重要。

 

MongoDB优点

0b19849b0030114736bab3622bd4bad984185bd9

 

相比较关系型数据库而言,MongDB有两个明显的优点:灵活的数据模型和便于横向扩展。


灵活的数据模型:作为一位网站开发者,最痛苦的就是需求变更,MongDB可以接受字段的不断修改,非常灵活。


便于横向扩展: 如果有海量数据存储,这时可以做Sharding,非常容易,这个是MongDB本身已经支持的。传统的关系型数据库在这一块比较难实现,因为它会由很多固有的设计缺陷导致。但传统关系型数据库的分片思想和MongDB分片思想其实很像,从算法的角度来说,没有太大区别,比如基于范围进行分片,这两个是通用的。


高并发与高可用架构关键点


程序员一般追求高并发,对于高并发这个关键词容易产生兴奋点。作为架构师设计一个架构,如果要支持某个级别的并发,一定要注意:不是用Redis就是高并发,不是用MongDB就是高并发。高并发高可用架构关键点包含:多线程、分布式通信RPC、集群、负载均衡、网络与硬件、监控与诊断等。比如Java有多线程、高并发的问题,如果涉及到分布式通信RPC 、分布式架构的话,一定会有一些RPC的技术,会有线程通信、进程间的通信出现,这些在不同框架中都有对应的实现。架构师在设计架构时,需要深入研究。

 

集群:是不是一定要用集群?不一定。一般小规模公司才用3-5台服务器,大规模公司用128G、256G、甚至2T的服务器内存,连数据和索引都进服务器。MongDB在数据量非常大的时候,比如你有16G内存,发现它很慢,有一个很重要的问题,稍微研究下底层的算法,会发现MongDB在使用索引结构进行数据查询的时候,它需要对索引进行遍历,如果能整体进内存最好,如果不能整体进内存,它就部分加载,这样的话就更慢,因为涉及到一个磁盘内存问题。

 

负载均衡:假设用了集群,比如有10台web服务器,需要做负载均衡,可以用业内比较成熟的实现方案,比如阿里云、微软云、亚马逊云,直接配置就可以用。如果要构建私有云,或者数据中心的话,需要想一些负载均衡的方案。比如业内比较流行的,软负载均衡,反向代理负载均衡。

 

网络和硬件:这也是高并发的前提。比如10w并发,平均一个消息多大,估算一下网络流量,不要说不管带宽是5M,还是10M,就要10w并发,这需要看硬件的服务器配置,所有的高并发一定是个完整的体系,不是说在某个点上,写段代码就高并发了。所以现在看到的高并发系统,一定是经过无数次的迭代。

 

监控与维护:这是运维最头疼的。因为运维每天晚上需要远程登录看机器正常不正常,影响正常休息,所以现在也提出了自动化运维概念。

 

政府云平台背景


 f4b85191dca286d6b1513a0cdd10523c8041cc28


政府也需要进行转变,他们希望把整个政府平台信息化,构建统一高效的政府云平台。比如税务的信息化、公务人员考核的效率化等。

 

基于前面说到的,设计的架构一定要微观上+宏观上高并发,不能说了搭了几层就是高并发架构,首先要看写的代码,如果在后台就产生了大量问题,大量bug,怎么能够高并发,从前端到后台是一条链,任何一个节点出问题,都会影响整个系统架构。

 

政府云平台分层架构图


e7d9d7d433726f7f69f7c3e948b56aff6835cee8

 

从上图显示,这个架构系统不是只有关系型数据库,或者NoSQL数据库。因为这个场景是比较特殊的。对于政府官员考核的指标比较多,每个指标量化单位不一样,考核数据模型是会变化的,会导致数据的不确定性。这个时候比较适合用NoSQL,如果用传统关系型数据库的话,开发就需要天天改数据层的表。

 

参考上图,我们做的技术并不仅仅是一种技术,需要考虑传统PC端,也要考虑移动端的问题。这里作为服务治理层,或者服务层,这里服务治理层不仅是服务层,因为希望对服务做一个统一的规划和安排。另外希望后期加一些自动化运维和监控的知识,包括现在比较新的微服务的概念,这是设计的思路。

 

协议的话,也没有固定只用http这一个,也没有只用soap协议。可能大家会说因为你对 SOA 架构比较熟,但其实今天所有的系统架构,这个叫SOA的概念已经存在。不是说用哪个框架,就一定能解决问题,不推荐这种方式。如果涉及到移动端,可能会用到MQTT协议,如果是页面应用的话,可能会用到最新的web socket。

 

业务逻辑层上,分层不是越多越好,而是根据需要分层,分完层之后是否方便后期扩展。比如业务逻辑层,Java和.NET里面都有分层的思想,这个部分把业务逻辑独立出来,不影响其它层。需要注意一下,这里用到Redis,前面讲过高并发的系统应用,Redis我们推荐。如果公司有能力开发一套缓存系统可以开发,比如阿里巴巴的RocketMQ消息队列,如果开发不了,就用开源成熟的产品。Redis目前是最流行的开源的免费缓存,它属于NoSQL的范畴,这两个结合和MongDB不冲突。MongDB能够解决10000个并发,一般公司够用。如果遇到峰值的时候,可以用兔子消息队列,让其帮助从中加一层,来缓解数据库压力。缓存技术除了加速以外,还可以充当请求缓存池,用于处理一些不太着急的请求。

 

再说一个问题,这里不论是Java和.NET,连接数据库的技术都是差不多的,都有连接池,都有多线程,而且垃圾回收的机制也差不多。同样如果想对传统型关系数据库或者NoSQL数据库做研究的话,可以看下NoSQL并发有很重要的问题,传统关系型数据库是不强调事务的,但是传统的NoSQL数据库,从诞生之初开始,高并发是它很重要的一个特点。目前NoSQL也开始支持事务,但是部分事务,不完整。关于MongDB有很多坑,因为它有几个存储引擎,这个有点像MySQL,MySQL也有几个开源的存储引擎,每个存储引擎都不一样,要用这个数据库的话,需要注意使用版本、存储引擎,需要在官方文档上确认一下。

 

政府云平台技术栈选型

 

a409009b4675eb843331954b5c2afed6ce6379fb


Java底层和.NET底层原理是相通的,数据结构的算法基本上一样。但为什么有些是Java做的,有些是.NET做的,这里面我们会用到。反向代理考虑到尽量是免费的,节省成本。涉及到一些日志框架,建议用最成熟的框架,这里没有平台或者语言系统的偏见。用Docker方便运维。

 

政府云平台SOA架构设计

 

e3f61924d584e8f5410adf03843d39cbb7ac62ee


现在有手机定位,自动驾驶,政府也在考虑这些问题。比如政府希望看到各省县长的履历,进行优先提拔;比如要防控房地产的问题,房价波动厉害,需要了解房地产的交易资金,房地产大数据等,任何一个指标政府都希望能看到。SOA叫做面向服务的架构,是基于服务来集成现成的系统,这个架构没有过时。

 

政府云平台新SOA架构:ESB+微服务


00dfc1a205a6048a71725584aa2553fadcec83b4

 

这些架构如果开始做的话,两个系统直接服务集成,后面更复杂的问题来了,像阿里巴巴自己做了一个服务框架叫Dubbo,它里面有服务治理的事项,也有微服务的特点。作为一名技术人员,一定要注意它的试用场景,如果没有这些框架,能不能做个类似的功能?

 

这里面涉及到一个问题,如果后期系统特别多,最好有一个中间件平台的概念出来。这样在服务治理的过程中,可以更好的规划系统架构,而不是所有系统之间随便连接。随便连接的后果是,后期所有系统接口都是乱的,系统越多,乱的越厉害。比如早期是webservice,有可能后期改成TTP,或者改成HTTP等等一些新型的协议。

 

另外,这还涉及到高并发高可用的问题。网站选一个高并发的框架,在网站上要求1w个并发,一台服务器支持1w/秒的并发,接下来你想要10w的,一定要想办法进行横向扩展,当然如果企业特别有钱,可以把服务器换成1T的内存。还有一个高可用指标,比如每秒是1w个并发,更新一下直接挂掉,这是不行的。

 

省级单位政府云平台物理架构


d66b6415b5e924b151b5fb771d5211a8631bc39c

 

物理架构和逻辑架构不同,逻辑架构可以分10层、100层都可以,但不是分层越多越好。分层越多,解耦越厉害,越影响性能。很多人不管设计什么架构,先分个三层,不管需不需要,直接把接口用webservice包容。这里一定要根据需要做判断。

 

MongDB做集群,做高可用。首先,保证物理安全,服务器不要坏掉;然后,MongDB可以支持数据直接加密,金融数据不安全的话,数据永久加密。MongDB3.4版本之后加了金融的数据类型。

 

MongDB可以做可复制性集群,这里可以一对多,但是有个问题,它可以实现自动化过程转移,如果说数据访问层开发的比较好的话,使用了较新的驱动,无论是Java还是C sharp ,它可以自动化来切换。在这个集群中,它自动会找一台新的节点出现,来替代主节点。这是相对于传统数据库MongDB做的好的地方。作为运维只要把web关系层配好,就不用担心哪台服务器在服务,直接可以自动化切换,图片服务器和缓存服务器,也不是所有的数据都进缓存,有部分数据为了缓解压力,把用户资料的数据可以放到缓存里,这样可以从缓存里拉所有数据。

 

负载均衡的话,用硬件软件都可以,负载均衡如果只用一台服务器,风险较高。CDN从单数据中心扩展到多数据中心也可以,一般公司还用不到多个数据中心。

 

政府云平台服务治理API架构设计

 

所有系统上线之后,不是简单的开发和发布,后期系统需要跟其它平台进行对接,会有一个服务组件的中间件平台,可以用开源的,也可以用商用的,比如Oracle、SAP、微软、阿里巴巴的中间件平台。中间集成可能会有不同的协议,这里面会涉及到很多问题,Redis后面可能会换成消息队列,比如一个5年考核指标,一个月内的数据量比较大,这个时候数据库肯定要持久化,有些内容放到MongDB,有些会放到传统的关系型数据库里面,需要提前做一些预测。再注意一个问题:这里的数据web层和访问层,全部都是集群。Redis也是支持集群。

 

系统上线之后,要看哪些系统出现异常了,什么样的异常是需要马上解决的,这里面涉及到服务监控的问题,需要配合专门的运维工程师制定一些规则。

 

另外,缓存在UI层就有了,API这层也可以有缓存,不是所有的东西放到Redis里面才叫缓存,Redis属于分布式缓存,有些数据可以放到数据持久层,比如关系型数据库,MongDB也有,服务器只要配置够高,数据直接进数据持久层缓存或者数据访问层缓存也可以。如果单独加一层缓存也可以。像中间件平台也有独立的缓存,API层也有。从架构角度来说,要想下缓存放在哪层比较合适,相应的硬件配置要跟的上。当然,越接近客户端的缓存,效率越高,因为它的物理位置更接近客户端请求。如果放在最下面,说白了中间要经过很多层才能到数据这一块。

 

省级单位政府云平台DB数据库架构

 

政府系统,首先物理上保持隔离,再保证安全。要注意的是,峰值出现的时候,需要加一层缓存或者消息队列。

 

政府系统的数据量规模是有限的。小规模系统可以用可复制集群,保证数据库节点的自动化灾备转化就可以了,这样的好处是:首先,读写分离把压力分担了;另外,如果出问题,可以自动化灾备、自动化切换,避免手动修复,或者宕机带来的一些问题。

 

缓存数据服务器最好用两台。比如支付宝,新浪微博做的比较成功,大量数据放在缓存里。缓存也有读写分离。一些互联网公司的测试数据显示,Redis的并发能达到每秒11w,所以它很适合做数据持久层的这一套缓存机制,无论是传统关系型数据库,还是MongDB,用普通的SSHD,每秒只有1w写入量的话,可以把数据先写入Redis,这个并发高,基本上10w的并发,能够满足绝大多数互联网公司的需求,如果还不行,可以写入的数据量少一点,再做读写分离。

 

政府云平台架构设计考量

 

05f8a9ac3a0b4d74583fa1b51c24e0785d39f5f2


推荐阅读

《MongoDB实战》

《jQuery 实战》


cd502058f8ddd1f6eb058dab7bed7184870afbf5

 

相关实践学习
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
目录
打赏
0
0
0
1
1798
分享
相关文章
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
本文探讨了如何通过技术手段混合使用AMD与NVIDIA GPU集群以支持PyTorch分布式训练。面对CUDA与ROCm框架互操作性不足的问题,文章提出利用UCC和UCX等统一通信框架实现高效数据传输,并在异构Kubernetes集群中部署任务。通过解决轻度与强度异构环境下的挑战,如计算能力不平衡、内存容量差异及通信性能优化,文章展示了如何无需重构代码即可充分利用异构硬件资源。尽管存在RDMA验证不足、通信性能次优等局限性,但该方案为最大化GPU资源利用率、降低供应商锁定提供了可行路径。源代码已公开,供读者参考实践。
44 3
融合AMD与NVIDIA GPU集群的MLOps:异构计算环境中的分布式训练架构实践
2025年国内工单系统推荐:技术架构、场景适配与行业实践
分析了智能化升级、大数据驱动、云原生架构及全渠道融合四大技术趋势,从功能适配性、易用性、集成能力、安全性和性价比五个维度指导企业选型,并推荐合力亿捷等三家系统的优劣对比,结合电商和制造行业的实际案例,帮助企业提升客户服务水平与竞争力。
78 11
2025年国内工单系统推荐:技术架构、场景适配与行业实践
基于阿里云的开源应用智能管理架构设计与工程实践
本文以Websoft9技术方案为例,探讨企业级应用管理的范式。通过解析开源应用管理面临的部署复杂性、运维低效性和知识碎片化三大挑战,提出基于阿里云的三层架构:智能应用管理门户、核心功能层和基础设施层。文章详细阐述了应用编排标准化(IaC实践)、智能运维体系构建及知识资产数字化的技术实现路径,并结合金融与制造行业的案例,展示解决方案的实际效果。最后提供开发者资源与工具链支持,助力企业高效管理应用。
99 1
支持百万人超大群聊的Web端IM架构设计与实践
本文将回顾实现一个支持百万人超大群聊的Web端IM架构时遇到的技术挑战和解决思路,内容包括:通信方案选型、消息存储、消息有序性、消息可靠性、未读数统计。希望能带给你启发。
37 0
支持百万人超大群聊的Web端IM架构设计与实践
领先AI企业经验谈:探究AI分布式推理网络架构实践
当前,AI行业正处于快速发展的关键时期。继DeepSeek大放异彩之后,又一款备受瞩目的AI智能体产品Manus横空出世。Manus具备独立思考、规划和执行复杂任务的能力,其多智能体架构能够自主调用工具。在GAIA基准测试中,Manus的性能超越了OpenAI同层次的大模型,展现出卓越的技术实力。
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
客户说|知乎核心业务MongoDB集群的平滑上云迁移实践
客户说|知乎核心业务MongoDB集群的平滑上云迁移实践

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等