4.5 考虑松耦合
图4-4 紧耦合的架构
传统的应用程序通常会搭建一个紧密集成的服务器机群,其中每台服务器各司其职。应用程序依赖其他服务器来实现功能的完整性。如图4-4所示,在紧耦合的应用程序中,Web服务器机群直接依赖于所有应用服务器,反之亦然。
在上述架构中,如果一台应用服务器出现故障,那么所有Web服务器都会接收到错误,请求也会被路由到出问题的应用服务器,最终可能导致整个系统故障。在这种情况下,如果想通过添加和删除服务器进行伸缩,将需要进行大量的工作以确保所有连接都设置正确。
图4-5 基于负载均衡器的松耦合架构
在松耦合架构下,你可以添加中间层(例如负载均衡器或队列),它们可以帮助你自动处理故障或伸缩。如图4-5的架构图所示,Web服务器机群和应用服务器机群之间存在一个负载均衡器,它可以确保用户请求始终由运行良好的应用服务器提供服务。
如果其中一台应用服务器出现故障,负载均衡器就会自动将所有流量路由到其他三台运行良好的服务器。松耦合架构还可以帮助你独立地扩展服务器并优雅地替换故障实例。由于错误半径仅限于单个实例,松耦合架构将使应用程序具备更高的容错能力。
对基于队列的松耦合架构来说,图像处理网站是一个很好的例子。其中,你需要先存储图像,然后对其进行编码、缩略和版权保护。图4-6所示的架构图展示了基于队列的松耦合架构,可以通过在系统之间使用队列传递作业消息来实现系统的松耦合。
图4-6 基于队列的松耦合架构
基于队列的解耦方式实现了系统的异步连接,服务器不需要等待另一台服务器的响应,而是独立工作。你可以增加虚拟服务器的数量,并行地接收和处理消息。如果没有需要处理的图像,则可以配置自动伸缩功能来关闭多余的服务器。
在复杂系统中,松耦合的架构是通过搭建面向服务的架构(Service-Oriented Archite-cture,SOA)来实现的,其中,每个独立的服务都包含了一组完整的功能,并通过标准协议互相通信。在现代的架构设计中,微服务架构越来越流行,促进了应用程序组件间的解耦。松耦合设计具备可伸缩性、高可用性,以及易于集成等诸多优势。
下一节将介绍更多关于SOA的内容,第6章也将深入探讨该主题的细节。