4.6 考虑服务而非服务器
在上一节中,你了解了松耦合以及保持架构的松耦合对于可伸缩性和容错性的重要性。面向服务的思想将有助于实现松耦合的架构(与之相反的是面向服务器的设计,后者可能导致对硬件有依赖以及紧耦合的架构)。SOA帮助我们简化了解决方案的部署和维护。
谈到面向服务的思想,解决方案架构师总是倾向于采用SOA。最流行的两种SOA分别是基于SOAP(Simple Object Access Protocol,简单对象访问协议)服务的架构和基于RESTful服务的架构。在基于SOAP的架构中,可以使用XML来格式化消息,然后采用基于HTTP的SOAP在互联网上发送消息。
在RESTful架构中,可以使用XML、JSON或纯文本来格式化消息,然后通过简单的HTTP进行发送。RESTful架构相对来说更受欢迎,因为它非常轻量级,并且比SOAP架构更简单。
现如今,谈到SOA,微服务架构越来越流行。微服务可以独立伸缩,这使得应用程序中的单个组件可以在不影响其他组件的情况下更容易地扩展或收缩。如图4-7所示,在单体架构中,所有组件都构建在同一台服务器中,并与同一数据库绑定在一起,这将导致各个组件的强依赖性;在微服务架构中,每个组件都具备独立的框架和数据库,这使得它们可以独立伸缩。
图4-7 单体架构与微服务架构
图4-7是一个电子商务网站的示例,在该网站上,客户可以登录,并通过向购物车添加商品(假设网站上有他们想要的商品)来进行下单。要将单体架构转换为微服务架构,可以创建一个由相互独立的小型组件组成的应用程序,这些组件可以组合成应用程序的不同部件并独立迭代。
采用模块化方法可以降低成本、规模和变更风险。在上述示例中,每个组件都创建为独立的服务。其中,由于客户可能会频繁地登录以便浏览商品目录和查看订单状态,因此可以独立地伸缩登录服务以便处理更多的流量,而订单服务和购物车服务的流量可能会相对少一些,因为客户可能不会频繁下单。
解决方案架构师在设计解决方案时需要考虑SOA。服务化的显著优势是需要维护的代码面较小,并且服务是独立的。在没有外部依赖的情况下就可以构建它们。所有依赖都被包含在服务内部,这样就能够实现松耦合、可伸缩功能并在发生故障时减小爆炸半径。