AWS提供的安装介质已包含了用于部署集群所需的所有程序和配置文件,在获取标准运行环境介质后,即可着手进行集群的部署。
AWS集群架构的设计目的是满足一定用户规模下运行核心业务流程应用的HA(High Availability)高可用性,在架构实现上满足故障无单点和处理能力的横向扩展。
第二层和第三层可整体部署成一个完整的AWS Instance,也可以按层次拆分成两类独立实例
AWS对外提供的所有服务均以HTTP(s)协议为基础,这包括浏览器请求、移动端请求及HTTP API/SOAP API请求。
通常,这些请求的响应被同步处理。即无论在单一部署或集群部署时,一个请求总会等待一个最终处理结果。
当部署有多个Web节点时,每个用户请求被要求分发到一个处于工作状态的AWS Web Instance。AWS Web在架构上被设计为无状态会话,可以根据客户的部署要求,灵活的采用硬件方案或简单软件方案,如F5、Nginx、DNS轮询。
在这一层,AWS不提供自有的解决方案
AWS Web是一个类Spring的轻量级JSP/Servlet框架程序,可以运行在各种J2EE Server中,建议使用默认的Apache Tomcat。
由于AWS Web框架被设计为无状态会话,因此在Web集群时无需考虑缓存会话的同步问题,这一层理论上可以做到无损耗的横向扩展。
AWS Web只负责接参、传参和Web端静态资源的处理(如压缩),当请求到达后被通过Router
程序转发到一个可用的AWS App实例地址,最终将结果返回给请求端。
AWS App故障包括硬故障和软故障。硬故障是指网络、操作系统及系统级故障;软故障是指PaaS服务或请求的App服务正处于临时不可用状态(参见7XX错误码)
传统的Socket IO中,需要为每个连接创建一个线程,当并发的连接数量非常巨大时,线程所占用的栈内存和CPU线程切换的开销将非常巨大。在Web到App之间的通信过程中,AWS采用了NIO非阻塞网络通信,可以在单节点上支持更大的并发处理。
App服务负责对请求作出处理,是CPU/内存负载相对较高的一层。在这一层中,为了提高系统的响应速度,一些配置类数据采用了缓存机制,这些缓存在处于集群部署时被自动同步。
有关缓存开发,请参考这里
为了确保故障恢复的可用性,AWS所采用的缓存技术没有使用延迟持久的机制。在集群模式下,这一层主要关注一下两个方面:
在高并发场景下(如200以上的瞬间请求),数据库服务应能够为更多的AWS App Instance提供并发支持,避免成为整体部署方案的性能瓶颈。这一层的调优配置,需要客户的数据库供应商或专业DBA提供,请关注以下几点:
所有AWS PaaS的程序资源和业务产生的非结构化文件都存放在%AWS-HOME%
安装目录下,在实施集群方案时这个目录被要求存储在一个或多个共享文件系统(如磁盘阵列),并确保每个AWS Web Instance和AWS App Instance采用挂接的方式完整的指向%AWS-HOME%
共享文件夹。
业务系统产生的文件被AWS采用统一的文件层级算法进行处理(见DC文件处理器),已经尽可能的降低或避免了多集群节点下同时写文件的锁操作。
集群很大程度可避免失效、增强高并发和稳定性,但并不意味着实施了集群方案可确保每笔交易的万无一失,保证100%可靠性。
硬件、网络、操作系统、存储、数据库等场景叠加产生时故障失效带来的损失依然会发生,在生产环境应对
%AWS-HOME%
和数据库进行必要的备份方案设计。