AWS PaaS私有集群部署参考指南

架构概要

AWS提供的安装介质已包含了用于部署集群所需的所有程序和配置文件,在获取标准运行环境介质后,即可着手进行集群的部署。

架构

AWS集群架构的设计目的是满足一定用户规模下运行核心业务流程应用的HA(High Availability)高可用性,在架构实现上满足故障无单点和处理能力的横向扩展。

  • 用户请求和响应
  • 第一层,Web端的Load Balancing
  • 第二层,AWS Web实例服务(AWS Web Instance)
  • 第三层,AWS App实例服务(AWS App Instance)
  • 第四层,数据和文件服务(Data)

第二层和第三层可整体部署成一个完整的AWS Instance,也可以按层次拆分成两类独立实例

用户请求和响应

AWS对外提供的所有服务均以HTTP(s)协议为基础,这包括浏览器请求、移动端请求及HTTP API/SOAP API请求。

通常,这些请求的响应被同步处理。即无论在单一部署或集群部署时,一个请求总会等待一个最终处理结果。

第一层,Web端的Load Balancing

当部署有多个Web节点时,每个用户请求被要求分发到一个处于工作状态的AWS Web Instance。AWS Web在架构上被设计为无状态会话,可以根据客户的部署要求,灵活的采用硬件方案或简单软件方案,如F5、Nginx、DNS轮询。

在这一层,AWS不提供自有的解决方案

第二层,AWS Web实例服务(AWS Web Instance)

AWS Web是一个类Spring的轻量级JSP/Servlet框架程序,可以运行在各种J2EE Server中,建议使用默认的Apache Tomcat。

无状态会话

由于AWS Web框架被设计为无状态会话,因此在Web集群时无需考虑缓存会话的同步问题,这一层理论上可以做到无损耗的横向扩展。

请求的分发

AWS Web只负责接参、传参和Web端静态资源的处理(如压缩),当请求到达后被通过Router程序转发到一个可用的AWS App实例地址,最终将结果返回给请求端。

  • 自动发现AWS App实例存活和状态
  • 敏感度可调优(如frequency心跳频率、dropTime延迟时间)
  • 普通类Web请求采用简单轮询算法,随机分配
  • 控制台Web请求支持会话黏贴特定AWS App节点
  • 对请求目标(AWS App)支持故障自动转移

AWS App故障包括硬故障和软故障。硬故障是指网络、操作系统及系统级故障;软故障是指PaaS服务或请求的App服务正处于临时不可用状态(参见7XX错误码

NIO非阻塞网络通信

传统的Socket IO中,需要为每个连接创建一个线程,当并发的连接数量非常巨大时,线程所占用的栈内存和CPU线程切换的开销将非常巨大。在Web到App之间的通信过程中,AWS采用了NIO非阻塞网络通信,可以在单节点上支持更大的并发处理。

第三层,AWS App实例服务(AWS App Instance)

App服务负责对请求作出处理,是CPU/内存负载相对较高的一层。在这一层中,为了提高系统的响应速度,一些配置类数据采用了缓存机制,这些缓存在处于集群部署时被自动同步。

  • 自动发现AWS App实例存活和状态
  • 敏感度可调优(如frequency心跳频率、dropTime延迟时间)
  • 采用NIO处理缓存同步

集群缓存

  • AWS的Cache本质上是基于键/值的ConcurrentHashMap,支持本地缓存和集群缓存。处于集群部署时,缓存副本存储在每个AWS节点内存中并自动保持同步,避免缓存服务的单点故障
  • AWS Cache中的缓存对象,仅缓存被已被持久化的对象(如数据库记录、流程定义文件),当AWS节点被重启时会从持久化对象重新加载,确保不会因突然宕机造成数据丢失或脏读/幻读
  • 当缓存对象容量达到指定值之后,支持基于LRU(Least Recently Used)算法自动删除不使用的缓存
  • 对于BPMS建模和引擎,缓存的对象仅包括BPMN2等相关基础数据,不对实例控制数据进行缓存处理

有关缓存开发,请参考这里

第四层,数据和文件服务(Data)

为了确保故障恢复的可用性,AWS所采用的缓存技术没有使用延迟持久的机制。在集群模式下,这一层主要关注一下两个方面:

  • 数据库
  • 程序和文件

数据库

在高并发场景下(如200以上的瞬间请求),数据库服务应能够为更多的AWS App Instance提供并发支持,避免成为整体部署方案的性能瓶颈。这一层的调优配置,需要客户的数据库供应商或专业DBA提供,请关注以下几点:

  • CPU、内存和I/O处理能力
  • 常规的数据库参数优化和数据库实例配置、配额检查
  • 为每个AWS App Instance提供足够的并发游标
  • RAC集群或针对特定数据库类型的集群方案实施(如读写分离)

程序和文件

所有AWS PaaS的程序资源和业务产生的非结构化文件都存放在%AWS-HOME%安装目录下,在实施集群方案时这个目录被要求存储在一个或多个共享文件系统(如磁盘阵列),并确保每个AWS Web Instance和AWS App Instance采用挂接的方式完整的指向%AWS-HOME%共享文件夹。

业务系统产生的文件被AWS采用统一的文件层级算法进行处理(见DC文件处理器),已经尽可能的降低或避免了多集群节点下同时写文件的锁操作。

故障失效

集群很大程度可避免失效、增强高并发和稳定性,但并不意味着实施了集群方案可确保每笔交易的万无一失,保证100%可靠性。

硬件、网络、操作系统、存储、数据库等场景叠加产生时故障失效带来的损失依然会发生,在生产环境应对%AWS-HOME%和数据库进行必要的备份方案设计。

AWS Web Instance故障发生(宕机、与外部网络物理中断)

  • HTTP失效转移策略依赖于用户部署的第一层Web负载方案

AWS App Instance故障发生(宕机、与Web网络物理中断)

  • AWS App正在执行的请求瞬间发生物理宕机,无法将该处理请求转至其他App节点
  • 下个请求会被安全转移到其他正常工作的AWS App节点

DB故障发生(宕机、与App网络物理中断)

  • 整个AWS服务将处于不可用状态

磁盘阵列故障发生(宕机、与App、DB或Web网络物理中断)

  • 整个AWS服务将处于不可用状态


Seven
 010-62962343-690
 liujx@actionsoft.com.cn
感谢您对该文档的关注!如果您对当前页面内容有疑问或好的建议,请与我联系。如果您需要解答相关技术问题请登录AWS客户成功社区