`

关于分布式系统架构模块通讯方式选择的问题

 
阅读更多
对于一个用户访问量比较大的互联网系统,当用户数达到一定数量时,系统总会存在瓶颈或处理极限,即很难做出快速响应,处理效率逐步低下。对于如何应对用户量不断增长的情形,较直观的方案就是采用分布式系统架构。所谓分布式系统架构,简单的理解就是原来由一台服务器处理的业务,现在分摊给多台服务器处理;原来由一组服务器组处理的业务,现在由多个服务器组处理。

     本文多讨论的分布式系统架构是基于如下场景考虑的:整个系统分为Global(全局)和ServerGroup(服务器组),系统中只有一个Global,但有多个ServerGroup。

     Global:有对应的数据库和应用程序模块,存储全局性的基础数据及架构配置信息,对系统起全局控制作用,并协调各ServerGroup进行统一业务处理。

     ServerGroup:系统根据指定的规则可以划分成若干个ServerGroup,每个ServerGroup负责指定范围内的业务逻辑处理。例如对于即时通讯系统,ServerGroup可能只负责指定账号号段的用户业务处理。每个ServerGroup都有自己的应用程序和数据库,但各ServerGroup的应用程序及数据库结构都是相同的,只是负责处理的业务范围不一样而已。随着业务的发展,ServerGroup的数量会逐步增加的。

     在这种情形下,难以避免Global和ServerGroup之间以及ServerGroup和ServerGroup之间的通讯问题,因为Global的有些逻辑可能会访问ServerGroup中数据库的表,而ServerGroup的有些逻辑又需要访问Global或其他ServerGroup中数据库的表。对于这些Global及ServerGroup之间模块通讯方式,大致可采取如下三种方案:

     方案一:全部采用Http/TCP等接口进行通讯

从架构图上可以看出:

       Global中的模块并不直接访问ServerGroup中的数据库,而是采用通过ServerGroup中提供的“Group接口”进行访问。同样,ServerGroup中的模块也只是通过Global提供的“Global”接口进行方案,而不会直接连接Global中的数据库。

       这么做的好处有:

        a) 较好体现面向对象和分层的思想,Global和ServerGroup的内部底层处理逻辑对外透明,外界只通过接口进行访问,且接口是从业务级别进行定义的,并不关心内部访问了哪个数据库,操作了哪些表;

        b) 有利于Global或Pool的内部后续改造,例如后续Global可能会进行“全局数据库”的切割或划分,由现在的一个库演变成多个库,或者以后会跨机房部署等;

       但也有值得顾虑的地方:

        a) 通过HTTP/TCP等接口的方式效率是否会较低?安全性和稳定性能否得到保障?

        b) 对于特定的模块是否在开发上有一定困难,例如有些ServerGroup中的模块逻辑就适合在存储过程中实现,但存储过程中又需要访问处于Global数据库中的表;

       c) 当Global和ServerGroup之间有表级别的数据需要同步时,传输的数据量有点大;

  方案二:数据库连接(DBLink)与HTTP/TCP接口相结合


当Global需要访问ServerGroup的逻辑时,仍通过ServerGroup提供的“Group接口”进行访问。但当ServerGroup需要访问Global中的数据时,就直接访问Global数据库。

      由于整个系统中只有一个Global,故可以在每个ServerGroup数据库中建立访问Global数据库的连接(DBLink),这样在ServerGroup的模块中就能轻易访问Global数据库的表。

      这么做开发上可能会简便一些,而且直接访问数据库可能效率和安全性稳定性上都有所提高。但总有点耦合得偏紧的感觉,可能不利于后续的维护和扩展。
方案三:全部采用直接方案数据库的方式


这是一种完全不采用接口通讯而直接访问数据库的方式。

    同方案二,在每个ServerGroup的数据库中会创建对Global数据库的DBLink,ServerGroup中模块对Global数据的访问都直接通过DBLink的方式,和访问本地数据库没太大的差异。

    在Global中也会存放各ServerGroup数据库的连接字符串(DB ConnectionString),当Global需要访问ServiceGroup的数据时,根据对应的数据库连接字符串直接连接到ServerGroup数据库进行表操作。

    该方案所有通讯都是直接访问数据库的方式,效率可能会有进一步的提升,但耦合性更加紧密了,以后ServerGroup采用的数据库会发生变更怎么办?(由Oracle改为MySql)。

------------------------------------------------
数据量大,我曾经验证过采用分包的传输方式,也就是不是一次性的把数据传输过去,分若干包进行传输。以前采用过WCF 的stream传输方式。
------------------------------------------------
1可以逐级扩展的。就像杨辉三角形的样子。一个group下面可以挂几个更小的group,这个group就成为下级的global。便于扩展也便于管理。
------------------------------------------------
a) 通过HTTP/TCP等接口的方式效率是否会较低?安全性和稳定性能否得到保障?
接口做好容错和必要的失败恢复以及主动报警;
  • 大小: 79.6 KB
  • 大小: 75.3 KB
  • 大小: 81.6 KB
分享到:
评论

相关推荐

    基于WCF大型分布式系统的架构设计

    在大型系统中应用中,一个架构设计较好的应用系统,其总体功能肯定是由很多个功能模块所组成的,而每一个功能模块所需要的数据对应到数据库中就是一个或多个表。而在架构设计中,各个功能模块相互之间的交互点越统一...

    Swoole 分布式通讯框架 SwooleDistributed.zip

    SwooleDistributed 是swoole分布式系统的实现,他提供了一套基于swoole扩展的分布式通讯框架。结构图:SwooleDistributed 不仅提供了分布式搭建的必要设施,还提供了4大组件帮助你提高编写代码的效率,你既可以部署...

    一个分布式企业开发平台 基于 “SpringBoot+XXL技术栈” 进行系统架构 提供整套开箱即用的基础模块

    基于 “SpringBoot+XXL技术栈” 进行系统架构。 提供整套开箱即用的基础模块,包括:权限管理、用户管理、代码生成、服务治理、配置中心、调度中心……等,努力为中小型企业打造开箱即用的分布式企业开发解决方案。 ...

    ios 即时通讯开发

    是一套开放的技术平台,模块化结构设计,可以快速的为现有视频应用系统,包括视频监控系统、视频会议...它采用分布式系统架构,支持大规模系统应用。系统提供标准的SDK接口,方便进行二次开发,具有良好的可扩展性。

    基于SpringCloud微服务架构的移动安保系统的设计与实现

    内容概要:通过带着读者基于分布式、移动计算和微服务等技术,选择Spring Cloud 作为开发框架,在移动环境中组建云平台。设计数据库,开发各模块功能,实现移动安保系统, 提供实时数据采集、分析、存储等功能。具体...

    多媒体统一通讯融合平台.doc

    文章通过对SAAS模式和云计算的深刻 理解,结合目前企业级别的融合通讯理念,以其领先的底层开发技术和独特的系统架构 模式,讨论了国内最为先进的一种多媒体统一通讯融合平台。该平台采用虚拟模块化的 技术,云计算...

    Python如何快速实现分布式任务

    深入读了读python的官方文档,发觉Python自带的multiprocessing模块有很多预制的接口可以方便的实现多个主机之间的通讯,进而实现典型的生产者-消费者模式的分布式任务架构。 之前,为了在Python中实现生产者-消费者...

    GDAF

    通过对通讯、系统管理以及业务功能模块接口的封装,旨在让分布式应用系统的开发人员更多的关注具体业务功能的实现,而不必太多的关心分布式应用系统中各个节点的通讯交互,业务子模块之间的交互以及业务子模块和节点...

    [完结13章+电子书]Go微服务精讲:Go-Zero全流程实战即时通讯

    本文,作者将结合经典 IM 项目,带你深入微服务架构精髓,探究主流微服务框架Go-Zero框架底层运作机制和框架自研之道,让你从分布式系统架构设计、容器化部署管理、高并发性能提升、系统监控等,多维度掌握Go开发...

    网络棋牌游戏服务器架构.docx

    系统采用多服务器分布式架构,由一个中心服务器(CENTERSERVER),多个主服务器(MainServer)和多个从服务器(LocalServer)同时工作以实现游戏逻辑和用户管理及通讯的功能。中心服务器向客户端提供全局配置,初始化...

    大学毕设:-基于SpringBoot+Mybatis开发的分布式校园租赁系统+源代码+文档说明

    8. 实时通信模块:基于Websocket实现实时通讯,用户可以和客服沟通租赁、支付等操作中出现的问题,出租人和承租人之间可在线沟通。(简单实现) ## 六、系统设计 ### 架构图 ![架构图](/project-docs/images/架构图...

    小蜜蜂商务网站门户系统3.0

    1)系统级高级设计 BBWPS系统除支持一台服务器/空间安装所有模块的原始部署,更创新开发系统平台与应用模块分布式和嵌套式两种高级部署;您可用多个服务器联合部署BBWPS系统,大幅度提升系统负载性能,。若一个系统...

    3G手机等嵌入式技术终端实现监控,视频会议,即时通讯的平台开发

    分布式系统架构:流媒体服务器可分布式部署,可动态投入、退出单个流媒体服务器,不影响其它流媒体服务器的正常使用,支持大规模系统应用。采用P2P技术,系统容量不依赖中心服务器的网络带宽,为多用户接入提供了...

    Java课程设计项目实例《基于微服务的在线签到》子系统.pdf

    Microservice)作为系统 的技术实现方案,作者在本文中将重点介绍子系统所应用的核心技术——微服务、反射、 对象序列化、多线程以及基于 TIP/IP 的 Socket 通讯等,此外还通过具体的程序代码实现为 读者介绍微服务...

    汉光 电力监控系统在企业供配电系统中的应用 .pdf

    汉光HV-SCADA-WEB系统完全基于互联网技术架构,采用先进的设计理念,采用分层分布式模块化结构,从功能上划分为:主站监控管理层、中间采集通讯接口层、现场设备间隔层三层,前端数据基于通信接口读取,仪表装置的...

    web版的艾瑞思网络视频会议系统

    艾瑞思网络视频会议系统具有健壮的系统架构,先进的协议标准,优化的服务器级联部署,高质量的音视频效果,友好易用的操作界面,高效实用的数据协作,强大的网络适应能力,灵活易用的会议辅助功能,安全可靠的传输...

    twjitm-core:采用Netty信息加载实现长连接实时通讯系统,客户端可以在任何场景,支持实时HTTP通讯,webSocket通讯,tcp协议通讯,和udp协议通讯,广播协议等通过http协议,rpc协议。自定义网络数据包结构,实现自定义网络栈

    twjitm核心相关业务介绍Netty网络基础架构系统采用Netty信息加载实现长连接实时通讯系统,客户端可以在任何值的场景下,支持实时HTTP通讯,webSocket通讯,tcp协议通讯,udp协议通讯,广播协议等通过http协议,rpc...

    大屏幕系统设计方案.doc

    内置的网络图像处理模块采用最新数字技术及分布式网络架构,具有独特的独立信道 高带宽传输技术,系统稳定可靠,扩展性强,为高端图像显示需求提供最卓越的显示技 术,满足7×24小时工作要求。 DLP大屏幕显示系统...

Global site tag (gtag.js) - Google Analytics