基于Kafka消息的云化计费系统研究与实现论文

(2018年度“和勤杯”获奖论文一等奖)

基于Kafka消息的云化计费系统研究与实现

崔益彪 朱熊明 沈建国 郑 健

中国联合网络通信有限公司江苏省分公司

摘要: 本文在分析传统计费架构面临的各种瓶颈的基础上,提出了基于Kafka消息的云化计费系统实现方案。该方案在应用平台x86化的基础上引入成熟的云计算技术,将传统架构升级为基于Kafka消息传输的云化架构,采用分布式Redis(Remote Dictionary Server,远程数据服务)内存数据库集群为整个计费应用提供资料数据服务,采用分布式应用部署,使得计费系统可动态扩展,显著提升系统处理能力,满足业务发展和转型的需求。

关键词: 计费系统;云计算;Kafka消息;分布式应用;远程数据服务

0 引言

近年来电信行业发生了一系列重大的变化,数据业务迅猛增长,很大程度上代替了传统的语音、短信业务而成为运营商最重要的业务之一。目前,数据业务话单量月均比4G上线初期增长了20倍,并仍以较快的速度增长,数据业务话单量占到所有业务话单量的90%以上。另外,移动互联网的爆发式发展冲击了各行各业,新业务、新营销、新服务层出不穷。深刻变化的市场环境同时也影响着运营商的业务支撑系统,业务支撑系统需要全方面的提升来支撑新的运营模式。

传统IOE架构的计费系统面临各种瓶颈,主要有:(1)传统系统通过文件方式处理,话单量大时,文件数持续增长,文件在多个模块间进行读写处理,效率显著降低;(2)传统计费应用进程集中在小型机上处理,主机资源占用较高,其中批价进程CPU占用率居高不下,并且由于CPU多数被批价占用,其他应用进程争抢不过,会导致整体效率进一步下降,而小型机价格昂贵、扩展困难;(3)文件系统空间不足,随着话单量增加,文件系统压力增大,存在存储空间不足、系统读写效率下降等问题,而集中存储价格高,导致文件系统扩展困难;(4)内存库单机部署,随着用户数的增加,内存库对单机内存占用持续增加,已难以支撑用户的持续增长。

传统计费架构面临瓶颈,原有架构扩展成本高、效益低,而随着云计算、大数据等技术的发展,各种新技术在IT系统中得以实践验证,为建设高可用、易扩展的业务支撑系统提供了更多借鉴。通过计费系统的x86云化需求和PaaS平台技术能力对标,得出分布式Redis(Remote Dictionary Server,远程数据服务)内存库、分布式应用和Kafka消息中间件三个平台,基本具备技术可行性,为此提出基于消息的x86云化计费架构方案。基于消息的云化架构系统中的所有应用都部署在x86机器上,代替原来的小型机,解决了小型机价格昂贵、扩展难的问题,同时通过消息方式传输也大幅提升了批价全流程的效率,能够满足互联网时代客户对批价处理及时性的需求。

1 架构设计目标

基于消息的云化架构设计总体目标是:取消现有计费系统的MDB自有内存数据库和大量的文件接口,适当整合计费账务的后台处理过程,打造全新的计费账务引擎,支持计费后台应用在x86服务器上部署,支持x86服务器横向扩展,支撑全电信业务的计费账务,从性能和功能上提升计费支撑系统。

x86分布式架构具备云思维模式。

系统解耦:应用与数据解耦、应用与应用解耦,各模块独立部署,互不影响。

分布式架构:数据存储和应用在地域基础上依据账户细粒度切割,支持分布式部署,实现系统水平扩展。

消息集群:Kafka消息集群。各业务话单通过消息在各个模块之间传输,一台kafka服务器为一个broker,一个集群由多个broker组成。

交通运输部近日印发了《农村公路建设质量管理办法》(以下简称《办法》)。《办法》聚焦当前农村公路建设质量管理中的突出问题,进一步明确了地方政府农村公路建设质量监管责任和施工企业质量主体责任,强化了农村公路质量关键环节管控。

x86云化部署:应用层支持x86云化部署,通过集群管理实现故障自动接管与快速扩展,消除x86服务器高故障率带来的影响,降低建设成本。

引入缓存机制:通过缓存提升应用访问数据性能,同时缓解吞吐压力。

基于消息的计费x86云化系统继承现有计费账务业务逻辑,并具备新的技术特点和领先的规划预研,具体的需求目标表现在以下方面:

营造舒适的工作环境、优化办公环境、物品放置有序、标识明确。同时培养护士积极向上的情感,提高心理承受能力。尽力丰富业余生活,比如科室一起郊游、召开谈心会、互送小卡片等,让护士得到归属感。

