构建羊城通记名卡交易实时推送系统

2020-07-04 20:28邹大毕黄倚佳温晓丽谢振东李靖凯
现代信息科技 2020年3期

邹大毕 黄倚佳 温晓丽 谢振东 李靖凯

摘  要:随着越来越多的羊城通记名卡用户希望可以实时获悉交易信息,并可以随时查看过往的每一笔消费记录,作为自己的乘车凭据。因此,为了搭建羊城通记名卡交易实时推送系统,提出基于RabbitMQ+Redis+MongoDB为核心的解决方案,该方案可以满足交易数据的需求。当用户使用记名卡乘坐公交地铁时,用户可以通过羊城通官方APP准实时收到相应的交易记录信息。此外,该系统也支持用户随时随地在查询自己的历史消费记录。此系统的搭建及相关服务的推出,进一步提升了羊城通记名卡的服务水平,提高了用户的满意度。

关键词:羊城通记名卡;RabbitMQ;Redis;MongoDB;羊城通官方APP

中图分类号:TP311.5      文献标识码:A 文章编号:2096-4706(2020)03-0017-03

Abstract:As more and more users of Yangchengtong registered card want to know the transaction information in real time,and can view every past consumption record at any time as their own riding credentials. Therefore,in order to build a real-time push system for Yangchengtong registered card transaction,a solution based on RabbitMQ + Redis + MongoDB is proposed,which can meet the needs of transaction data. When the user uses the registered card to take the subway,the user can receive the corresponding transaction record information in real time through the official APP of Yangchengtong. In addition,the system also supports users to query their historical consumption records anytime and anywhere. The establishment of this system and the introduction of related services further improve the service level of Yangchengtong registered card and improve the satisfaction of users.

Keywords:Yangchengtong named card;RabbitMQ;Redis;MongoDB;Yangchengtong APP

0  引  言

羊城通卡是广州市的交通卡,其使用范围覆盖了公交、地铁、水上巴士等全方位公共交通出行领域,其具有不记名、不挂失的特点。近年来,鉴于挂失需求的不断显现,羊城通卡推出与用户的实名信息绑定的记名卡,此记名卡具有可挂失、可补办、可注销、余额可转移的特点,得到了广大用户的欢迎,其发行量和使用量也在迅速增加。

鉴于公交卡应用场景的特殊性,其交易主要为脱机验证交易,用户想要获知实时交易记录、实时余额以及历史交易时,需要利用安卓NFC手机贴卡查询或者到自助机、人工客服点查询,具有较多的限制,不易使用,用户体验差。

随着网络环境、羊城通卡受理终端设备等相关基础设施服务水平的提升,羊城通卡的脱机交易可以准实时上传到后端系统。基于此,鉴于羊城通记名卡与用户信息进行了绑定,可以较好地确认卡与用户的关联,为了提升用户持卡服务体验,本文基于高可靠并发架构技术构建了羊城通记名卡交易查询与实时推送系统。用户只需要下载羊城通官方APP并绑定自己的记名卡就能随时随地收到记名卡交易推送或查询记名卡历史交易记录,极大地提高用户的体验感和便利性。

1  相关技术概述

近几年,互联网各个中间件技术发展速度非常快,其中,因为RabbitMQ、Redis、MongoDB这三个中间件的功能和性能日益完善和稳定,更是受到大量互联网项目开发者的青睐。记名卡消费记录查询和实时推送系统就是以这三个中间件为核心来搭建的。下面将逐一介绍这三个中间件的特点和大致原理。

1.1  RabbitMQ

RabbitMQ是消费-生产者模型的一个典型的代表,消息生产者(producer)往消息队列中不断写入消息,而另一端的消息消费者(consumer)则可以读取或者订阅队列中的消息,是一款基于AMQP协议可复用的企业消息系统。业务上,可以实现服务提供者和消费者之间的数据解耦,提供高可用性的消息传输机制,在实际生产中应用相当广泛。

在羊城通系统中,RabbitMQ存放的是記名卡交易记录;producer包括刷卡终端和羊城通卡核心交易系统,其中刷卡终端准实时上送羊城通卡消费记录,核心交易系统则推送羊城通卡充值记录等;consumer为本系统的交易数据处理及推送组件。

