松耦合和紧耦合的架构设计、性能对比
在最近的一次大数据技术讨论会上,有一家公司的技术高管谈到松耦合和紧耦合的性能表现的话题。正好Laxcus大数据管理系统的设计,从0.x、1.x到2.x版本,也经历了从紧耦合到松耦合的发展过程。做为亲历者,对这两种架构的设计和运行效果,我们有清楚的了解和认识。下面就说一说这件事。写此博文,也希望给做系统设计的兄弟们,尤其是做高并发、复杂数据计算的同行提供一点参考。
先说紧耦合,这种架构是我们在Laxcus 0.x、1.x中采用的。如下图所示,紧耦合架构本质是一个Client/Server模型。客户机发起请求给服务器,服务器收到,根据请求做出应答,然后反馈给客户机。这种架构最典型的应用就是我们每天都用到的WEB服务。优点嘛,就是简单。架构简单、设计简单、开发周期短、能够快速投入部署和应用。在Laxcus集群的早期运行中,这些特点都得到有力的验证。
紧耦合架构
但是到了后期,随着Laxcus集群规模的不断扩大,访问量的不断增加,尤其是数据计算量、计算时间成倍数的增长后,紧耦合架构渐渐不堪重负,缺点开始不断暴露出来,主要有以下几个方面:
1. 无法支持大规模的计算业务。因为大数据业务对计算机资源占比普遍很大,导致多任务并行能力有限。举个例子,我们曾在一台Pentium IV 2.G + 2G的机器上测试一项小规模的数据处理业务。当并行任务量达到100多个的时候,计算机已经发生超载现象。
2. 计算机载荷无法控制。换句话说,就是计算机不能控制超载现象,而超载对硬件伤害非常大,这会严重降低计算机稳定运行能力和使用寿命。
3. 任务执行过程中管理难度大。任务在执行过程中不受管控。
4. 对网络资源消耗大。同步操作在数据发送和数据返回之间,有很大一段是空闲的,这种空闲占用是对网络资源的极大浪费。
5. 安全控制力度差。因为服务器直接暴露给客户机,容易引发网络攻击行为。
6. 程序代码之间关联度过高,不利于模块化处理。
7. 以上现象最终导致系统稳定性变差。
这些问题出现后,我们开始考虑修改系统设计。经过多番考量、比较、权衡之后,我们决定改用松耦合架构重新规划系统设计。新框架是在原来Client/Server模型之上的改进,即在Client/Server模型之间加入一个代理(Agent),把CS模型变成CAS模型。在新的架构下,客户机的角色不变,代理服务器承担起与客户机通信,和对客户机的识别判断工作,服务器位于代理服务器后面,对客户机来说不可见,它只负责数据处理工作。另外我们也把CS模型的同步操作改为CAS的代理处理。
在设计新架构的同时,我们还发现,如果要适应松耦合架构,原来在紧耦合架构下运行的程序代码,因为现在的工作方式发生了发生了变化,它们几乎都要重写。这可是一个庞大的工程,需要消耗大量的人力、时间去修改和调试。所以我们在松耦合架构之上,结合代理服务器,又设计了一套Invoke/Produce机制。这是另一种代理方案,是针对数据处理进行抽象化处理和分组分级管理。原来的数据处理和业务逻辑套用这套机制后,程序代码基本不用修改,转移到CAS模型上运行就可以了。
松耦合架构
新架构设计和代码修改完成后,我们在原来的集群上,和紧耦合架构做了各种对比测试。结果表现是出其的好,不仅解决了紧耦合架构上存在的所有问题,而且其中很多技术指标还超出了我们的预估,主要表现以下一些方面:
1. 多任务并行处理能力获得极大提升。同样是上述那个数据处理,紧耦合架构只能支持最大约100多个并行,而转到松耦合架构上,达到了8700多个。这还只是在Pentium IV 2.0芯片上的表现,放到Core 2平台,并行处理任务很轻松地超过10000个。
2. 实现负载自适应机制。(根据当时运行环境,松耦合架构分配并行工作任务,避免超载现象)。
3. 实现了运行任务的随机控制。 (松耦合架构对运行中的工作任务进行随机调整和控制,进一步避免了持续超载现象)。
4. 基本杜绝了网络攻击行为。由于代理服务器的隔绝和筛查作用,同时结合其它安全管理手段,外部攻击在代理服务器处就被识别和过滤掉了,这样就保护了后面的服务器不受影响。
5. Invoke/Produce机制改善了程序结构的模块化,有利于实现复杂的数据业务处理。
6. 异步操作减少了网络资源消耗和操作关联。
7. 综合以上措施,它们共同增强了系统稳定性。
最后用一张表格对两种架构做个对比,做为两种架构性能特点的总结。有关Laxcus详细介绍,请见《Laxcus大数据管理系统》一文。
紧耦合架构 |
松耦合架构 |
|
工作方式 |
同步 |
异步 |
程序关联依赖 |
强 |
弱 |
业务逻辑关系 |
集中控制 |
分散控制 |
设计难度 |
容易 |
比较复杂 |
响应能力 |
快 |
和并行工作量成反比 |
时效表现 |
实时 |
无要求 |
业务适用范围 |
简单计算 |
复杂计算 |
安全 |
弱 |
强 |
应用领域 |
小规模并行处理环境 |
大规模、超大规模并行处理环境 |
系统稳定性 |
弱 |
强 |
转载于:https://www.cnblogs.com/laxcus/p/5681611.html
松耦合和紧耦合的架构设计、性能对比相关推荐
- 松耦合和紧耦合的架构设计及性能对比
松耦合和紧耦合的架构设计及性能对比 laxcus大数据 2016-07-20 07:26:41 浏览756 评论0 架构 算法 性能优化 摘要: 在最近的一次大数据技术讨论会上,本行业一家公司的技术高 ...
- INS/GNSS组合导航(三)松耦合、紧耦合、深度耦合
0 INS/GNSS组合导航概述 所谓INS/GNSS组合导航,就是利用INS和GNSS两者信息进行融合,从而综合利用两者的优点,实现优势互补,求解实现pose的解算,得到PVA(位置.速度.姿态)的 ...
- 松耦合式的权限控制设计,自定义权限表达式
点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | ...
- java中强耦合是什么意思_什么是oop中的松耦合和紧耦合(java)
我对java中的松散耦合和紧密耦合有一些困惑.因为我知道松散耦合意味着彼此之间的信息最少,而紧密耦合意味着依赖关系.因为我们知道松散耦合可以通过接口实现和继承实现紧密耦合. 例如: 1)A(接口) 2 ...
- VIO松耦合和紧耦合对比
松耦合(结果级融合):两个独立的运动估计过程中分别处理视觉和惯性测量的信息,最终将他们的输出(位置和姿态)融合作为结果 紧耦合(特征级融合):直接联合优化原始的相机(如跟踪的2D特征)和IMU测量(角 ...
- 架构设计 —— 性能选型、高可用
1. 读写 Redis: Redis能读的速度是110000次/s,写的速度是81000次/s 2. 并发 Nginx: 支持 epoll(linux系列)和 kqueue(bsd系列)的I/O事件通 ...
- SLAM 算法松耦合和紧耦合方案
转自:https://zhuanlan.zhihu.com/p/34995102 https://www.cnblogs.com/hitcm/p/6327442.html
- 各种耦合关系,耦合,紧耦合,松耦合,解耦
松耦合和紧耦合的架构设计.性能对比 <div id="cnblogs_post_description" style="display: none"> ...
- 耦合,紧耦合,松耦合,解耦
一.耦合 耦合是两个或多个模块之间的相互关联.在软件工程中,两个模块之间的耦合度越高,维护成本越高.因此,在系统架构的设计过程中,应减少各个模块之间的耦合度,以提高应用的可维护性. 二.紧耦合 紧耦合 ...
最新文章
- 抓图软件_Faststone capture8.3
- IDE之Jupyter:交互式文档Jupyter Notebook简介、安装、使用方法详细攻略
- canny边缘检测算法 opencv_OpenCV-Python Canny边缘检测 | 十九
- boa服务器怎样运行,boa服务器的配置与编译
- 开发到底要不要自己做测试?
- Pyhton入门 笔记 第三天 正则表达式与JSON
- 谷歌发布GPhone 创始人亲自上阵
- 通过Wi-Fi将iPhone与Mac同步的教程
- GPS卫星星历与卫星历书的区别
- Java 前后端分离部署方式
- C语言信息学一本通题库答案,信息学奥赛一本通(C++版)在线评测系统
- css 间隙,CSS间隙属性
- 如何用计算机设置热点,Win7如何在笔记本电脑设置热点wifi?
- fanuc换刀宏程序详解_FANUC宏程序大全+实例讲解
- 计算机专业转ubc绩点,中国留学生申请加拿大名校,如何换算GPA成绩?
- JAVA 将图片转换成pdf文件
- 【Linux后端开发必问】操作系统系列(Linux常用命令、文件权限修改、静态与动态库的制作)
- 计算机学院杨洋,计算机学院
- Python文件IO处理技巧: 读写、重定向、间隔符、路径、存在性与文件列表
- 外接拓展屏显示input not supported