企业软件架构:从单体到可扩展的演进
1. 分布式架构的可扩展性挑战
在构建应用程序时,可扩展性是一个关键考量因素。若将应用服务设计为无状态的,通过采用合适的部署架构,就能应对流量的增长。而且,展示层的扩展程度与业务层的扩展程度相互独立。
不过,数据库层有其特殊之处。展示层负责组装内容以实现用户界面的有效渲染,业务层负责对业务数据进行更改,而数据库层的唯一目的是确保数据状态在用户请求之间或服务器重启时都能以一致的方式被访问,它是数据的唯一真实来源。这就对数据库层的扩展造成了限制。数据库层的扩展策略与其他层不同,因为可并发修改的数据不能随意复制,否则需要解决数据调和的问题。通常,数据库扩展问题以及相关的数据一致性和数据调和问题由数据库供应商解决,而非应用架构师。这也是数据库层的技术栈相比其他层更昂贵的原因,例如 Oracle RAC(Real Application Cluster)。此外,即便采用了这些昂贵的解决方案,由于数据库始终是有状态的而非无状态的,数据库层可实现的扩展程度仍无法与其他层相媲美。
如今,技术环境快速发展,新设备和访问渠道不断给应用架构师带来提升可扩展性的压力,这种新趋势被称为“Web 规模”,即应用程序的可扩展性仅受 Web(网络或互联网)本身的限制,Web 能让无限的用户和设备连接到应用程序并访问服务。
2. 应用状态管理的利弊
在应用开发中, javax.servlet.http.HttpSession
API 和 EJB(Enterprise Java Bean)部署描述符元素 session-type
为应用架构师提供了在服务器端存储用户特定数据的便