CN113259476B - 消息推送方法及系统 - Google Patents
消息推送方法及系统 Download PDFInfo
- Publication number
- CN113259476B CN113259476B CN202110647966.4A CN202110647966A CN113259476B CN 113259476 B CN113259476 B CN 113259476B CN 202110647966 A CN202110647966 A CN 202110647966A CN 113259476 B CN113259476 B CN 113259476B
- Authority
- CN
- China
- Prior art keywords
- message
- node
- cloud
- push
- local
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/55—Push-based network services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请提供了一种消息推送系统、方法、装置、电子设备及存储介质;系统包括:云端节点、路由节点以及至少一个地理分区对应的本地节点;其中,路由节点用于存储地理分区的分区标识与本地节点间的关联关系;本地节点用于响应于针对目标对象的消息推送请求,发送针对目标对象的推送消息至云端节点;云端节点用于转发推送消息至目标对象的客户端,并接收客户端基于推送消息返回的响应消息,该响应消息包含目标分区标识;调用路由节点基于关联关系,查找到与目标分区标识相关联的目标本地节点;发送响应消息至目标本地节点,以完成针对推送消息的推送;通过本申请,能够降低云端节点对于存储的依赖,节省云端节点的存储空间,提高信息处理效率。
Description
技术领域
本申请涉及信息处理以及区块链技术领域,尤其涉及一种消息推送系统、方法、装置、电子设备及存储介质。
背景技术
在进行消息推送时,主要是内部机房将推送消息通过云端机房推送到用户端,用户端接收推送消息并返回相应的ACK至云端机房,而云端机房需要将ACK返回到发送推送消息的源内部机房以实现消息推送。
相关技术中,主要是在云端机房保存每条推送消息与源内部机房的映射信息,而云端机房在转发ACK时则可以通过消息ID找到相应的源内部机房。但是,该方案增加了云端机房对存储的依赖,且由于云端机房有多个,消息推送和转发ACK的云端机房可能不是同一个机房,此时则需要把映射信息存储到所有云端机房,如此则更加复杂,对存储依赖更大。
发明内容
本申请实施例提供一种消息推送系统、方法、装置、电子设备及存储介质,能够降低云端节点对于存储的依赖,节省云端节点的存储空间,提高信息处理效率。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种消息推送系统,包括:云端节点、路由节点以及至少一个地理分区对应的本地节点;其中,所述路由节点用于存储所述地理分区的分区标识与所述本地节点间的关联关系;
所述本地节点,用于响应于针对目标对象的消息推送请求,发送针对所述目标对象的推送消息至所述云端节点;
所述云端节点,用于转发所述推送消息至所述目标对象的客户端,并接收所述客户端基于所述推送消息返回的响应消息,所述响应消息,包含发送所述推送消息的本地节点对应的目标分区标识;
基于所述响应消息,调用所述路由节点基于所述关联关系,查找到与所述目标分区标识相关联的目标本地节点;
发送所述响应消息至所述目标本地节点,以完成针对所述推送消息的推送。
本申请实施例还提供一种消息推送方法,应用于包括云端节点、路由节点以及至少一个地理分区对应的本地节点的消息推送系统;其中,所述路由节点用于存储所述地理分区的分区标识与所述本地节点间的关联关系;包括:
云端节点接收到针对目标对象的推送消息,所述推送消息,为所述本地节点响应于针对所述目标对象的消息推送请求所发送;
转发所述推送消息至所述目标对象的客户端,并接收所述客户端基于所述推送消息返回的响应消息,所述响应消息,包含发送所述推送消息的本地节点对应的目标分区标识;
基于所述响应消息,调用所述路由节点基于所述关联关系,查找到与所述目标分区标识相关联的目标本地节点;
发送所述响应消息至所述目标本地节点,以完成针对所述推送消息的推送。
本申请实施例还提供一种消息推送装置,设置于云端节点,所述云端节点位于消息推送系统,所述消息推送系统还包括路由节点以及至少一个地理分区对应的本地节点;其中,所述路由节点用于存储所述地理分区的分区标识与所述本地节点间的关联关系;包括:
接收模块,用于接收到针对目标对象的推送消息,所述推送消息,为所述本地节点响应于针对所述目标对象的消息推送请求所发送;
转发模块,用于转发所述推送消息至所述目标对象的客户端,并接收所述客户端基于所述推送消息返回的响应消息,所述响应消息,包含发送所述推送消息的本地节点对应的目标分区标识;
调用模块,用于基于所述响应消息,调用所述路由节点基于所述关联关系,查找到与所述目标分区标识相关联的目标本地节点;
发送模块,用于发送所述响应消息至所述目标本地节点,以完成针对所述推送消息的推送。
本申请实施例还提供一种电子设备,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现本申请实施例提供的消息推送方法。
本申请实施例还提供一种计算机可读存储介质,存储有可执行指令,所述可执行指令被处理器执行时,实现本申请实施例提供的消息推送方法。
本申请实施例具有以下有益效果:
提供一种包括云端节点、路由节点以及至少一个地理分区对应的本地节点的消息推送系统,该路由节点存储有地理分区的分区标识与本地节点间的关联关系;在消息推送时,当云端节点接收到客户端基于本地节点推送的推送消息返回的响应消息时,由于该响应消息中包含发送推送消息的本地节点对应的目标分区标识,云端节点基于响应消息,通过调用路由节点基于存储的关联关系,查找到与目标分区标识相关联的目标本地节点,该目标本地节点即为发送推送消息的源本地节点,从而将响应消息发送至目标本地节点则完成了针对推送消息的推送;如此,降低了云端节点对于存储的依赖,节省了云端节点的存储空间,提高信息处理效率。
附图说明
图1是本申请实施例提供的消息推送系统的架构示意图;
图2是本申请实施例提供的实施消息推送方法的电子设备500的结构示意图;
图3是本申请实施例提供的消息推送系统中各节点之间的交互流程示意图;
图4是本申请实施例提供的消息推送系统的架构示意图;
图5是本申请实施例提供的路由信息复制组件的处理示意图;
图6是本申请实施例提供的消息推送方法的流程示意图;
图7是本申请实施例提供的消息推送方法的处理示意图;
图8是相关技术中提供的消息推送方法的示意图;
图9是本申请实施例提供的用户上下线路由信息的示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
1)客户端,终端中运行的用于提供各种服务的应用程序,例如即时通讯客户端、视频播放客户端。
2)响应于,用于表示所执行的操作所依赖的条件或者状态,当满足所依赖的条件或状态时,所执行的一个或多个操作可以是实时的,也可以具有设定的延迟;在没有特别说明的情况下,所执行的多个操作不存在执行先后顺序的限制。
3)消息推送服务:指运营人员通过自己的产品或第三方工具对用户移动设备进行的主动消息推送。用户可以在移动设备锁定屏幕和通知栏看到推送消息通知,通知栏点击可唤起客户端并去往相应页面。比如平时在锁屏上看到的微信消息等都属于客户端的消息推送行列。推送(Push)是一种技术概念,是指从服务端实时发送信息到客户端。典型推送服务是APNS(Apple Push Notification Service)、GCM(Google Cloud Messaging)等服务。
4)远程过程调用(Remote Procedure Call,RPC),客户机/服务器模式计算把远程过程调用与其它技术(如消息传递)一道,作为系统间通信的一种机制。客户机执行自己的任务,但靠服务器提供后端文件服务。RPC为客户机提供向后端服务器申请服务的通信机制。如果你把客户机/服务器应用程序想作是一个分离的程序,服务器能运行数据访问部分,因为它离数据最近,客户机能运行数据表示和与用户交互的前端部分。这样,远程过程调用可看作是把分割的程序通过网络重组的部件。
5)Kafka,是一个开源的消息队列,使用生产-消费的模型来传递消息,是一种高吞吐量的分布式发布订阅消息系统。
6)远程字典服务(Remote Dictionary Server,Redis),是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
基于上述对本申请实施例中涉及的名词和术语的解释,下面说明本申请实施例提供的消息推送系统。参见图1,图1是本申请实施例提供的消息推送系统的架构示意图,为实现支撑一个示例性应用,终端(示例性示出了终端400-1和终端400-2)、本地节点100、云端节点200以及路由节点300之间通过网络600连接;
其中,终端400-1为推送消息的推送方,可以安装有消息推送应用程序,终端400-2(即目标对象的客户端所在终端)为推送消息的接收方,可以安装有用于接收推送消息的客户端(比如即时通信客户端、媒体信息客户端、视频播放客户端等),网络600可以是广域网或者局域网,又或者是二者的组合,使用无线或有线链路实现数据传输。
终端400-1,用于响应于针对目标对象的消息推送指令,发送针对目标对象的消息推送请求至本地节点100;
本地节点100,用于接收并响应于针对目标对象的消息推送请求,发送针对目标对象的推送消息至云端节点200;
云端节点200,用于转发推送消息至终端400-2;
终端400-2,用于接收并返回针对推送消息的响应消息至云端节点200;
云端节点200,还用于接收终端400-2基于推送消息返回的响应消息(这里,该响应消息包含发送推送消息的本地节点对应的目标分区标识);基于响应消息,调用路由节点基于关联关系,查找到与目标分区标识相关联的目标本地节点;发送响应消息至目标本地节点,即本地节点100;
本地节点100,还用于接收到云端节点200发送的响应消息,以确定完成针对推送消息的推送。
在实际应用中,上述消息推送系统中各节点可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器,另外,上述消息推送系统中的多个节点还可组成为一区块链,而每个节点则为区块链上的节点。终端(如终端400-1和终端400-2)可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能电视、智能手表等,但并不局限于此。终端(如终端400-1和终端400-2)以及消息推送系统中各节点可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
参见图2,图2是本申请实施例提供的实施消息推送方法的电子设备500的结构示意图。在实际应用中,电子设备500可以为图1示出的节点或终端,以电子设备500为图1示出的云端节点为例,对实施本申请实施例的消息推送方法的电子设备进行说明,本申请实施例提供的电子设备500包括:至少一个处理器510、存储器550、至少一个网络接口520和用户接口530。电子设备500中的各个组件通过总线系统540耦合在一起。可理解,总线系统540用于实现这些组件之间的连接通信。总线系统540除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线系统540。
处理器510可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。
用户接口530包括使得能够呈现媒体内容的一个或多个输出装置531,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口530还包括一个或多个输入装置532,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。
存储器550可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器550可选地包括在物理位置上远离处理器510的一个或多个存储设备。
存储器550包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(RAM,Random Access Memory)。本申请实施例描述的存储器550旨在包括任意适合类型的存储器。
在一些实施例中,存储器550能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。
操作系统551,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务;
网络通信模块552,用于经由一个或多个(有线或无线)网络接口520到达其他计算设备,示例性的网络接口520包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(USB,Universal Serial Bus)等;
呈现模块553,用于经由一个或多个与用户接口530相关联的输出装置531(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口);
输入处理模块554,用于对一个或多个来自一个或多个输入装置532之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。
在一些实施例中,本申请实施例提供的消息推送装置可以采用软件方式实现,图2示出了存储在存储器550中的消息推送装置555,其可以是程序和插件等形式的软件,包括以下软件模块:接收模块5551、转发模块5552、调用模块5553和发送模块5554,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分,将在下文中说明各个模块的功能。
在另一些实施例中,本申请实施例提供的消息推送装置可以采用软硬件结合的方式实现,作为示例,本申请实施例提供的消息推送装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本申请实施例提供的消息推送方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application Specific IntegratedCircuit)、DSP、可编程逻辑器件(PLD,Programmable Logic Device)、复杂可编程逻辑器件(CPLD,Complex Progra mmable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable Gate Array)或其他电子元件。
基于上述对本申请实施例提供的消息推送系统进行详细说明。本申请实施例提供的消息推送系统包括:云端节点、路由节点以及至少一个地理分区对应的本地节点;其中,路由节点用于存储地理分区的分区标识与本地节点间的关联关系。参见图3,图3是本申请实施例提供的消息推送系统中各节点之间的交互流程示意图,包括:
步骤101:本地节点响应于针对目标对象的消息推送请求,发送针对目标对象的推送消息至云端节点。
这里,该消息推送系统包括:云端节点、路由节点以及至少一个地理分区对应的本地节点。在本申请实施例中,根据地理位置划分为多个地理分区,比如将北京、天津划分为一个地理分区,将上海、江苏划分为一个地理分区等等;针对每个地理分区,分别设置相应的分区标识,该分区标识是全局唯一且不变的,用于标识相应的地理分区。
进一步地,每个地理分区对应相应的本地节点,该本地节点可以是一个或者多个,用于支持该地理分区的消息推送服务。在本申请实施例中,该消息推送系统包括有路由节点,该路由节点用于存储地理分区的分区标识与本地节点间的关联关系,比如地理分区的分区标识为Shard1,关联的本地节点为节点1;地理分区的分区标识为Shard2,关联的本地节点为节点2等等。
在实际应用中,在本申请实施例中,上述地理分区的分区标识与本地节点间的关联关系存储于路由节点,在另外一些实施例中,上述关联关系还可保存于区块链上。
在实际应用中,在本地节点接收到消息推送请求后,将相应的待推送消息通过云端节点推送到用户端,用户端接收到该待推送消息后,则返回针对该待推送消息的响应消息,即应答消息ACK,用于标识用户端确认接收到该待推送消息。该响应消息也需要云端节点转发至该待推送消息的源本地节点(即推送该待推送消息的本地节点),以使得该源本地节点在接收到该响应消息时,确认该待推送消息推送成功,从而不再重复推送。
基于此,在本申请实施例中,消息推送端可以设置针对目标对象的消息推送任务,比如可以在消息推送终端运行的消息推送应用程序上设置;当消息推送终端接收到消息推送者触发的针对消息推送任务的任务执行指令时,发送针对目标对象的消息推送请求至本地节点,该本地节点可以包含支持推送服务的推送服务器。
本地节点接收并响应于针对目标对象的消息推送请求,发送针对目标对象的推送消息至云端节点。
在实际应用中,本地节点可以向用户端进行消息推送需要云端节点进行转发,即,本地节点可以是在用户端的客户端以及云端节点之间建立有通信连接的状态下进行消息推送,因此,在一些实施例中,该消息推送系统还包括:域名解析服务节点;该域名解析服务节点,用于响应于客户端的连接请求,基于客户端所对应的地理位置信息,将对应客户端的连接请求发送至与地理位置信息相匹配的云端节点;
相应的,云端节点,还用于接收到连接请求,从至少一个地理分区对应的本地节点中,选择与地理位置信息相匹配的地理分区所对应的本地节点;以及,执行与选择的本地节点进行远程过程调用的交互验证,并在交互验证成功后,建立与客户端间的通信连接。
这里,上述消息推送系统还包括域名解析服务节点,目标对象的客户端可以通过域名解析服务节点与云端节点建立通信连接,比如TCP连接。具体地,响应于目标对象触发的客户端上线操作,客户端发送连接请求至域名解析服务节点;域名解析服务节点接收并响应于客户端的连接请求,获取客户端所对应的地理位置信息,即客户端所在终端的地理位置信息,从而选择与该地理位置信息相匹配的云端节点,在实际实施时,基于该地理位置信息,可以选择与客户端所处终端之间的距离处于预设距离范围内的云端节点,或者直接选择与客户端所处终端的距离最小的云端节点。
域名解析服务节点在选择与客户端对应的地理位置信息相匹配的云端节点后,将对应客户端的连接请求发送至该选择的云端节点。
相应的,云端节点在接收到连接请求后,响应于该连接请求,从至少一个地理分区对应的本地节点中,选择与地理位置信息相匹配的地理分区所对应的本地节点。这里,在本申请实施例中,根据地理位置划分为多个地理分区,比如将北京、天津划分为一个地理分区,将上海、江苏划分为一个地理分区等等;针对每个地理分区,分别设置相应的分区标识,该分区标识是全局唯一且不变的,用于标识相应的地理分区。基于此,可以基于客户端的地理位置信息,确定该客户端所处终端处于哪个目标地理分区(即与地理位置信息相匹配的地理分区),从而选择与该目标地理分区相对应的本地节点。
云端节点在从至少一个地理分区对应的本地节点中,选择与地理位置信息相匹配的地理分区所对应的本地节点后,执行与选择的本地节点进行远程过程调用的交互验证,即云端节点发起与选择的本地节点之间的RPC调用,与选择的本地节点进行RPC交互,包括进行鉴权、保存连接状态、路由信息等。当本地节点交互验证通过后,即鉴权成功后,返回相应的交互验证成功信息至云端节点;云端节点在接收到该交互验证成功信息后,即确定交互验证成功,此时建立并保持与客户端间的通信连接。
作为示例,参见图4,图4是本申请实施例提供的消息推送系统的架构示意图。这里,消息推送系统包括两个云端节点(即云端机房1和云端机房2)、域名解析服务节点(即DNS服务)、三个本地节点(即本地机房1、本地机房2和本地机房3)、以及路由节点(即GZS,Global Zone Service)。
其中,用户的客户端发送连接请求时,DNS服务基于用户的地理位置信息,选择就近的云端机房1,将连接请求发送至该选择的云端机房1;云端机房1根据用户的地理位置信息,选择用户所处的地理分区的本地机房3,发起RPC调用,以在鉴权成功后,云端机房1建立并保持与用户的客户端间的通信连接。
在一些实施例中,本地节点,还用于响应于针对目标对象的消息推送请求,基于消息推送请求中携带的目标对象的对象标识,获取目标对象对应的路由信息;当基于路由信息确定客户端与云端节点间处于通信连接状态时,发送针对目标对象的推送消息至云端节点。
这里,在实际应用中,针对目标对象的消息推送请求携带目标对象的对象标识。本地节点响应于针对目标对象的消息推送请求,根据消息推送请求中携带的目标对象的对象标识,获取目标对象对应的路由信息,该路由信息可以包括目标对象的客户端、与该客户端建立通信连接的云端节点、及向该客户端执行消息推送的本地节点之间的关联关系,从而通过路由信息表示推送消息从发送到接收、到对应的响应消息返回到本地节点时,中间的传输结点的选择过程。
在获取到目标对象对应的路由信息后,基于路由信息确定客户端是否与云端节点间处于通信连接状态;当基于路由信息确定客户端与云端节点间处于通信连接状态时,发送针对目标对象的推送消息至云端节点。
在一些实施例中,当本地节点为至少两个时,各本地节点存储有目标对象的路由信息,且各本地节点包括路由信息复制组件;
该路由信息复制组件,用于订阅自身所在节点以外的其他本地节点中路由信息的路由更新消息;当路由更新消息表征其他本地节点的路由信息中存在更新内容时,获取其他本地节点的路由信息的第一更新时间点;当第一更新时间点晚于自身所在节点的路由信息的第二更新时间点时,复制更新内容至自身所在节点,并更新第二更新时间点。
这里,用户上线时会连接某个云端节点,云端节点根据用户的地理位置信息,选择一个就近的本地节点与之通信,在本地节点进行鉴权和保存连接状态、路由信息。因此,在本申请实施例中,需要每个本地节点均保存用户的路由信息,比如可以保存到Redis数据库,如此才能在推送时找到对应的云端节点以推送消息给用户。
在实际应用中,当某个本地节点的路由信息发生更新时,还需要将更新后的路由信息同步至其他本地节点。这里,针对每个本地节点均设置了相应的路由信息复制组件。
该路由信息复制组件可以订阅自身所在节点以外的其他本地节点中路由信息的路由更新消息,比如通过订阅Kafka消息实现;当路由更新消息表征其他本地节点的路由信息中存在更新内容时,比如新写入一条上线操作对应的操作数据,则获取其他本地节点的路由信息的第一更新时间点、以及自身所在节点的该路由信息对应的第二更新时间点,在实际实施时,该第一更新时间点即为更新内容的写入时间点。比较第一更新时间点和第二更新时间点,当第一更新时间点晚于第二更新时间点时,则复制更新内容至自身所在节点,并更新第二更新时间点。
作为示例,参见图5,图5是本申请实施例提供的路由信息复制组件的处理示意图。这里,包括本地节点1和本地节点2,且每个本地节点中均通过Redis集群存储有用户的路由信息、以及每个本地节点中均包含路由信息复制组件(即Replicator组件);通过订阅Kafka消息实现订阅其他本地节点中路由信息的路由更新消息。示例性的,当本地节点1对应的用户在应用中发生上下线操作时,写入更新内容(即相应的操作数据)至本地节点1的Redis集群,以更新其中存储的路由消息,并记录相应的第一更新时间点;同时在Kafka中写入该操作数据,以触发Kafka消息的发送;
此时本地节点2的信息复制组件(即Replicator组件)接收到订阅的Kafka消息,即路由更新消息,此时在确定自身所在节点的路由信息的第二更新时间点早于第一更新时间点时,则将本地节点1中路由信息的更新内容(即写入的操作数据)复制至本地节点2的Redis集群,以其中更新存储的路由消息,同时更新第二更新时间点。
在一些实施例中,上述路由信息还可保存于区块链上。
步骤102:云端节点转发推送消息至目标对象的客户端,并接收客户端基于推送消息返回的响应消息。
该响应消息,包含发送推送消息的本地节点对应的目标分区标识。
步骤103:基于响应消息,调用路由节点基于关联关系,查找到与目标分区标识相关联的目标本地节点。
这里,在云端节点接收到本地节点发送的针对目标对象的推送消息后,将该推送消息转发至目标对象的客户端。客户端在接收到该推送消息后,需要基于该推送消息,返回响应的响应消息,即应答消息ACK,以基于该响应消息向云端节点(进一步还可包括本地节点)确认已接收到该推送消息。
在本申请实施例中,该响应消息携带发送推送消息的本地节点对应的目标分区标识,即推送消息的源本地节点对应的分区标识。在实际应用中,该目标分区标识与客户端所接收到的推送消息携带的分区标识相一致,为客户端基于接收到的推送消息所携带的分区标识确定的。便于云端节点在接收到针对该推送消息的响应消息时,快速确定该推送消息的源本地节点对应的分区标识,从而快速确定该推送消息的源本地节点,以将响应消息转发至该源本地节点,以使得该源本地节点在接收到该响应消息时,确认该推送消息推送成功,从而不再重复推送。
云端节点在接收到客户端基于推送消息返回的响应消息后,基于该响应消息中携带的目标分区标识,通过相应的接口调用路由节点,使路由节点基于存储的地理分区的分区标识与本地节点间的关联关系,查找到与目标分区标识相关联的目标本地节点。
在一些实施例中,该响应消息携带相应的第一消息标识,从而通过第一消息标识携带上述目标分区标识;相应的,该云端节点,还用于基于响应消息,对响应消息的第一消息标识进行解析,得到响应消息包含的目标分区标识,并基于目标分区标识,调用路由节点基于关联关系,查找到与目标分区标识相关联的目标本地节点。
在实际应用中,响应信息携带相应的第一消息标识,该第一消息标识中嵌入了上述目标分区标识。该第一消息标识与客户端所接收到的推送消息携带的消息标识相一致,为客户端基于接收到的推送消息所携带的消息标识确定的。
云端节点在接收到客户端基于推送消息返回的响应消息后,基于该响应消息,对响应消息的第一消息标识进行解析,得到响应消息包含的目标分区标识,从而通过相应的接口调用路由节点,使路由节点基于存储的地理分区的分区标识与本地节点间的关联关系,查找到与目标分区标识相关联的目标本地节点。
在一些实施例中,本地节点还包括:消息标识生成组件;该消息标识生成组件,用于基于本地节点对应的分区标识、目标对象的对象标识以及当前时间,生成对应推送消息的第一消息标识;
以及,该消息标识生成组件,还用于当确定第一消息标识与历史消息标识冲突时,重新生成对应推送消息的第二消息标识,并将第二消息标识作为推送消息对应的第一消息标识。
这里,上述第一消息标识为客户端所接收到的推送消息的消息标识,即在本申请实施例中,本地节点在进行消息推送时,针对每个推送消息,均配置相应的第一消息标识。在实际应用中,该第一消息标识由消息标识生成组件生成,该消息标识生成组件设置于相应的本地节点内。具体地,消息标识生成组件基于本地节点对应的分区标识、目标对象的对象标识以及当前时间,生成对应推送消息的第一消息标识。
在实际实施时,该生成的第一消息标识可能与历史消息标识冲突,比如发生重复。因此,当确定第一消息标识与历史消息标识冲突时,重新生成对应推送消息的第二消息标识,并将第二消息标识作为推送消息对应的第一消息标识。具体地,消息标识生成组件在第一次生成第一消息标识时,将该第一消息标识存储至Redis数据库,由Redis数据库判断第一消息标识是否与历史消息标识冲突,如果确定冲突,则睡眠预设时长(比如1us),即进入睡眠状态预设时长,从而在睡眠状态结束后,再次生成对应推送消息的第二消息标识,并将第二消息标识作为推送消息对应的第一消息标识。
步骤104:发送响应消息至目标本地节点,以完成针对推送消息的推送。
这里,云端节点在确定目标本地节点后,即确定推送消息对应的源本地节点后,将响应消息发送至目标本地节点,以完成针对推送消息的推送。目标本地节点接收到该响应消息后,确认该推送消息已推送成功,从而不再重复推送。
在一些实施例中,本地节点,还用于在发送推送消息后,确定在预设时长内是否接收到针对推送消息的响应消息;当确定在预设时长内未接收到响应消息、且客户端与云端节点间处于通信连接状态时,重新发送针对目标对象的推送消息至云端节点;云端节点,还用于再次转发推送消息至目标对象的客户端。
这里,本地节点在发送推送消息后,会开始进行计时,以确定在预设时长内是否接收到针对推送消息的响应消息,当确定在预设时长内接收到响应消息时,则确认该推送消息已推送成功,从而不再重复推送。当确定在预设时长内未接收到响应消息时,则检测客户端与云端节点间是否处于通信连接状态,若客户端与云端节点间处于通信连接状态时,则重新发送针对目标对象的推送消息至云端节点,以使云端节点再次转发推送消息至目标对象的客户端,实现针对该推送消息的再次推送。在实际应用中,本地节点可以存储未接收到响应信息的推送消息的消息列表,从而按照先入先出的顺序,依次重新推送各个未接收到响应信息的推送消息。
在实际应用中,本地节点在进行消息推送时,若用户的客户端与云端节点间未处于通信连接状态,则可以通过第三方厂商通道,即终端厂商通道(比如APNS,OPPO Push,XiaoMi Push等)进行补偿推送。
在实际应用中,客户端在接收到推送消息、并发送针对该推送消息的响应消息后,会存储已发送响应消息的推送消息的消息标识,若存储失败,则表明客户端网络异常导致响应消息发送失败,此时,客户端可以重新建立与云端节点之间的通信连接,然后在通信连接建立成功后,重新发送响应消息。
在一些实施例中,当本地节点为至少两个时,该路由节点,还用于当确定当前本地节点发生故障时,从至少两个本地节点中选择未发生故障的其他本地节点,并将存储的分区标识与当前本地节点间的关联关系、修改为分区标识与其他本地节点间的关联关系,以将本地节点切换为其他本地节点。
在实际应用中,上述消息推送系统中所包含的本地节点可以是多个,以保证在某个本地节点发生故障时进行本地节点的切换。具体地,路由节点可以当确定当前本地节点发生故障时,从该多个本地节点中选择未发生故障的其他本地节点,并将存储的分区标识与当前本地节点间的关联关系、修改为分区标识与其他本地节点间的关联关系,以将本地节点切换为其他本地节点。如此,既能保证用户流量能均匀分区到不同的本地节点,多个本地节点可以线性扩展,也能支持某个本地节点发生故障时的切换。
在一些实施例中,当云端节点为至少两个时,该消息推送系统还包括:域名解析服务节点;该域名解析服务节点,用于当确定当前云端节点发生故障时,从至少两个云端节点中选择未发生故障的其他云端节点,并将当前云端节点切换为其他云端节点;相应的,本地节点,还用于响应于针对目标对象的消息推送请求,发送针对目标对象的推送消息至其他云端节点。
在实际应用中,上述消息推送系统中所包含的云端节点也可以是多个,以保证在某个云端节点发生故障时进行云端节点的切换。具体地,可以通过消息推送系统中的域名解析服务节点实现,域名解析服务节点当确定当前云端节点发生故障时,从该多个云端节点中选择未发生故障的其他云端节点,并将当前云端节点切换为其他云端节点。此时,本地节点在接收到针对目标对象的消息推送请求时,则发送针对目标对象的推送消息至切换后的其他云端节点。
应用本申请上述实施例,提供一种包括云端节点、路由节点以及至少一个地理分区对应的本地节点的消息推送系统,该路由节点存储有地理分区的分区标识与本地节点间的关联关系;在消息推送时,当云端节点接收到客户端基于本地节点推送的推送消息返回的响应消息时,由于该响应消息中包含发送推送消息的本地节点对应的目标分区标识,云端节点基于响应消息,通过调用路由节点基于存储的关联关系,查找到与目标分区标识相关联的目标本地节点,该目标本地节点即为发送推送消息的源本地节点,从而将响应消息发送至目标本地节点则完成了针对推送消息的推送;如此,降低了云端节点对于存储的依赖,节省了云端节点的存储空间,提高信息处理效率。
接下来对本申请实施例提供的消息推送方法进行详细说明。本申请实施例提供的消息推送方法应用于包括云端节点、路由节点以及至少一个地理分区对应的本地节点的消息推送系统;其中,路由节点用于存储地理分区的分区标识与本地节点间的关联关系。参见图6,图6是本申请实施例提供的消息推送方法的流程示意图,本申请实施例提供的消息推送方法包括:
步骤201:云端节点接收到针对目标对象的推送消息。
该推送消息,为本地节点响应于针对目标对象的消息推送请求所发送。
这里,该消息推送系统包括:云端节点、路由节点以及至少一个地理分区对应的本地节点。在本申请实施例中,根据地理位置划分为多个地理分区,比如将北京、天津划分为一个地理分区,将上海、江苏划分为一个地理分区等等;针对每个地理分区,分别设置相应的分区标识,该分区标识是全局唯一且不变的,用于标识相应的地理分区。
进一步地,每个地理分区对应相应的本地节点,该本地节点可以是一个或者多个,用于支持该地理分区的消息推送服务。在本申请实施例中,该消息推送系统包括有路由节点,该路由节点用于存储地理分区的分区标识与本地节点间的关联关系,比如地理分区的分区标识为Shard1,关联的本地节点为节点1;地理分区的分区标识为Shard2,关联的本地节点为节点2等等。
在本申请实施例中,消息推送端可以设置针对目标对象的消息推送任务,比如可以在消息推送终端运行的消息推送应用程序上设置;当消息推送终端接收到消息推送者触发的针对消息推送任务的任务执行指令时,发送针对目标对象的消息推送请求至本地节点,该本地节点可以包含支持推送服务的推送服务器。本地节点接收并响应于针对目标对象的消息推送请求,发送针对目标对象的推送消息至云端节点。
步骤202:转发推送消息至目标对象的客户端,并接收客户端基于推送消息返回的响应消息。
该响应消息,包含发送推送消息的本地节点对应的目标分区标识。
这里,在云端节点接收到本地节点发送的针对目标对象的推送消息后,将该推送消息转发至目标对象的客户端。客户端在接收到该推送消息后,需要基于该推送消息,返回响应的响应消息,即应答消息ACK,以基于该响应消息向云端节点(进一步还可包括本地节点)确认已接收到该推送消息。
在本申请实施例中,该响应消息携带发送推送消息的本地节点对应的目标分区标识,即推送消息的源本地节点对应的分区标识。在实际应用中,该目标分区标识与客户端所接收到的推送消息携带的分区标识相一致,为客户端基于接收到的推送消息所携带的分区标识确定的。便于云端节点在接收到针对该推送消息的响应消息时,快速确定该推送消息的源本地节点对应的分区标识,从而快速确定该推送消息的源本地节点,以将响应消息转发至该源本地节点,以使得该源本地节点在接收到该响应消息时,确认该推送消息推送成功,从而不再重复推送。
步骤203:基于响应消息,调用路由节点基于关联关系,查找到与目标分区标识相关联的目标本地节点。
云端节点在接收到客户端基于推送消息返回的响应消息后,基于该响应消息中携带的目标分区标识,通过相应的接口调用路由节点,使路由节点基于存储的地理分区的分区标识与本地节点间的关联关系,查找到与目标分区标识相关联的目标本地节点。
步骤204:发送响应消息至目标本地节点,以完成针对推送消息的推送。
这里,云端节点在确定目标本地节点后,即确定推送消息对应的源本地节点后,将响应消息发送至目标本地节点,以完成针对推送消息的推送。目标本地节点接收到该响应消息后,确认该推送消息已推送成功,从而不再重复推送。
作为示例,参见图7,图7是本申请实施例提供的消息推送方法的处理示意图。这里,本地节点(即内部机房1)将推送消息推送至云端节点(即云端机房2),云端节点(即云端机房2)将推送消息推送至用户的客户端;客户端基于该推送消息返回响应消息ACK至云端节点(即云端机房2),云端节点(即云端机房2)通过调用路由节点(即GZS)基于存储的关联关系,查找到响应消息ACK携带的目标分区标识对应的目标本地节点,即内部机房1,从而将响应消息ACK发送至目标本地节点,即内部机房1。
应用本申请上述实施例,提供一种应用于消息推送系统的消息推送方法,该消息推送系统包括云端节点、路由节点以及至少一个地理分区对应的本地节点,该路由节点存储有地理分区的分区标识与本地节点间的关联关系;在消息推送时,当云端节点接收到客户端基于本地节点推送的推送消息返回的响应消息时,由于该响应消息中包含发送推送消息的本地节点对应的目标分区标识,云端节点基于响应消息,通过调用路由节点基于存储的关联关系,查找到与目标分区标识相关联的目标本地节点,该目标本地节点即为发送推送消息的源本地节点,从而将响应消息发送至目标本地节点则完成了针对推送消息的推送;如此,降低了云端节点对于存储的依赖,节省了云端节点的存储空间,提高信息处理效率。
下面将说明本申请实施例在一个实际的应用场景中的示例性应用。
在说明本申请实施例提供的消息推送系统之前,首先对本申请实施例中涉及的名词进行解释,包括:
1)消息推送服务:指运营人员通过自己的产品或第三方工具对用户移动设备进行的主动消息推送。用户可以在移动设备锁定屏幕和通知栏看到push消息通知,通知栏点击可唤起APP并去往相应页面。比如平时在锁屏上看到的微信消息等都属于APP消息推送行列。推送(Push)是一种技术概念,是指从服务端实时发送信息到客户端。
2)异地多活:指后台的一种布署方案。由于一个机房无法承载所有的流量、或者延迟太大,需要将后台服务布署到多个地域,用户就近访问。
3)Shard(即上述地理分区):多活环境下对流量和数据的分片。一般根据业务特点,将就近的业务实体划分到同一个Shard,以减少延迟。
4)消息路由:消息从发送到接收、到返回到内部机房,中间的传输结点的选择过程。
5)消息Push(即消息推送):消息推送到客户端App。
6)消息Ack(即上述推送消息对应的响应消息):客户端在接收到服务端推送的推送消息后返回的回执。
7)云端机房(即上述云端节点):提供公有云的服务商。
8)内部机房(即上述本地节点):各业务公司自己搭建的机房,一般核心业务跑在内部机房。
9)Kafka:是一个开源的消息队列,使用生产-消费的模型来传递消息。
10)Redis Replicator:Redis复制组件(即上述路由信息复制组件),用来进行跨地域的内部机房的路由信息的Redis同步。
在常见的异地多活方案中,更多地考虑将客户端发来的请求分区到不同的机房进行处理,而消息推送服务是以服务端驱动的,要对服务端的请求进行分区、也要考虑多机房场景中消息的路由问题。相关技术中,如图8所示,图8是相关技术中提供的消息推送方法的示意图,这里,在内部机房接收到消息推送任务,然后将推送消息通过接入层推送到用户端,用户端接收并返回相应的ACK,此时,期望返回到源内部机房(即发送推送消息的内部机房)中。
因此,则需要有一种机制在云端机房找到推送消息的源内部机房。相关技术中主要采用的方案是,在云端机房保存每条推送消息与源内部机房的映射信息,即消息ID-源内部机房,如此云端在转发ACK时则可以通过消息ID找到相应的源内部机房。但是,第一,在设计原则上,云端机房只布署接入层网关以减少对存储的依赖,而上述方案增加了对存储的依赖;第二,由于云端机房有多个,消息推送和转发Ack的云端机房可能不是同一个机房,这种情况下则需要把映射信息(消息ID-源内部机房)同步到所有云端机房,如此则更加复杂,对存储依赖更大。
基于此,本申请实施例提供一种消息推送系统,以至少解决上述存在的问题,接下来进行详细说明。
如图4所示,将用户进来或出去的流量进行分区,拆分到各个内部机房。内部机房zone是一个完整的业务服务单元,包含完整业务所需要的服务和数据库的集合,包括推送服务、Redis数据库等,用户活动的完整业务逻辑可以在一个内部机房zone中完成。
对用户流量的分区:使用三层映射关系(包括用户地理位置->分区标识ShardID->本地机房zone)将请求路由到合适的机房。首先,按照省的边界、把某几个省合并成一个地理分区Shard,把全国划分为多个地理分区Shard,比如将北京、天津划分为一个地理分区,将上海、江苏划分为一个地理分区等。作为示例,用户/商户/订单对应的位置落在某个省的话,它的流量就归于这个省对应的地理分区Shard,这个流量生成的数据也属于这个地理分区Shard。地理分区Shard切分的原则是就近合并、且每个地理分区Shard分摊的流量是均匀的。每个地理分区Shard归属一个内部机房zone来处理。
ShardID:每个地理分区Shard对应一个全局唯一、不变的ShardID,用于唯一标识一个地理分区Shard。在实际实施时,ShardID可以是一个5bit的整数,取值范围从0到31。如表1所示:
表1
在实际应用中,消息推送的主要业务流程包括:
第一,用户在客户端上线:客户端通过DNS服务与就近的云端机房建立TCP连接,云端机房根据用户的地理位置信息找到对应的内部机房zone,然后与该内部机房的推送服务进行RPC交互(包括鉴权、保存连接状态、路由信息等)。并在鉴权成功后返回,云端机房保持与客户端的TCP连接。
第二,推送(push)消息到客户端:在内部机房接收到针对目标用户的消息推送任务,根据消息推送任务中用户标识、以及存储对应该目标用户的路由信息,确认目标用户是否在线。如果在线,则将推送消息传输到云端机房的接入层,由云端机房的接入层将推送消息推送到客户端。
第三,客户端对推送消息进行应答(ACK):客户端接收到云端机房的接入层发送的推送消息,向云端机房的接入层返回针对该推送消息的响应消息ACK;云端机房的接入层查找到该推送消息的源内部机房,将响应消息ACK传递到此源内部机房进行ACK操作。
在实际应用中,消息推送过程中可能会出现异常,比如客户端网络异常、内部组件异常等,此时需要对异常情况所导致的消息推送问题进行处理,包括:
第一,当客户端网络异常导致ACK发送失败时,客户端内部保存已发送ACK的推送消息的消息标识,如果ACK发送失败,则重新建立与云端机房的连接,然后重新发送ACK消息。
第二,当由于内部组件异常、或者用户网络不稳定等导致消息推送失败时,服务端保存了未接收到ACK的推送消息的消息列表,并针对推送失败的推送消息再次进行推送,具体可以是当客户端与云端机房重新建立通信连接后,重新推送未接收到ACK的推送消息;或者在用户不在线的情况下,通过第三方厂商通道(比如APNS,OPPO Push,XiaoMi Push)进行补偿推送。
在实际应用中,消息推送过程中可能会出现机房故障的情况,此时为避免影响用户消息推送体验,将故障机房切换至其他未故障机房。在实际实施时,由于云端机房的故障率较低,所以首先要保证内部机房故障时的流量切换,然后再保证云端机房故障时的流量切换。具体地,在当前内部机房故障时,进行多活切换,即修改ShardID->zone之间的映射关系,将流量由当前故障的内部机房切换到另一个未故障的内部机房。在当前云端机房故障时,切换DNS服务中的地域映射,通过DNS服务将流量由当前故障的云端机房切换到另一个未故障的云端机房。如此,既能保证用户流量能均匀分区到不同的zone,多个zone可以线性扩展,也支持某个zone的故障切换。
在客户端对推送消息进行应答(ACK)过程中,云端机房的接入层需要查找到该推送消息的源内部机房,从而将响应消息ACK传递到此源内部机房进行ACK操作。如图7所示,本申请实施例提供的消息推送系统中还包括路由节点(即GZS,Global Zone Service),该GZS是一个全局的zone,用来保存并同步全局路由信息(包括地理位置location和分区标识ShardID的关联关系,分区标识ShardID和内部机房zone的关联关系)。内部机房的推送服务和云端机房的接入层,都接入了GZS SDK,以获取最新的全局路由信息。
基于此,在进行消息推送时,针对每个推送消息,均设置相应的全局消息标识MsgID,该消息标识MsgID可以是符号64位数字,其中嵌入了发送该推送消息的源内部机房对应的分区标识ShardID。
云端机房的接入层将携带该消息标识MsgID的推送消息转发至客户端后,客户端返回对应该推送消息的响应消息ACK至云端机房的接入层,该响应消息ACK同样携带该消息标识MsgID。云端机房的接入层在接收到响应消息ACK时,从其携带的消息标识MsgID中提取出目标分区标识ShardID,通过GZS接口调用GZS基于存储的关联关系,查询到目标分区标识ShardID对应的源内部机房zone,然后将响应消息ACK发送至查询到的源内部机房zone进行相应的ACK服务。
这里,推送消息的全局唯一消息标识MsgID是由位于内部机房的存储组件GlobalStorage(即上述消息标识生成组件)生成的。该Global Storage根据传入的分区标识ShardID、用户标识userID/tagID/alias生成全局唯一的MsgID。MsgID的组成如下:
MsgID=1bit(sign)+48bit(seed)+5bit(ShardID)+10bit(hash)。
其中,10bit(hash)=hash(userID/tagID/alias)%1024;48bit(seed)=当前时间的微秒数,48bit的时间可以表示2^48/(365*24*3600*1000*1000)=8.9年的时间。由于推送的消息每隔一段时间会清库,8.9年可以保证够用。
在实际应用中,还可能会出现新生成的消息标识与历史消息标识出现冲突的情况,针对该情况,Global Storage将最近一段时间(比如10s)生成的消息标识MsgID保存到Redis数据库,由Redis数据库判断是否冲突,如果冲突,则sleep预设时长(比如1us),在sleep结束后再生成新的MsgID。
本申请实施例还涉及路由信息的同步方案。如图9所示,图9是本申请实施例提供的用户上下线路由信息的示意图。这里,用户上线时会连接某个云端机房的接入层,云端机房的接入层根据用户的地理位置信息,选择一个就近的内部机房与之通信,在内部机房进行鉴权和保存连接状态,描述该过程的信息即为路由信息,该路由信息可以包括用户的客户端、与该客户端建立通信连接的云端机房、及向该客户端执行消息推送的内部机房之间的通信连接关系,从而通过路由信息表示推送消息从发送到接收、到对应的响应消息返回到本地节点时,中间的传输结点的选择过程。如图9所示的路由信息,比如可以包括用户客户端1-云端机房1-内部机房1、用户客户端2-云端机房2-内部机房2等。
因此,在进行消息推送时,需要每个内部机房均保存所有用户的路由信息,才能在推送时找到云端机房的接入层以推送消息给用户。因此,本申请实施例还涉及路由信息的同步方案,以将全量的路由信息同步到所有内部机房,包括:第一,存储到内部机房的MySQL,由MySQL DRC组件同步到每个其他内部机房,但是考虑到用户上下线非常频繁,在推送时对路由信息访问QPS比较大,使用MySQL撑不住。第二,存储到类Redis的缓存系统,但由于开源/公司的缓存系统不支持多机房同步,需要推送服务将路由信息同步到多个机房,但是其实是不可行的,因为需要考虑其它内部机房是否故障,且推送服务的某个组件故障或者重启都会导致同步失败。
基于此,本申请实施例还提供一种路由信息的同步方法,以至少解决上述存在的问题,如图5所示,用户上下线的路由信息保存在Redis中,需要将路由信息实时同步到每个内部机房。由于开源的Redis不支持多机房同步,因此在本申请实施例中,提供一个RedisReplicator组件(即上述路由信息复制组件),该Redis Replicator组件的可以满足的需求包括:1)高可靠,数据不丢;2)对应用的低耦合;3)秒级同步;4)相同key(用于标识同一条操作数据)操作时的冲突处理;5)尽量不对Redis改动,方便后续的维护和更新。
本申请实施例提供的路由信息的同步方法的流程包括:
1、各内部机房的Replicator组件订阅其他内部机房的Kafka消息(即上述路由更新消息)。
2、当应用中发生上下线操作行为时,写相应的操作数据至本内部机房Redis,同时在Redis写一条记录操作的时间戳;然后写一条操作数据(即上述路由信息的更新内容)到本内部机房Kafka。
3、异地机房(即其他机房)的Replicator组件接收到Kafka消息后,如果key相同,与本机房的操作记录的操作时间比对,比Kafka消息的操作时间早,则执行复制操作(另外在Redis写一条记录操作的时间戳),否则,丢弃。
这里,首先考虑的是否能将Redis多机房同步做到Redis集群内部,但由于Redis的操作日志不带有时间戳、且它的同步方式(全量同步+增量同步)不能保证低延迟,要支持的话,要对Redis做大量的改造,复杂度较高。而本申请实施例提供的上述方案虽然对应用程序有一定的侵入性,但不需要修改Redis,复杂度适中。在实际应用中,分布式缓存的多机房同步也可以考虑别的选择,比如商业版的aerospike,或者采用类Yahoo!Pnuts模型来存储路由信息。
应用本申请上述实施例,既能支持多个机房的线性扩展、机房故障时的流量迁移,还使得无需在云端机房的接入层存储海量的历史消息路由,便可找到消息的源内部机房;同时,还实现了基于Redis的路由信息的多机房的同步方案,复杂度适中,易于实现。
接下来继续说明本申请实施例提供的消息推送装置,本申请实施例提供的消息推送装置设置于云端节点,所述云端节点位于消息推送系统,所述消息推送系统还包括路由节点以及至少一个地理分区对应的本地节点;其中,路由节点用于存储地理分区的分区标识与本地节点间的关联关系。
下面说明本申请实施例提供的消息推送装置555的实施为软件模块的示例性结构,在一些实施例中,如图2所示,存储在存储器550的消息推送装置555中的软件模块可以包括:
接收模块5551,用于接收到针对目标对象的推送消息,所述推送消息,为所述本地节点响应于针对所述目标对象的消息推送请求所发送;
转发模块5552,用于转发所述推送消息至所述目标对象的客户端,并接收所述客户端基于所述推送消息返回的响应消息,所述响应消息,包含发送所述推送消息的本地节点对应的目标分区标识;
调用模块5553,用于基于所述响应消息,调用所述路由节点基于所述关联关系,查找到与所述目标分区标识相关联的目标本地节点;
发送模块5554,用于发送所述响应消息至所述目标本地节点,以完成针对所述推送消息的推送。
应用本申请上述实施例,提供一种包括云端节点、路由节点以及至少一个地理分区对应的本地节点的消息推送系统,该路由节点存储有地理分区的分区标识与本地节点间的关联关系;在消息推送时,当云端节点接收到客户端基于本地节点推送的推送消息返回的响应消息时,由于该响应消息中包含发送推送消息的本地节点对应的目标分区标识,云端节点基于响应消息,通过调用路由节点基于存储的关联关系,查找到与目标分区标识相关联的目标本地节点,该目标本地节点即为发送推送消息的源本地节点,从而将响应消息发送至目标本地节点则完成了针对推送消息的推送;如此,降低了云端节点对于存储的依赖,节省了云端节点的存储空间,提高信息处理效率。
本申请实施例还提供一种电子设备,所述电子设备包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现本申请实施例提供的消息推送方法。
本申请实施例还提供一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例提供的消息推送方法。
本申请实施例还提供一种计算机可读存储介质,存储有可执行指令,所述可执行指令被处理器执行时,实现本申请实施例提供的消息推送方法。
在一些实施例中,计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(HTML,Hyper TextMarkup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。
Claims (10)
1.一种消息推送系统,其特征在于,所述系统包括:云端节点、路由节点以及至少一个地理分区对应的本地节点;其中,所述路由节点用于存储所述地理分区的分区标识与所述本地节点间的关联关系;
所述本地节点,用于响应于针对目标对象的消息推送请求,发送针对所述目标对象的推送消息至所述云端节点;
所述云端节点,用于转发所述推送消息至所述目标对象的客户端,并接收所述客户端基于所述推送消息返回的响应消息,所述响应消息,包含发送所述推送消息的本地节点对应的目标分区标识;
基于所述响应消息,调用所述路由节点基于所述关联关系,查找到与所述目标分区标识相关联的目标本地节点;
发送所述响应消息至所述目标本地节点,以完成针对所述推送消息的推送。
2.如权利要求1所述的系统,其特征在于,所述系统还包括:域名解析服务节点;
所述域名解析服务节点,用于响应于所述客户端的连接请求,基于所述客户端所对应的地理位置信息,将对应所述客户端的连接请求发送至与所述地理位置信息相匹配的云端节点;
所述云端节点,还用于接收到所述连接请求,从所述至少一个地理分区对应的本地节点中,选择与所述地理位置信息相匹配的地理分区所对应的本地节点;
以及,执行与所述选择的本地节点进行远程过程调用的交互验证,并在交互验证成功后,建立与所述客户端间的通信连接。
3.如权利要求1所述的系统,其特征在于,
所述本地节点,还用于响应于针对目标对象的消息推送请求,基于所述消息推送请求中携带的所述目标对象的对象标识,获取所述目标对象对应的路由信息;
当基于所述路由信息确定所述客户端与所述云端节点间处于通信连接状态时,发送针对所述目标对象的推送消息至所述云端节点。
4.如权利要求1所述的系统,其特征在于,当所述本地节点为至少两个时,各所述本地节点存储有所述目标对象的路由信息,且各所述本地节点包括路由信息复制组件;
所述路由信息复制组件,用于订阅自身所在节点以外的其他本地节点中所述路由信息的路由更新消息;
当所述路由更新消息表征所述其他本地节点的路由信息中存在更新内容时,获取所述其他本地节点的路由信息的第一更新时间点;
当所述第一更新时间点晚于自身所在节点的路由信息的第二更新时间点时,复制所述更新内容至自身所在节点,并更新所述第二更新时间点。
5.如权利要求1所述的系统,其特征在于,
所述本地节点,还用于在发送所述推送消息后,确定在预设时长内是否接收到针对所述推送消息的响应消息;
当确定在预设时长内未接收到所述响应消息、且所述客户端与所述云端节点间处于通信连接状态时,重新发送针对所述目标对象的推送消息至所述云端节点;
所述云端节点,还用于再次转发所述推送消息至所述目标对象的客户端。
6.如权利要求1所述的系统,其特征在于,当所述本地节点为至少两个时,所述路由节点,还用于当确定当前所述本地节点发生故障时,从所述至少两个本地节点中选择未发生故障的其他本地节点,并
将存储的所述分区标识与当前所述本地节点间的关联关系、修改为所述分区标识与所述其他本地节点间的关联关系,以将所述本地节点切换为其他本地节点。
7.如权利要求1所述的系统,其特征在于,当所述云端节点为至少两个时,所述系统还包括:域名解析服务节点;
所述域名解析服务节点,用于当确定当前所述云端节点发生故障时,从所述至少两个云端节点中选择未发生故障的其他云端节点,并将当前所述云端节点切换为所述其他云端节点;
所述本地节点,还用于响应于针对目标对象的消息推送请求,发送针对所述目标对象的推送消息至所述其他云端节点。
8.如权利要求1所述的系统,其特征在于,所述响应消息携带相应的第一消息标识,所述第一消息标识包含所述目标分区标识;
所述云端节点,还用于基于所述响应消息,对所述响应消息的第一消息标识进行解析,得到所述响应消息包含的所述目标分区标识,并
基于所述目标分区标识,调用所述路由节点基于所述关联关系,查找到与所述目标分区标识相关联的目标本地节点。
9.如权利要求8所述的系统,其特征在于,所述本地节点还包括:消息标识生成组件;
所述消息标识生成组件,用于基于所述本地节点对应的分区标识、所述目标对象的对象标识以及当前时间,生成对应所述推送消息的第一消息标识;
以及,所述消息标识生成组件,还用于当确定所述第一消息标识与历史消息标识冲突时,重新生成对应所述推送消息的第二消息标识,并将所述第二消息标识作为所述推送消息对应的第一消息标识。
10.一种消息推送方法,其特征在于,应用于包括云端节点、路由节点以及至少一个地理分区对应的本地节点的消息推送系统;其中,所述路由节点用于存储所述地理分区的分区标识与所述本地节点间的关联关系;所述方法包括:
云端节点接收到针对目标对象的推送消息,所述推送消息,为所述本地节点响应于针对所述目标对象的消息推送请求所发送;
转发所述推送消息至所述目标对象的客户端,并接收所述客户端基于所述推送消息返回的响应消息,所述响应消息,包含发送所述推送消息的本地节点对应的目标分区标识;
基于所述响应消息,调用所述路由节点基于所述关联关系,查找到与所述目标分区标识相关联的目标本地节点;
发送所述响应消息至所述目标本地节点,以完成针对所述推送消息的推送。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110647966.4A CN113259476B (zh) | 2021-06-10 | 2021-06-10 | 消息推送方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110647966.4A CN113259476B (zh) | 2021-06-10 | 2021-06-10 | 消息推送方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113259476A CN113259476A (zh) | 2021-08-13 |
CN113259476B true CN113259476B (zh) | 2022-09-30 |
Family
ID=77187407
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110647966.4A Active CN113259476B (zh) | 2021-06-10 | 2021-06-10 | 消息推送方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113259476B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114666404B (zh) * | 2022-02-28 | 2024-10-22 | 中国银联股份有限公司 | 推送消息的发送方法、装置和服务器 |
CN115118772A (zh) * | 2022-06-21 | 2022-09-27 | 壹沓科技(上海)有限公司 | 一种消息通信的系统及方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105389219A (zh) * | 2015-10-15 | 2016-03-09 | 北京乐动卓越科技有限公司 | 一种跨机房通讯的方法和系统 |
CN108093094A (zh) * | 2017-12-08 | 2018-05-29 | 腾讯科技(深圳)有限公司 | 数据库实例访问方法、装置、系统、存储介质和设备 |
CN111818131A (zh) * | 2020-06-17 | 2020-10-23 | 天津异乡好居网络科技有限公司 | 一种消息推送调度系统及方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110020902B (zh) * | 2018-12-27 | 2021-01-08 | 创新先进技术有限公司 | 跨链存证方法及访问方法、装置、电子设备 |
CN110401706A (zh) * | 2019-07-19 | 2019-11-01 | 北京大米科技有限公司 | 业务请求处理方法、装置、存储介质及终端 |
US11847171B2 (en) * | 2019-08-20 | 2023-12-19 | International Business Machines Corporation | Facilitating blockchain transactions with an Internet of Things (IoT) device |
CN110753096A (zh) * | 2019-10-12 | 2020-02-04 | 北京达佳互联信息技术有限公司 | 一种消息推送方法、系统及电子设备 |
CN111222034B (zh) * | 2019-12-31 | 2023-05-16 | 湖南华菱涟源钢铁有限公司 | 一种数据移动化显示方法、装置及云服务器 |
CN111343237B (zh) * | 2020-02-07 | 2022-11-29 | 广州亚美信息科技有限公司 | 服务器集群通信的方法、通信装置及计算机存储介质 |
-
2021
- 2021-06-10 CN CN202110647966.4A patent/CN113259476B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105389219A (zh) * | 2015-10-15 | 2016-03-09 | 北京乐动卓越科技有限公司 | 一种跨机房通讯的方法和系统 |
CN108093094A (zh) * | 2017-12-08 | 2018-05-29 | 腾讯科技(深圳)有限公司 | 数据库实例访问方法、装置、系统、存储介质和设备 |
CN111818131A (zh) * | 2020-06-17 | 2020-10-23 | 天津异乡好居网络科技有限公司 | 一种消息推送调度系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113259476A (zh) | 2021-08-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11445019B2 (en) | Methods, systems, and media for providing distributed database access during a network split | |
US9934242B2 (en) | Replication of data between mirrored data sites | |
JP5548829B2 (ja) | 計算機システム、データ管理方法及びデータ管理プログラム | |
CN110149382A (zh) | 数据同步的方法、系统、主服务器、同步客户端及介质 | |
CN113268472B (zh) | 一种分布式数据存储系统及方法 | |
KR20080068110A (ko) | 데이터 동기화 처리 방법 그리고 클라이언트 단말기, 서버및 그것의 데이터 동기화 시스템 | |
CN113259476B (zh) | 消息推送方法及系统 | |
CN107623703B (zh) | 全局事务标识gtid的同步方法、装置及系统 | |
CN115517009B (zh) | 集群管理方法、集群管理装置、存储介质与电子设备 | |
JP6405255B2 (ja) | 通信システム、キュー管理サーバ、及び、通信方法 | |
CN111404628B (zh) | 一种时间同步方法和装置 | |
CN113411363A (zh) | 一种镜像文件的上传方法、相关设备及计算机存储介质 | |
CN111865632B (zh) | 分布式数据存储集群的切换方法及切换指令发送方法和装置 | |
US20130185329A1 (en) | Distributed database | |
CN116560904A (zh) | Nas数据备份容灾方法、系统、终端及存储介质 | |
CN112069152B (zh) | 一种数据库集群升级方法、装置、设备以及存储介质 | |
CN114625566A (zh) | 数据容灾方法、装置、电子设备及存储介质 | |
CN109992447B (zh) | 数据复制方法、装置及存储介质 | |
CN110321322B (zh) | 数据重建方法、装置、设备及计算机可读存储介质 | |
CN111106966B (zh) | 一种信息处理方法及装置、设备、存储介质 | |
CN115827316A (zh) | 数据备份方法、装置、设备及存储介质 | |
CN106897365B (zh) | 数据处理方法及装置 | |
US20110320509A1 (en) | Managing the site where data is stored in a distributed storage system | |
CN110572459A (zh) | 一种存储设备控制方法、装置及电子设备和存储介质 | |
CN113472469B (zh) | 一种数据同步方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40052193 Country of ref document: HK |
|
GR01 | Patent grant | ||
GR01 | Patent grant |