APP下载

CRM基于分布式数据存储事务处理方案

2017-01-13吴宇星

中国新通信 2016年22期

吴宇星

【摘要】 借鉴优秀互联网经验,大型企业CRM系统引入分布式数据存储架构,采用分布式数据架构,将传统的单节点数据存储分布存放到多个数据节点,上层的应用如何保障事务一致性,对应用的建设提出很大的挑战。本文主要就CRM采用分布式数据存储,列举了分布式事务一致性的技术解决方案,并提出CRM的关键场景的分布式存储情况下的事务处理方案。

【关键词】 分布式事务 事务一致性 幂等性

一、引言

CRM是企业的核心生产运营系统,在大型企业中数据量巨大,为提升系统的性能引入分布式数据存储架构,采用分布式数据架构,将传统的单节点数据存储分布存放到多个数据节点,上层的应用如何保障事务一致性,对应用的建设提出很大的挑战。

二、关键业务场景实现方案

目前对于一个分布式系统的事务处理有三种方式:分布式事务两阶段提交、基于Best Efforts 1PC模式的事务以及事务补偿机制。

综合比较分布式事务一致性技术特性,集中系统采用事务补偿机制进行分布式事务处理。

2.1事务一致性场景

从事务完成后,跨库数据同步达到数据最终一致时间,需要考虑时效要求类型如下:

立即生效

快速生效

允许时延:秒级(正常要1秒内,最长1分钟?)

较长时间时延

允许时延:分时级别(分钟、小时及以上)

时间要求低

允许时延,小时级别,如:数据同步给ODS

典型业务场景要求数据最终一致的时效如下:

2.2关键业务场景实现方案

事务实现方案:(表2)

2.2.1订单提交

调整数据保存方案,将一次订单提交涉及的订单数据、客户资料数据保存到同一数据节点,将跨数据节点事务调整为单数据节点事务,规避分布式事务。

场景说明:

客户订单提交,作为一个整体提交

按现有数据存储模式,订单提交需保存的数据涉及订单中心、客户资料中心,存在跨数据节点事务

按现有模式处理,订单提交需要作为一个整体,涉及的数据,最少考虑也涉及订单表、档案表的数据更新或状态变化

提交数据的下级信息较丰富,可能做为后续的查询、展示关键信息。如:订单下级的订单项等数据,可能做为后续展示的部分数据。

方案说明:

在订单库建立订单过程表,将提交的数据都保存在订单库,并且以订单ID分库,规避为单库内事务。如:

受理直接保存订单及档案库,需要保持的数据及分片:

订单,保存在订单数据中心订单表,根据订单ID散列的切片;

客户,保存在客户数据中心客户表,根据客户ID散列的切片;

产品实例,保存在客户数据中心产品实例表,根据客户ID散列的切片

一次订单提交,需要保持不同的数据库节点。

在订单库中建立过程表,将提交的过程数据存放到订单中心,并以订单ID作为分片标识:

订单,保存在订单数据中心订单表,根据订单ID散列的切片;

客户,保存在订单数据中心过程客户表,根据订单ID散列的切片;

产品实例,保存在订单数据中心过程产品实例表,根据订单ID散列的切片

达到一次订单提交,数据保存在同一分片中,将多数据库事务,规避为单数据库事务。

2.2.2订单竣工、归档

事务拆解,将事务分解为具有幂等性子执行服务,通过应用进行异常补偿,保证最终一致。

场景说明:

按现有的数据分片模式,订单数据、客户资料数据存储的分片不同

订单竣工,作为一个整体业务,需要保证该场景的订单状态、流程状态、客户资料数据一起更改

方案说明:

将订单竣工服务,分解为:订单节点服务、客户节点服务、产品档案节点服务,进行按顺序处理,最终达到整个订单竣工的完成。

对订单表增加一些事务ID、事务状态等控制字段,进行处理过程标记。

有单独的队列,对出现异常的订单进行重复执行,达到最后数据一致性。

2.2.3数据同步

较长时间时延,允许12小时及以上,并且不具有事务性数据,可以采用时间戳方式进行数据同步。

场景说明

如:数据同步给ODS,可以采用时间戳方式。每次数据更新,同时更新时间戳,定期通过轮询等方式将数据抽取。

三、结束语

分布式事务是一个大话题,本文就CRM的关键场景的分布式存储情况下的事务处理方案进行初步设计,对解决分布式事务一致性提供了参考方案,后续需要不断的进行细化。

参 考 文 献

[1]: Laurence.关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究[EB/OL].http://blog.csdn.net/bluishglc/article/details/7612811