(1)使用分布式内存数据库,采用开源成熟的Redis方案,Redis集群对整个计费账务应用提供资料数据服务。

(2)使用消息服务,模块与模块之间不再使用文件接口,采用被广泛使用的Kafka消息中间件。

(3)使用分布式配置服务,取消现有文件参数配置方式,参数存储在zookeeper节点中,并可做到参数有变动即可通知应用。

(4)使用参数共享内存,分拣批价使用的局数据、资费参数存储在共享内存中,共享内存为所有的计费账务后台应用提供参数服务。

2 基于消息的云化架构实现方式

Message:Kafka通信的基本单位。Message为话单结构的序列化二进制串,采用protobuf序列化,序列化之后的串前面加两个字节标识,用来区分具体业务类型(如语音、短信、流量等)。

图1 基于消息的云化系统整体架构

2.1 目标架构部署设计

基于消息的云化系统架构总体部署如图2所示。下面从应用程序集群部署、内存数据库集群部署、消息中间件集群部署三方面进行说明。

2.1.1 应用程序集群部署

基于消息的云化计费系统服务器从逻辑功能上分为四组,每一组都可以是一对互为备份的服务器或一个服务器群。可以根据不同的业务量配置集群的服务器数量。

SPSS21.0统计分析,计量资料数值用±s表示,均行正态分布检验,采用双侧检验,比较用t检验。组内治疗前后采用配对t检验,两组组间比较则用独立样本t检验。计数资料率用卡方检验。P<0.05:差异有统计学意义。

应用服务器集群完成分布式BILLING后台应用部署,为充分利用x86服务器的性能以及便于扩展的优势,可以按区域拆分多子集群,同一个区域的业务会分多个应用进程进行处理。应用程序做无状态设计,同一个区域的用户能被该区域用户组的任意一个应用进程处理。在实际部署时,同一个区域用户组的应用需要分布在不同的机器上,这样一来,当部分应用服务器发生故障时,其业务可以被其它应用服务器实时接管,不致于出现区域业务中断的情况。

2.1.2 内存数据库集群部署

在基于消息的云化系统中,关键数据的存放载体是内存集群。内存管理的物理部署有如下的设计原则:用户账单和账户余额等数据按区域分主机加载于不同的内存管理中;为提升系统处理性能,内存管理按资料应用范围的不同分集群进行存储,如分拣资料集群、批价资料集群等,同时,同一个集群分多个节点,对资料进行均分以提升处理效率;为了保证系统的可靠性,对所有节点采取“一主两从”的方式对用户资料进行冗余存储,同时在主节点进行更新操作,在从节点进行查询操作,以进一步提高性能。

2.1.3 消息中间件集群部署

为提高处理性能,基于消息的云化计费系统采用消息中间件取代了传统架构系统中的文件,作为话单流转的中间载体。与内存管理类似,为了提升系统处理性能,消息中间件也根据存放消息类型的不同分集群进行存放,同一个集群内为管理方便根据区域分不同的topic,同一个topic内再根据不同的用户分不同的partition进行存储。话单作为向最终用户收费的依据,必须确保其在整个处理过程中的完整性,不能丢失,因此对消息中间件的数据也要做相应的持久化。

图2 基于消息的云化系统架构总体部署

2.2. 消息服务

传统计费后台架构模块间接口采用文件方式,基于消息的x86云化系统采用大量的PC服务器,若还继续采用文件接口则文件读写效率将更低,也不利于PC服务器的横向扩展,因此采用Kafka消息接口代替原有的文件接口,模块与模块之间不再通过文件交互。

2.2.1 消息集群架构

在这种正玩得热闹的时候,翠姨也来参加了。翠姨弹了一个曲子,和我们大家立刻就配合上了。于是大家都觉得在我们那已经天天闹熟了的老调子之中,又多了一个新的花样。

业务处理组:Kafka消息消费组。同一个业务处理模块的不同进程组成一个Consumer Group,进程的增加或减少将会自动地进行rebalance操作。

系统能力:数据存储,包括资料等;数据管理,包括元数据管理、数据清理、数据备份;数据服务,包括资料的查询、更新服务;数据与事件处理,处理计费出账、账务管理、信息管理触发的数据同步事件,并转换成新事件,触发后续模块(如消费提醒等)。

Topic:Kafka处理消息的不同分类。业务模块的输入为一个Topic,输出可以有多个Topic。

Kafka集群:按业务分开部署。考虑到批价Partition分区较多,与批价相关的Topic组成单独Kafka集群,批价之前的业务模块组成一个Kafka集群,将消费提醒、信控及其他外围需要的Topic组成一个Kafka集群。

