浅谈构建分布式CRM系统的实现关键点
2020-11-16陈军
陈军
摘要:电信客户关系管理(CRM)系统作为电信核心业务支撑系统,支撑电信日常的生产服务。传统CRM系统采用典型的“IOE”架构,系统的耦合度很高,当业务增长时,由于IOE架构的扩展性不足,导致数据库压力大、系统运行性能不足。为解决系统性能问题,同时提升业务支撑效率,满足业务增长需求,构建一套分布式CRM系统势在必行。本文通过介绍构建分布式CRM系统需要重点解决的关键点,提供系统的建设思路。
关键词:CRM系统;分布式架构;共享服务;数据拆分;分布式事务
1 集中式架构下电信CRM系统存在的问题及演进目标
电信客户关系管理(CRM)系统作为电信核心业务支撑系统,支撑电信日常的生产服务,支持全客户管理、全业务受理、全产品营销、全渠道协同以及全过程销售。系统有主要几个特点:高并发、大数据量、以联机事务处理为主的交易型业务系统、业务复杂、模型复杂、外围渠道接口繁多。系统传统实现方案是采用典型的“IOE”架构,即小型机+Oracle+EMC,系统的耦合度很高。传统架构下的CRM系统面临的主要问题:数据库压力大、系统运行性能不足,但是IOE架构下的小型机的CPU、内存已经满配置,横向扩展困难,同时因为系统耦合度很高,造成无法快速支撑业务需求。
电信IT架构演进目标是能够解决目前的问题并满足未来业务发展的支撑要求,因此建设一套采用基于分布式架构的CRM系统势在并行。分布式CRM系统建设的整体目标是按照“平台+应用”、基于IT云服务平台、应用分中心的互联网分布式架构来改造CRM应用。系统需要采用平台+应用模式建设,PaaS核心能力包括分布式数据库、分布式缓存和分布式消息等核心能力组件;遵循功能内聚的原则,应用功能由原来的大融合划分成多个业务中心,沉淀基础能力;CRM数据散列存储,数据按照业务对象聚合划分逻辑中心,不同中心数据逻辑隔离,不允许关联访问,具备动态扩缩容的能力。
2 如何构建分布式CRM 系统
构建分布式CRM系统需要把握五个关键点,即构建共享服务、数据拆分、异步化和缓存实现、分布式事务、分布式架构运维工具。
2.1构建共享服务
系统需要按业务类型拆分功能应用,形成一个个能力中心,比如客户中心、受理中心、配置中心等,每个中心面向企业提供业务运营及支撑,可对外提供标准化服务且相对独立的一组服务的载体。中心能力具备高内聚的特性,且中心间低耦合,通过各中心的协同形成一个完整的业务流程。它有四个原则:第一、功能内聚,中心的功能必须是紧密相关的,中心服务所提供的业务处理逻辑可以在中心内部闭环;第二,应用解耦,中心之间的引用与交互通过服务调用或者通知消息的方式实现;第三,部署独立,每个中心必须是可以独立部署和运行;中心的代码是独立的版本且可以独立升级;第四,服务复用,中心提供对外部使用服务,要求被高度复用,不容许相同能力的服务在不同的中心中都有实现。
2.2数据拆分
主要考虑三方面原则,1)聚集性:领域驱动设计里的聚集,把关系紧密的表放在一起,可在一定程度上规避跨分片JOIN、分布式事务,频繁调用分片索引。2)扩展性:具备良好的扩展性,增加分片节点时,避免数据迁移,且已经达到存储上限的节点不再写入数据。3)均衡性,能均勻分布数据读写,避免“热点”问题。在数据架构设计时,可以按照三层来做数据分片:第一层,按时间分为生产在用表 + 历史数据库;第二层:按功能子域分为客户资料中心、订单中心、营销资源中心、配置中心。第三层:按ID散列,对于客户资料中心、订单交易中心和营销资源中心这三类实体,分别根据客户ID、订单ID和营销资源ID散列存储,而配置数据中心作为公共数据,全部分片冗余存储。基于以上原则,像订单模型分为在用表和历史表,在用表按照订单ID来分片,订单相关数据散列到同一个分片中,订单ID是唯一主键,节点扩展时,可以避免大量数据迁移,数据可以均衡的散列到各个分片中。
2.3异步化和缓存实现
在分布式系统云化部署、数据散列存储的情况下,通过处理异步化,实现缓存化,达到降低耦合,提升性能的效果。比如通过把一个订单提交环节进行拆解成多个子环节,实现每个环节之间异步化处理来提升订单提交性能。同时在分布式系统中,缓存需要得到普遍使用,比如分布式查询会变得复杂,以根据号码查询订单项列表为例,因为订单项被散列的多个数据库存储,传统方式下需要一个个数据库查询结果再汇总,查询速度是非常慢的,通过缓存实现,在缓存中同步建立查询条件与实例数据的关联关系,那么查询的时候就可以快速定位到要查询的数据库范围,从而大幅提升查询效率。
2.4分布式事务
分布式CRM系统比较关键的一个难点就是分布式事务的解决,因为像像客户关系管理这样复杂的信息管理系统,涉及分布式事务的场景就比较多,举一些例子:像订单的提交、流转、竣工都会涉及数据事务处理。从事务完成数据时效要求,需要考虑事务一致性类型,有些是要要求立即生效,有些是要求快速生效,有些可以有一定的时延,有些要求对时延不敏感。关注点主要是在前面两种,我们实现的时候主要有两种实现方案,第一,将跨数据节点的事务调整为单数据节点事务,在设计时进行规避,比如订单提交实现思路:在订单中心保存过程客户资料数据,规避为数据节点内事务。订单竣工实现思路:通过将订单竣工服务,分解为订单节点服务、客户节点服务、产品档案节点服务,进行按顺序处理,最终达到整个订单竣工的完成,订单提交的时候先存过程数据,由过程数据再进行正式订单一次提交。第二,将分布式事务分解为具有幂等性子执行事务,最终一致性来解决,在关键的业务环节是需要进行些特殊判断,确保相应的事务都完成后才能进入下一业务处理。第三,通过上面提的异步化实现,通过消息的补偿机制规避分布式事务。
2.5分布式架构运维配套工具
系统分布式之后,问题定位非常复杂,需要有一套分布式架构下的运维工具进行问题的快速定位。解决方式是基于日志的实时收集、实时统计以及进行数据展现,通过把所有日志进行计算、排序进行一个调用链,实现分布式系统下的问题快速定位。
3 构建分布式CRM系统的演进方式
以某电信运营商的CRM系统升级方式来说明,整体采用分阶段方式,循序渐进开展实施改造。首先,提前进行技术储备和技术验证,由于分布式系统无论从系统架构还是从系统运维都有大幅技术提升要求,提前进行技术储备是非常关键,可以从组织架构上、项目培训上进行调整。组织架构上可以增加定义系统架构师和业务架构师角色,系统架构师牵头研究和落地已有的分布式系统建设经验,业务架构师规范分布式系统下的操作规范;项目培训上可以组织参与国内外一些技术峰会,或请互联网技术专家现场培训和指导,目的是更快地让团队转变思路。技术验证遵循循序渐进方式,可以先通过数据双写-数据读取-数据读写,充分验证下分布式架构下的数据准确性、可靠性等。其次,采用模块试点方式,可以先从周边非核心模块开始,验证分布式系统整体运行稳定性,然后逐步进行模块的升级,最后再全面上线,特别是核心模块的改造,需要有分布式技术架构和分布式系统运维作为保障。
4 结语
本文以构建分布式CRM系统的五个关键点来展开说明,实际上构建一套分布式系统是一个非常大的工程,特别对交易类的核心系统,需要理论联系实际,建议采用分阶段循序渐进的方式来推进实施。
参考文献
[1]李智慧.大型网站技术架构[M].电子工业出版社,2013
[2]钟华.企业IT架构转型之道[M].机械工业出版社,2017