论文部分内容阅读
高负载的移动交易需要通过分布系统实现吞吐能力的水平扩展,因此会导致分布系统实现相互冲突的多个目标:事务处理效率、事务处理的一致性、网络分区、可用性,同时还需要考虑移动端的掉线。根据 CAP(Consistency、Availability、Partition Tolerance)理论,保持性能的同时折中一致性,采用事务的最终一致性容错模型。本文通过消息中间件和集群架构实现BASE(Basically Available、Soft State、Eventual Consistency)事务容错,适合移动交易场景下的长事务处理:从订单提交到订单处理各个环节和流程的处理。分布系统的多个相同功能的节点实现了处理的冗余,消息队列的日志和持久化机制能够解决分布系统的分割,从而实现交易各个环节和流程处理的最终一致性。具体研究内容包括:(1)设计高负载移动交易事务容错的基本架构,通过消息中间件异步解耦交易长事务为多个本地小事务,通过Spring框架的注解事务管理机制保证消息发送和本地事务执行的原子性,实现消息投递的可靠性,通过消息中间件的日志和持久化机制实现消息存储的可靠性。(2)针对事务最终一致性容错方案中出现的web服务器、功能节点以及消息中间件由于单点故障造成的消息丢失问题,利用集群技术实现功能冗余,通过消息中间件的心跳检测以及负载均衡器实现故障检测和功能转移。(3)针对移动端掉线造成交易事务执行状态反馈中断问题,重连后保证消息的持久化,通过用户session信息重新获取订单状态,实现事务状态接收的连续性,通过消息队列的幂等投递模式以及消息去重表解决消费端重复消费问题。(4)在当前的SSM(SpringMVCSpringMybatis)技术框架上,通过Spring的注解事务实现消息发送和本地事务以及本地消息存储的原子性以及Mybatis框架的数据持久化,保证消息发送的可靠性,通过ActiveMQ幂等投递和去重表实现消息消费的幂等性,通过Nginx和消息中间件的心跳检测以及基于Zookeeper+Leve1Db的集群管理应用实现web服务器、功能节点以及消息中间件故障转移。通过基于Redis集中式会话共享解决移动用户断线重连后会话信息丢失的问题,实现事务最终一致性容错方案,验证方案的有效性和一致性获取的时间延迟。本文通过开源框架实现事务最终一致性容错方案,最后利用Jmeter压测工具模拟真实交易场景中的高并发请求,最后实验结果显示正常情况下的事务吞吐量,即长事务拆分后的小事务的吞吐量在700每秒,响应时间在3秒以内,即使故障下,保证了系统的恢复时间在30毫秒以内,并且订单状态最终实现一致,同时移动断线重连后依然正常接收事务执行状态,实验结果验证该方案的有效性和可用性。