松耦合架构和紧耦合架构是软件系统设计中两种常用的架构模式。它们代表了不同的设计原则和关注方向,对于软件设计和开发人员来说,选择合适的架构模式非常重要,它将直接影响到软件系统的可靠性、可维护性、可扩展性和可重用性。下面在阐述两种架构的基础特点的同时,以LAXCUS分布式操作系统的系统发展过程为例,说说两种架构的各自优劣和特点。

咱们先说松耦合架构。

松耦合架构是一种基于低耦合度的软件设计方法。在这种架构中,各个组件之间的依赖关系非常弱,它们可以独立地进行修改和扩展。这种设计方式的优点在于,系统更加灵活,易于维护和升级,并且稳定性和可靠性也更强。由于各个组件之间没有太多的依赖关系,因此在需要修改或更新某个组件时,其他组件不会受到影响。此外,松耦合架构解耦了关联和依赖,它的代码的可读性和可维护性也比较好。

与之相反的是紧耦合架构。

在紧耦合架构中,各个组件之间的依赖关系非常强,它们通常会通过共享数据结构或接口来实现通信。这种设计方式的优点在于,系统实时处理能力和响应能力更好,但是由于各个组件之间的依赖和关联关系比较紧密,因此如果其中一个组件出现问题,也可能导致整个系统崩溃。此外,紧耦合架构实时处理能力和响应能力好,它可以减少数据传输和处理的时间。

紧耦合架构还有很多缺点。首先,它的可维护性和可扩展性较差。因为各个组件之间的依赖关系过于紧密,因此在需要修改或添加新的功能时,可能需要对整个系统进行大规模的重构。其次,紧耦合架构也容易导致代码冗余和重复工作。由于各个组件之间必须共享数据结构或接口,因此很容易出现重复编写代码的情况。

LAXCUS系统内核由“本地层”和“分布层”组成,松耦合架构在分布层起到承下启下的作用,是系统内核的重要组成部分

对于松耦合和紧耦合架构的优缺点,由于本人参与过LAXCUS分布式操作系统的架构设计,所以LAXCUS分布式操作系统为例,来详细说一说。

LAXCUS分布式操作系统从0.x、1.x到2.x版本,经历了从紧耦合到松耦合的发展过程,一直到最新的6.0版本,也在不断改进着松耦合系统架构。本人做为亲历者,对这两种架构的设计和运行效果,有清楚的了解和认识。这篇文章如果能给做系统设计的开发者们,尤其是做大型应用业务、并发处理、高性能计算、的同行提供一点参考意见,那就算是最好的回报了。

按照LAXCUS分布式操作系统的采用的架构顺序,这次咱们先说紧耦合。

紧耦合架构是我们团队在LAXCUS分布式操作系统的0.x、1.x中采用的。如下图所示,紧耦合架构本质是一个Client/Server模型。客户机发起请求给服务器,服务器收到,根据请求做出应答,然后反馈给客户机。这种架构最典型的应用就是我们每天都用到的WEB服务。优点嘛,就是简单。架构简单、设计简单、开发周期短、能够快速投入部署和应用。在LAXCUS集群的早期运行中,这些特点都得到有力的验证。

紧耦合架构

再来说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更多详细介绍,可以官网查看,这里就不详细介绍了。

松耦合、紧耦合架构对比

综上所述,松耦合架构和紧耦合架构都有其优点和缺点。在实际应用中,我们需要根据具体的业务需求和技术条件来选择合适的架构模式。如果我们希望系统需求很复杂,同时要求更加灵活、可维护、可扩展,那么松耦合架构可能是一个更好的选择;如果我们希望系统需求比较简单,希望产品快速研发实现,那么紧耦合架构可能更适合我们的需要。但是无论采用哪种架构模式,我们都应该注重代码质量和可维护性,以确保系统的长期稳定性和可靠性。