模式:一体化架构
背景
假设你在开发一个服务端应用。该应用必须支持各种各样的客户端,包括桌面浏览器、手机浏览器和本地手机应用。应用可能也需要公开部分API供第三方使用,还可能与其他应用通过web service或消息代理(message broker)相集成。应用执行业务逻辑来处理请求(HTTP请求或者消息);访问数据库;与其他系统交换消息;并返回HTML/JSON/XML类型的响应。
应用或是多层架构或是六角架构,并且包含多种类型的组件:
-
表示组件(Presentation components) - 响应处理HTTP请求,并返回HTML或JSON/XML(对于web service API)
-
业务逻辑(Business logic) - 应用的业务逻辑
-
数据库访问逻辑(Database access logic) - 数据访问对象用于访问数据库
-
应用集成逻辑(Application integration logic) - 消息层,如基于Spring的集成
这些逻辑组件分别响应应用中不同的功能模块。
问题
应用的部署架构是什么?
推动力
解决方案
使用一体化架构构建应用。如:
-
单个Java WAR文件
-
单个Rails或NodeJS目录结构
举例
我们假设你在构建一个电子商务应用,应用从客户接收订单,验证库存和可用额度,并派送订单。应用包含多个组件,包括StoreFrontUI,用来实现用户接口,以及一些后台服务,用于检测信用额度、维护库存和派送订单。
应用作为一体应用部署。例如,一个Java web应用运行在Tomcat之类web容器上,仅包含单个WAR文件;一个Rails应用使用Phusion Passenger部署在Apache/Nginx上,或者使用JRuby部署在Tomcat上,它们都仅包含单个目录结构。为了伸缩和提高可用性,你可以在一个负载均衡器下面运行该应用的多份实例。