其专职安全人员要做好基坑巡视检查工作,巡视他不仅可以及时发现险情,而且能系统地记录、描述基坑施工和周边环境的变化过程,及时发现被披露的不利地质状况,其专职安全人员要做好以下几点内容:

2.2.3 消息分区设计

信息管理主要负责计费系统三户资料的维护管理,其核心功能是将营业变动的资料数据采集过来后,根据计费系统三户资料模型进行数据内部计算转换,然后发布到计费系统各功能模块中。信息管理包括以下两方面:

消息分区设计如图3所示,说明如下:

在传统架构的数据层与业务层之间加入技术组件层,通过技术组件层实现消息传输,并且具备云化扩展能力。整体架构见图1。

Partition:Topic物理上的分组。一个Topic可以分为多个Partition,通过Partition方式进行分布式消费。Partition中的每条消息都会被分配一个有序的id(offset),这样一来,每个Partition都是一个有序的队列,能够保证每个Partition内的消息顺序消费即保证了话单的按序处理。Topic分区数目:结合一般生产环境中各个模块的进程数目,设置每个Topic的分区数目。

王哲,洑颢,梁照恒,等.基于PS@Ag纳米探针和Si@Ag阵列基底的SERS特性的肿瘤标志物免疫检测[J].光子学报,2018,47(12):1228002

Producer:消息的生产者。根据指定的Partition分区函数(key进行hash)将消息发布到指定topic的partition里面。

Consumer:消息消费者。从Topic获取消息,并控制获取消息的offset。

1)学生评价。学生是实践教学的直接参与者,是知识的接受和学习者,对实践教学质量有着最客观和直接的感受。因此,学生评价应在实践教学评价体系中占据较大比重。每次评价时,学生以无记名方式,在网络中按照既定的评价指标体系对自己的实践授课教师的教学水平和效果进行评价。

Consumer Group:同一个业务模块组成一个消费组。Kafka保证每条消息在同一个Consumer Group里只会被一个Consumer消费,且一个Partition也只会被一个Consumer消费。

图3 消息分区设计

该架构采用主从方式提供高可用保障,应用通过DNS连接MDB实例库。写操作作用于Master。具体架构见图4。

考虑到计费处理的话单不能丢失,需要确保每条消息至少被处理一次,那么就有可能一条消息会消费多次,因此需考虑数据一致性问题。

5.陈振孙《直斋书录解题》:“《嵇中散集》十卷。魏中散大夫谯嵇康叔夜撰。本姓奚,自会稽徙谯之铚县稽山,家其侧,遂氏焉;取稽字之上,志其本也。所著文论六七万言,今存于世者仅如此;《唐志》犹有十五卷。”

分析计费业务流程,预分拣解析生成标准化话单,求取必要的话单属性,分拣求取用户资料,批价过滤重复话单并对话单进行划价,生成账单及详单,最后详单入数据库。

对同一条话单消息进行预分拣及分拣,不管处理多少次都能保证结果的一致性,满足幂等性要求。同一条消息即使多次消费导致出现重复话单,后续批价模块也可以排除掉重复话单,保证话单消息的唯一性。

为保证话单消息不丢失、不重复处理,考虑话单入口模块即预处理模块在输出消息时生成唯一msgId,写入Redis缓存。话单消息入库时,判断msgId在redis是否存在,若存在则代表此话单未入库;若不存在则代表此话单已被入库,需跳过此条话单消息。话单消息入库完成后,从redis删除msgId。新增模块每日定时扫描Redis,将N天前未处理的msgId(代表这些消息丢失)进行回收,再次进行计费处理。

另外批价新增排重功能,过滤信息存放在Redis缓存,处理话单消息前判断话单是否是唯一话单,话单若唯一则进行下一步处理,若是重复话单则跳过处理。批价处理完成后将唯一msgId存入Redis缓存。

2.3 计费数据服务

计费数据服务(BDS)将计费账务数据统一管理,为应用提供数据服务。计费数据服务建设的内容包括:

2.2.2 Topic划分

技术架构:采用分布式的架构,支持系统水平扩展;支持BDS部署到x86服务器;采用redis cluster版本为内存数据缓存中心。

试验地点分别位于民乐县的3个乡(镇):民乐县三堡镇新庄村(海拔高度1 800 m)、民乐县洪水镇(2 100 m)、民乐县顺化乡(海拔高度2 300 m)。

2.3.1 REDIS集群架构

2.2.4 幂等性设计

2.3.2 信息管理

相关部门应该多关注农村的体育教学,并根据农村体育教学的实际情况予以帮助和支持,并对体育场地的设施和体育器材进行调查,在体育设施以及器材不足的学校给予经费的补充,让学校能够增添运动器材。要改变农村学校领导对体育教学的传统的教学观念,充分地了解和认识体育教学的重要性,在农村中学当中开展“校园足球”能够有效地缓解学生在学习理论知识当中的压力,还能有效地锻炼学生的身体,让学生能够拥有良好的精神品质和鼓励学生积极地参与体育活动等[4]。