1.2  Redis

Redis是一个开源的,使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。同时Redis也是一个Key-Value存储系统,更是一个高性能的Key-Value数据库。最主要的是Redis还支持主从同步。

Redis核心对象RedisObject包含了数据结构、编码方式、指针、虚拟内存等,如图1所示。数据类型包括string、hash、list、set、sorted set;编码方式包括raw、int、ht、zipmap、linkedlist、ziplist、intset。

1.3  MongoDB

MongoDB是一个基于分布式文件存储的数据库,由C++编写,旨在为Web应用提供可扩展、高性能的数据存储解决方案。它是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库中功能最丰富、最像关系型数据库的。在高负载情况下,添加更多的节点,可以保证服务器的性能。

MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB文档类似于JSON对象,字段值可以包含其他文档、数据和文档数组。

2  记名卡交易实时推送系统

基于前述中间件,本文提出的记名卡交易实时推送系统的架构如图2所示。

如图所示,系统主要组件及数据流程是:

(1)刷卡终端机,负责准实时将羊城通卡交易记录上传到后端系统;

(2)记名卡系统集群,负责接收终端交易记录,并作为producer将记录传送给RabbitMQ消息服务系统;

(3)RabbitMQ集群,消息队列服务集群系统;

(4)数据接收服务器集群,作为consumer将RabbitMQ中的消息提取出来;

(5)Redis服务器集群,是一个缓存服务系统,用于交易记录的缓存;

(6)数据主动获取服务器集群,负责交易数据的主动获取和处理服务,它从缓存中获取数据并存入MongoDB,同时将实时记录同步到推送服务器;

(7)MongoDB集群,负责交易记录的持久化存储;

(8)推送服务器,负责将实施交易记录推送到APP前端系统;

(9)羊城通APP,与用户实现交互的前端应用服务系统,支持实时交易记录的接收与展示,支持历史交易记录查询等。

3  记名卡交易实时推送系统分析

3.1  海量交易数据上送处理

由于记名卡用户的基数大且日渐增加,记名卡的交易数据量以及交易上送服务的QPS会非常大,而http协议的性能相对较差,因此本系统选择使用的RabbitMQ消息集群系统作为传输辅助工具。

这种方法的好处是支持动态横向扩容系统,即随着记名卡数据量的日益增加,当达到性能瓶颈时,可以通过增加RabbitMQ节点来支持性能提升。

3.2  海量交易数据存储和推送处理

羊城通记名卡交易数据到达羊城通APP的服务器之后,由于数据量大,若收到一条数据就马上进行入库和推送操作,会非常消耗网络性能。

因此,本系统设计时,数据会先放入Redis集群服务器作为缓存,另外启动一个主动获取数据的服务定时批量从Redis服务集群提取交易数据,并批量插入MongoDB数据库和推送服务器,最终到达用户。

当用户需要查询历史交易记录的时候,只需要直接查询MongoDB数据库就可以完成这个操作,由于MongoDB横向扩展非常方便,所以不用担心数据量日益巨大带来的性能瓶颈。

4  结  论

随着羊城通记名卡的普及率越来越高,提高用户体验、让记名卡服务更人性化,已经成为一项迫在眉睫的工作。基于此需求背景,本文提出了基于RabbitMQ+Redis+MongoDB的记名卡记录实时推送系统,此系统可以有助于解决记名卡用户消费无感知和查询历史交易记录成本高的问题,提升用户持卡服务满意度。

目前该系统完成搭建,正处于友好试运行阶段,后续将对该系统进行持续优化完善工作。

参考文献:

[1] 黄健宏.Redis设计与实现 [M].北京:机械工业出版社,2014.

[2] 陳德森,杨祖元.基于MongoDB的文本分类研究 [J].无线互联科技,2017(5):96-98.

[3] 骆文亮.基于异步消息处理的RabbitMQ运行原理探讨 [J].数码世界,2017(11):400.

作者简介:邹大毕(1981.12-),男,汉族,广东湛江人,系统架构设计师,移动互联网发展部副部长,硕士,研究方向:互联网软件技术、网络与信息安全技术。