最近設計和實現了一個JAVA的RESTful API的后台業務系統架構,主要基於Java平台。設計要求是:
- 性能:平均響應時間(RESTful API)小於2s(平均負載的情況下),並發訪問200個以上。
- 可用性:99%,87.6小時每年宕機時間
- 伸縮性:允許負載均衡集群水平擴展web server和application server。保留半年的歷史數據。可以擴展。
- 安全性:具有基於RBAC的角色和權限控制;提供SSL鏈接;可以和LDAP集成;可以通過PCI/DSS安全認證標准。
可以看到系統對可用性和性能要求一般,但對安全性要求較高。整體設計架構:
之所以采用關系數據庫和NoSQL混合模式,是因為系統有很多視頻和圖片文件,而且需要保存歷史,所以這類數據存放在NoSQL數據庫中。
技術選型
展現層:
- Spring MVC - MVC Framework
- Java Server Pages (JSP) - View Generation
- ExtJS - Javascript UI Widget Framework
- Spring Security - Security Framework
- Jackson - JSON Generation / Parser
- Jersey - JAX-RS 2.0 Implementation
中間層:
- Spring Beans - IoC Container
- Spring Transaction - Transaction Management
- Dozer - Bean Transformation Framework
- Spring Security - Security Framework
- Quartz Scheduler - Scheduling
數據層:
- Spring Data - Convenience API for Hibernate & MongoDB
- Hibernate - ORM Tool
- RDBMS - PostgreSQL
- NoSQL DB - MongoDB
公共:
- Java Development Kit - Core Platform
- Spring Beans / IoC - IoC Container
- Spring AOP - AOP Framework
- Logback - Logging API
- SLF4J - Logging API Abstraction
其它:
- Application Server - JBoss AS
- Distributed Cache - EHCache
系統部署圖
上圖可以看出,前端入口是負載均衡和反向代理(Apache HTTPD with mod_proxy and mod_balancer),中間是JBOSS應用服務器集群,后面是兩台統計服務器(RServer),然后是關系數據庫集群和NoSQL。
高可用方案:
- Primary / Stand-By Load Balancers
- Active / Active Application Server Cluster
- Active / Active Analytics Server Cluster
- Active / Passive RDBMS Cluster
系統上線運行以來基本滿足設計要求。