孟子所说的“此天之所与我者”,可以理解为心的“思考”能力是人类特有的,这是人区别于动物的重要标志,强调了思考对于人类的重要性。

(1)计费三户模型变动:原来计费三户模型与营业侧三户模型基本保持一致,只需要简单转换即可;新架构为提升计费出账效率,须依据计费需求调整三户模型,同步数据的计算转换工作复杂度将大幅提升。

(2)同步机制改变:原来基于文件的同步机制在效率和时延方面都无法满足目前的业务要求,需要改进为支持消息接口的方式。

1.临床资料:收集2010年9月至2017年12月间河南省肿瘤医院放射科行CT或MRI检查并经手术病理确诊的27例SPT患者的临床及影像学资料。所有患者影像学检查前未行穿刺活检或相关治疗。

此外,传统的营业与计费侧数据一致性稽核缺乏考虑,本方案将重点加强,保证计费数据的正确性。

信息管理外部与营业、账务管理、扣费提醒、免费资源生成、SP包月费、计费出账、计费数据服务进行交互。

2.4 配置文件管理

将配置文件数据发布到zk节点上,供其他订阅者(x86机器)动态获取数据,实现配置信息的集中式管理和动态更新。

利用zookeeper的特性,将配置信息保存在 Zookeeper的某个目录节点中,然后监控配置所有需要修改的应用机器的信息状态,一旦配置信息发生变化,每台应用机器就会收到Zookeeper 的通知,然后从Zookeeper获取新的配置信息应用到系统中。

2.5 运维提升

基于消息的云化计费系统,物理主机多、平台架构复杂、应用配置部署灵活,在提升性能的同时也会带来未知的风险,所以需要运维能力同步提升,重点进行以下监控:(1)加强刀片机和应用进程的管理,通过前台工具,快速灵活地实现分组和路由的配置管理。(2)加强内存网格管理,将主机代理RA收集的主机内存使用情况、CPU利用率、业务通道消息队列等信息及时展现,根据资源使用情况,对分组和路由进行调整。(3)加强负载均衡管理,根据负载均衡算法,定时统计当前各刀片机和应用进程的实际负载情况,调整应用进程的主机分布,做到负载均衡。(4)加强路由优化管理,提供路由参考数据给消息代理优化路由能力,这部分功能在主机代理模块RA已有实现,将管理域收集的信息作为补充。(5)加强统计分析功能,提供报表数据源管理、报表模板管理和多种统计视图。(6)提供监控管理功能和对外网管系统接口,全面管控计费相关的平台和应用。

3 基于消息的云化计费系统应用效果

基于消息的云化计费系统已在江苏联通正式上线,通过与原有传统架构计费系统进行比较,新架构系统优势明显:(1)基于消息的云化架构使用x86主机,其价格相对低廉,可以横向扩展,解决传统架构扩展的“天花板”问题;(2)合并计费的中间环节,并且采用内存排重方式,提升了系统处理性能;(3)采用Kafka消息传输代替原有的文件传输,减少了文件读写耗时,处理效率显著提升;(4)采用集群方式进行部署,节点出现异常时可以立刻被其他节点接管,显著提升了系统可靠性。

系统部署后,计费耗时显著降低,计费平均耗时比原有系统下降80%;流量提醒和信控停机耗时下降90%,提升了用户感知,降低了欠费风险;用户话单消息化提供给外围实时服务系统,耗时下降95%,大大提升了实时服务的及时性。

据了解,淄博全市共规划21处以医带养型养老服务设施、10处以医托养型养老服务设施、1处以医联养型养老服务设施、15处医养共建型养老服务设施。至2020年,基本实现医疗卫生和养老服务资源有序共享、覆盖城乡、规模适宜、功能合理的医养结合服务格局。

4 结束语

使用基于kafka消息的x86云化计费系统,有效提升了批价效率,信控停机、短信提醒等业务的及时性也成倍提高,对目前行业的投诉热点“流量提醒”将有显著改善。同时,批价效率提升,用户实时的详单查询、费用查询的准确性也得到提升,可以进一步增强客户感知及品牌口碑。总之,运用最新的互联网化的体系结构,可以解决原有架构扩展难、效率低的问题,满足客户互联网化实时体验需求,为广大客户提供极致的体验。

(收稿日期: 2018-12-14;

技术审稿:姚国章;

责任编辑: 赵明亮)

标签:;  ;  ;  ;  ;  ;  

基于Kafka消息的云化计费系统研究与实现论文
下载Doc文档

猜你喜欢