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

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云数据库 Tair(兼容Redis),内存型 2GB
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
相关文章
|
2天前
|
弹性计算 Java 关系型数据库
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
|
18天前
|
运维 监控 Java
后端开发中的微服务架构实践与挑战####
在数字化转型加速的今天,微服务架构凭借其高度的灵活性、可扩展性和可维护性,成为众多企业后端系统构建的首选方案。本文深入探讨了微服务架构的核心概念、实施步骤、关键技术考量以及面临的主要挑战,旨在为开发者提供一份实用的实践指南。通过案例分析,揭示微服务在实际项目中的应用效果,并针对常见问题提出解决策略,帮助读者更好地理解和应对微服务架构带来的复杂性与机遇。 ####
|
18天前
|
算法 NoSQL Java
微服务架构下的接口限流策略与实践#### 一、
本文旨在探讨微服务架构下,面对高并发请求时如何有效实施接口限流策略,以保障系统稳定性和服务质量。不同于传统的摘要概述,本文将从实际应用场景出发,深入剖析几种主流的限流算法(如令牌桶、漏桶及固定窗口计数器等),通过对比分析它们的优缺点,并结合具体案例,展示如何在Spring Cloud Gateway中集成自定义限流方案,实现动态限流规则调整,为读者提供一套可落地的实践指南。 #### 二、
42 3
|
20天前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
64 5
|
16天前
|
消息中间件 运维 安全
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的灵活性和可扩展性,成为众多企业重构后端系统的首选方案。本文将深入探讨微服务的核心概念、设计原则、关键技术选型及在实际项目实施过程中面临的挑战与解决方案,旨在为开发者提供一套实用的微服务架构落地指南。我们将从理论框架出发,逐步深入至技术细节,最终通过案例分析,揭示如何在复杂业务场景下有效应用微服务,提升系统的整体性能与稳定性。 ####
31 1
|
18天前
|
监控 安全 持续交付
构建高效微服务架构:策略与实践####
在数字化转型的浪潮中,微服务架构凭借其高度解耦、灵活扩展和易于维护的特点,成为现代企业应用开发的首选。本文深入探讨了构建高效微服务架构的关键策略与实战经验,从服务拆分的艺术到通信机制的选择,再到容器化部署与持续集成/持续部署(CI/CD)的实践,旨在为开发者提供一套全面的微服务设计与实现指南。通过具体案例分析,揭示如何避免常见陷阱,优化系统性能,确保系统的高可用性与可扩展性,助力企业在复杂多变的市场环境中保持竞争力。 ####
35 2
|
18天前
|
消息中间件 运维 API
后端开发中的微服务架构实践####
本文深入探讨了微服务架构在后端开发中的应用,从其定义、优势到实际案例分析,全面解析了如何有效实施微服务以提升系统的可维护性、扩展性和灵活性。不同于传统摘要的概述性质,本摘要旨在激发读者对微服务架构深度探索的兴趣,通过提出问题而非直接给出答案的方式,引导读者深入
37 1
|
19天前
|
负载均衡 监控 API
后端开发中的微服务架构实践与挑战
本文深入探讨了微服务架构在后端开发中的应用,分析了其优势和面临的挑战,并通过案例分析提出了相应的解决策略。微服务架构以其高度的可扩展性和灵活性,成为现代软件开发的重要趋势。然而,它同时也带来了服务间通信、数据一致性等问题。通过实际案例的剖析,本文旨在为开发者提供有效的微服务实施指导,以优化系统性能和用户体验。
|
19天前
|
弹性计算 Kubernetes API
构建高效后端服务:微服务架构的深度剖析与实践####
本文深入探讨了微服务架构的核心理念、设计原则及实现策略,旨在为开发者提供一套系统化的方法论,助力其构建灵活、可扩展且易于维护的后端服务体系。通过案例分析与实战经验分享,揭示了微服务在提升开发效率、优化资源利用及增强系统稳定性方面的关键作用。文章首先概述了微服务架构的基本概念,随后详细阐述了其在后端开发中的应用优势与面临的挑战,最后结合具体实例,展示了如何从零开始规划并实施一个基于微服务的后端项目。 ####
|
15天前
|
Cloud Native API 持续交付
云原生架构下的微服务治理策略与实践####
本文旨在探讨云原生环境下微服务架构的治理策略,通过分析当前面临的挑战,提出一系列实用的解决方案。我们将深入讨论如何利用容器化、服务网格(Service Mesh)等先进技术手段,提升微服务系统的可管理性、可扩展性和容错能力。此外,还将分享一些来自一线项目的经验教训,帮助读者更好地理解和应用这些理论到实际工作中去。 ####
34 0
下一篇
DataWorks