CN116980241A - 数据处理方法、系统、装置、电子设备及存储介质 - Google Patents

数据处理方法、系统、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN116980241A
CN116980241A CN202310233124.3A CN202310233124A CN116980241A CN 116980241 A CN116980241 A CN 116980241A CN 202310233124 A CN202310233124 A CN 202310233124A CN 116980241 A CN116980241 A CN 116980241A
Authority
CN
China
Prior art keywords
group
target
information
service
members
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.)
Pending
Application number
CN202310233124.3A
Other languages
English (en)
Inventor
邹祥文
李郁韬
刘然
李植珩
陈箭飞
高海峰
张天棋
李峰
江盼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202310233124.3A priority Critical patent/CN116980241A/zh
Publication of CN116980241A publication Critical patent/CN116980241A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/16Arrangements for providing special services to substations
    • H04L12/18Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
    • H04L12/1813Arrangements for providing special services to substations for broadcast or conference, e.g. multicast for computer conferences, e.g. chat rooms
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/16Arrangements for providing special services to substations
    • H04L12/18Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
    • H04L12/1813Arrangements for providing special services to substations for broadcast or conference, e.g. multicast for computer conferences, e.g. chat rooms
    • H04L12/1822Conducting the conference, e.g. admission, detection, selection or grouping of participants, correlating users to one or more conference sessions, prioritising transmission
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/16Arrangements for providing special services to substations
    • H04L12/18Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
    • H04L12/185Arrangements for providing special services to substations for broadcast or conference, e.g. multicast with management of multicast group membership
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/16Arrangements for providing special services to substations
    • H04L12/18Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
    • H04L12/1859Arrangements for providing special services to substations for broadcast or conference, e.g. multicast adapted to provide push services, e.g. data channels
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/04Real-time or near real-time messaging, e.g. instant messaging [IM]

Abstract

本申请实施例提供了一种数据处理方法、系统、装置、电子设备及存储介质,涉及云技术、分布式存储等领域。该方法包括:获取与目标群组有关的业务处理请求,根据业务处理请求中包括的第一群组标识,从多个第二服务节点中确定出业务处理请求对应的目标服务节点,目标服务节点为多个第二服务节点中的部分节点,目标服务节点缓存有目标群组的群基础资料,除目标服务节点之外的第二服务节点不缓存目标群组的群基础资料;将业务处理请求发送给目标服务节点,以使目标服务节点根据目标群组的相关资料进行处理,相关资料包括目标群组的群基础资料。基于本申请实施例的方法,能够有效提高资源利用率,更好的满足实际应用需求。

Description

数据处理方法、系统、装置、电子设备及存储介质
技术领域
本申请属于计算机技术领域,可涉及分布式存储、云技术等领域,具体而言,本申请涉及一种数据处理方法、系统、装置、电子设备及存储介质。
背景技术
随着科技的快速发展以及人们生活水平的提高,各种各样的应用程序也层出不穷,也成为了人们日常生活中不可或缺的一部分。为了更好的满足人们的通信、交互需求,也有越来越多的程序为其使用者提供通信服务,如即时通信服务,在这类服务中群组已经比较常见的功能之一,通过群组可以实现多人之间的交互。
目前的相关技术,虽然群组交互能够满足多人、甚至大量人群的通信交互,但是随着群组人员的增加,各种问题也随之出现,如何优化群组交互通信的性能,提升使用者感知,是目前需要改善的重要问题之一。
发明内容
本申请实施例的目的旨在提供一种能够提高群组通信性能的数据处理方法、系统、装置、电子设备及存储介质。为了实现该目的,本申请实施例提供的技术方案如下:
一方面,本申请实施例提供了一种数据处理方法,该方法由第一服务节点执行,该方法包括:
获取与目标群组有关的业务处理请求,所述业务处理请求中包括所述目标群组的第一群组标识;
根据所述第一群组标识,从多个第二服务节点中确定出所述业务处理请求对应的目标服务节点,其中,所述目标服务节点为所述多个第二服务节点中的部分节点,所述目标服务节点缓存有所述目标群组的群基础资料,除所述目标服务节点之外的第二服务节点不缓存所述目标群组的群基础资料;
将所述业务处理请求发送给所述目标服务节点,以使所述目标服务节点根据所述目标群组的相关资料对所述业务处理请求进行处理,所述相关资料包括所述目标群组的群基础资料。
另一方面,本申请实施例提供了一种数据处理装置,该装置设置于第一服务节点中,该装置包括:
请求接收模块,用于获取与目标群组有关的业务处理请求,所述业务处理请求中包括所述目标群组的第一群组标识;
目标节点确定模块,用于根据所述第一群组标识,从多个第二服务节点中确定出所述业务处理请求对应的目标服务节点,其中,所述目标服务节点为所述多个第二服务节点中的部分节点,所述目标服务节点缓存有所述目标群组的群基础资料,除所述目标服务节点之外的第二服务节点不缓存所述目标群组的群基础资料;
请求转发模块,用于将所述业务处理请求发送给所述目标服务节点,以使所述目标服务节点根据所述目标群组的相关资料对所述业务处理请求进行处理,所述相关资料包括所述目标群组的群基础资料。
可选的,所述业务处理请求包括与所述目标群组中的至少一个成员的成员资料相关的请求;所述目标群组中的各成员的成员资料是采用以下方式存储的:
获取所述目标群组中各成员的第二成员标识;
对于所述目标群组中的任一成员,根据该成员的第二成员标识,从多个第二存储节点中确定出该成员对应的第二目标节点,并将该成员的成员资料存储到所述第二目标节点中。
可选的,各成员的第二成员标识是通过以下方式获取到的:
确定所述目标群组的成员数量;
若所述成员数量大于或等于第一阈值,则生成所述目标群组中各成员的第二成员标识,记录并存储各个成员的旧标识和第二成员标识之间的映射关系,一个成员的旧标识包括该成员的第一成员标识和所述第一群组标识;
若所述成员数量小于所述第一阈值,所述目标群组中的各成员的成员资料是采用以下方式存储的:
根据所述第一群组标识,从多个第一存储节点中确定出所述目标群组对应的第一目标节点;
基于所述目标群组中各成员的第一成员标识,将所述目标群组中各成员的成员资料存储到所述第一目标节点。
可选的,对于所述目标群组中的任一成员,该成员的成员资料是通过以下方式获取到的:
确定所述目标群组的成员数量;
若所述成员数量小于所述第一阈值,则基于所述第一群组标识确定所述目标群组对应的第一目标节点,基于该成员的第一成员标识,从所述第一目标节点获得该成员的成员资料;
若所述成员数量大于或等于所述第一阈值,则根据该成员的旧标识和所述映射关系,确定该成员的第二成员标识,根据该成员的第二成员标识,确定该成员对应的第二目标节点,并从确定的第二目标节点中获得该成员的成员资料。
可选的,对于所述目标群组中的任一成员,该成员的第二成员标识是通过以下方式生成的:
确定所述目标群组的第二群组标识、以及该成员的第三成员标识;
根据该成员的第一成员标识和所述多个第二存储节点对应的分片的总数量,确定该成员对应的目标分片索引;
基于所述第二群组标识、该成员的目标分片索引和第三成员标识,生成该成员的第二成员标识。
可选的,不同群组的第二群组标识采用的是连续的数字编码,所述目标群组中各成员的第三成员标识采用的是连续的数字编码;
对于任一成员,该成员的第二成员标识是二进制编码标识,其中,按照由高位到低位的顺序,该成员对应的二进制编码标识包括:
所述目标群组的第二群组标识对应的第一设定位数的二进制表示、该成员的目标分片索引对应的第二设定位数的二进制表示、以及该成员的第三成员标识对应的第三设定位数的二进制表示。
可选的,所述业务处理请求包括目标消息的群发请求,所述目标消息是由所述目标服务节点通过以下方式发送的:
若所述成员数量小于第二阈值,则基于所述第一群组标识,获取所述目标群组中各成员的成员资料;对于每个成员,根据该成员的成员资料和所述目标消息,生成该成员对应的待推送信息,以由第一推送服务器基于该成员对应的待推送信息将所述目标消息推送给该成员;
若所述成员数量大于或等于第二阈值,且小于所述第一阈值,则生成所述目标群组对应的待推送信息,以由第二推送服务器根据该待推送信息中的第一群组指示信息,获取所述目标群组中所有成员的成员资料,并根据各成员的成员资料,将待推送信息中的目标消息推送给各成员;
若所述成员数量大于或等于所述第一阈值,则根据所述成员数量确定所述目标群组对应的分组数量,并生成相应数量的分组索引,其中,每个所述分组索引对应所述目标群组的部分成员、且不同分组索引对应的成员不同,每个所述分组索引对应至少一个分片;
对于每个所述分组索引,基于所述目标消息和该分组索引,生成该分组索引对应的待推送信息,以由第三待推送服务器根据该待推送信息中的第二群组指示信息,获得所述目标群组中该分组索引对应的各成员的成员资料,并根据各成员的成员资料,将该分组索引对应的待推送信息中的所述目标消息推送给各成员。
可选的,所述目标群组对应的各所述分组索引的值分别为0,1,2…,N-1,其中,N为所述分组数量,N-1为第N个分组索引,对于任一分组索引,该分组索引对应的各成员的成员资料是通过以下方式获得的:
通过以下表达式确定该分组索引对应的第二成员标识的标识下限和标识上限:
标识下限=
NewGroupCode<<(shardShift+shardIndexBit)+((PushShardIndex*(2shardIndexBit/ShardNum))<<shardShift);
标识上限=NewGroupCode<<(shardShift+shardIndexBit)+(((PushShardIndex+1)*(2shardIndexBit/ShardNum))<<shardShift);
其中,NewGroupCode为所述第二群组标识的二进制表示,PushShardIndex表示分组索引的值,shardIndexBit为所述第二设定位数,shardShift为所述第三设定位数,ShardNum=N(分组数量);
根据该分组索引对应的第二成员标识的标识下限和标识上限,获得第二成员标识位于所述标识下限和标识上限之内的各成员的成员资料,所获得的各成员的成员资料为该分组索引对应的各成员的成员资料。
可选的,所述业务处理请求包括目标消息的群发请求,其中,所述目标消息是由所述目标服务节点通过以下方式发送的:
确定所述目标群组的成员数量;
若所述成员数量小于第三阈值,则获取所述目标群组中各成员的成员资料,对于所述目标群组中的每个成员,根据该成员的成员资料,生成该成员对应的包含所述目标消息的待推送信息,以由第四推送服务器基于该待推送信息将所述目标消息推送给该成员;
若所述成员数量大于或等于所述第三阈值,则生成所述目标群组对应的待推送信息,以由第五推送服务器基于该待推送信息中的第三群组指示信息获取所述目标群组中各成员的成员资料,并根据各每个成员的成员资料,将该待推送信息中的目标消息推送给各个成员。
可选的,所述目标群组中各成员的成员资料是通过以下方式获取的:
若本地缓存中存在所述目标群组中各成员的成员资料,则从所述本地缓存中获取所述目标群组中各成员的成员资料;
若所述本地缓存中不存在所述目标群组中各成员的成员资料,则从存储所述目标群组的各成员的成员资料的目标存储节点中,获取所述目标群组中各成员的成员资料,并将获取的成员资料缓存在所述本地缓存中。
可选的,所述根据所述第一群组标识,从所述多个第二服务节点中确定出所述业务处理请求对应的目标服务节点,包括:
根据所述第一群组标识,通过与预配置的标识映射规则确定所述第一群组标识对应的第一映射标识;
获取所述多个第二服务节点中各个节点的第二映射标识,其中,每个所述第二服务节点的第二映射标识是根据该第二服务节点的节点标识,通过所述目标映射规则确定出的;
根据所述第一映射标识和各所述第二服务节点的第二映射标识的匹配程度,从所述多个第二服务节点中确定出所述目标服务节点。
另一方面,本申请实施例还提供了一种数据处理系统,该系统包括至少一个服务节点、以及与所述至少一个第一服务节点通信连接的多个第二服务器节点,其中,对于任一群组,所述多个第二服务节点中的部分节点中缓存有该群组的群基础资料,每个所述第二服务节点与至少一个群组的第一群组标识关联;
所述第一服务节点,用于接收与目标群组有关的业务处理请求,根据所述业务处理请求中包括的所述目标群组的第一群组标识,从所述多个第二服务节点中确定出所述业务处理请求对应的目标服务节点,将所述业务处理请求发送给所述目标服务节点;
所述第二服务节点,用于接收所述第一服务节点发送的业务处理请求,并根据所缓存的所述业务处理请求对应的群组的相关资料对所述业务处理请求进行处理,所述群组的相关资料包括群组的群基础资料。
另一方面,本申请实施例还提供了一种电子设备,该电子设备包括存储器和处理器,存储器中存储有计算机程序,处理器执行该计算机程序以实现本申请任一可选实施例中提供的方法。
另一方面,本申请实施例还提供了一种计算机可读存储介质,该存储介质中存储有计算机程序,该计算机程序被处理器执行时实现本申请任一可选实施例中提供的方法。
另一方面,本申请实施例还提供了一种计算机程序产品,该计算机产品包括计算机程序,该计算机程序被处理器执行时实现本申请任一可选实施例中提供的方法。
本申请实施例提供的技术方案带来的有益效果如下:
本申请实施例提供的方案中,增加了第一服务节点,针对目标群组的业务处理请求,经由第一服务节点只会被发送给该目标群组所关联的目标服务节点,即一个群组只与多个第二服务节点中的部分节点(可以是一个,也可以是多个)关联,每个第二服务节点可以只缓存其所关联的群组的资料,无需缓存不关联的群组的资料,采用该方案,通过在目标群组关联的目标服务节点中缓存群组的资料,可以有效提高针对该群组的请求的处理效率,避免请求热点问题的出现,由于该目标群组的资料也只需缓存在与其关联的部分第二服务节点中,因此也可以有效提高缓存利用率,另外,由于无需每个第二服务节点都缓存所有群组的资料,还可以避免资源浪费。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的一种数据处理系统的结构示意图;
图2为本申请实施例提供的一种信息查询请求的处理原理示意图;
图3为本申请实施例提供的一种消息群发请求的处理原理示意图;
图4为本申请实施例提供的一种数据处理方法的流程示意图;
图5为本申请实施例提供的一种群相关请求处理方案的原理示意图;
图6为相关技术中的一种群相关请求处理方案的示意图;
图7为本申请实施例提供的一种检索成员资料的原理示意图;
图8为本申请实施例提供的一种消息推送方案的原理示意图;
图9为本申请实施例提供的一种数据处理装置的结构示意图;
图10为本申请实施例提供的一种数据处理系统的结构示意图;
图11为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面结合本申请中的附图描述本申请的实施例。应理解,下面结合附图所阐述的实施方式,是用于解释本申请实施例的技术方案的示例性描述,对本申请实施例的技术方案不构成限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请实施例所使用的术语“包括”以及“包含”是指相应特征可以实现为所呈现的特征、信息、数据、步骤、操作、元件和/或组件,但不排除实现为本技术领域所支持其他特征、信息、数据、步骤、操作、元件、组件和/或它们的组合等。应该理解,当我们称一个元件被“连接”或“耦接”到另一元件时,该一个元件可以直接连接或耦接到另一元件,也可以指该一个元件和另一元件通过中间元件建立连接关系。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的术语“和/或”指示该术语所限定的项目中的至少一个,例如“A和/或B”可以实现为“A”,或者实现为“B”,或者实现为“A和B”。在描述多个(两个或两个以上)项目时,如果没有明确限定多个项目之间的关系,这多个项目之间可以是指多个项目中的一个、多个或者全部,例如,对于“参数A包括A1、A2、A3”的描述,可以实现为参数A包括A1或A2或A3,还可以实现为参数A包括参数A1、A2、A3这三项中的至少两项。
本申请实施例提供了一种数据处理方法,采用该方法,可以有效提供数据处理系统中的服务节点的资源利用率,如缓存利用率,还可以有效降低缓存成本,因此能够更好的满足实际应用需求。
可选的,本申请实施例提供的方法中所涉及的数据处理可以基于云技术实现。例如,本申请实施例中所涉及的数据存储(如群组的群基础资料的存储、群组中成员资料的存储)可以采用云存储方式,再例如,本申请实施例中所涉及的数据计算(如根据群组标识确定业务处理请求对应的目标服务节点中的数据计算(如一致性哈希计算)),可以采用云实计算实现。
其中,云计算(cloud computing)是一种计算模式,它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务。提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。云存储(cloud storage)是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统(以下简称存储系统)是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
需要说明的是,在本申请的可选实施例中,所涉及到的对象信息等相关的数据,当本申请中的实施例运用到具体产品或技术中时,需要获得对象许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。也就是说,本申请实施例中如果涉及到与对象有关的数据,需要经由对象授权同意、相关部门授权同意、且符合国家和地区的相关法律法规和标准的情况下获取的。实施例中如涉及个人信息,所有个人信息的获取需要获得个人的同意,如涉及到敏感信息,需要征得信息主体的单独同意,实施例也是需要在对象授权同意的情况下实施。
本申请实施例提供的数据处理方法可以由任意电子设备执行,如可以由服务器执行,该方法可以不同角度进行描述,涉及到不同节点之间交互的步骤,可以从不同节点侧进行描述,例如,对于第一服务节点(如第一服务器)和第二服务节点(如第一服务器)之间的交互步骤,即可以以第一服务节点作为执行主体进行说明,也可以以第二服务节点作为执行主体说明,比如第一服务节点向第二服务节点发送业务处理请求,相应的,该描述也可以写成第二服务节点从第一服务节点接收业务处理请求。
本申请实施例中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云计算服务的云服务器。服务器可以接收用户终端发起的业务处理请求,并对该业务处理请求进行处理,可选的,服务器还可以将业务处理请求的处理结果反馈给用户终端。
其中,本申请实施例中的用户终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能语音交互设备(例如智能音箱)、可穿戴电子设备(例如智能手表)、车载终端、智能家电(例如智能电视)、AR/VR设备等,但并不局限于此。用户终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请实施例在此不做限制。
本申请实施例提供的方法,理论上可以适用于任何提供群组服务的应用程序中,该应用程序可以是在移动终端或固定终端上运行的任意类型的应用程序,如包括但不限于app(Application)、网页形式的应用、小程序等。该应用可以是专门的即时通信工具,也可以是既提供即时通信服务、又可以提供其他服务的应用。
为了更好的理解和说明本申请实施例提供的方法,下面对本申请实施例中涉及的部分术语进行说明。
接入层:类似于网关,例如,应用程序的SDK(Software Development Kit,软件开发工具包)可以通过接入层请求后端服务器。
群转发层:用于将接入层转发的群请求转发给群逻辑层。
群逻辑层:群相关逻辑处理服务。
一致性Hash(哈希):一种负载均衡策略,根据请求中某些信息(可以根据实际需求选择和配置)将群请求转发给后端服务,和其他负载均衡策略不同的是,某些信息相同的请求一定会转发给后端同一台机器或某几台机器。
社群:可支持百万人的群组。
小群:群人数小于第一数量,如群人数小于1000。
大群:群人数大于或等于第一数量,且群人数小于第二数量,如群人数大于1000但小于5万。
特大群:群人数大于或等于第二数量,如5万。
其中,在实际应用中,小群、大群、以及特大群对应的阈值(第一数量和第二数量)都是可以根据实际应用需求配置和调整的。
为了便于更好的理解和说明本申请实施例提供的方法,下面首先结合一个具体的场景实施例对本申请提供的方法的可选实施方式进行介绍。本场景实施例中以即时通信应用为例进行说明,其中,该即时通信应用除提供有群组交互功能外,还可以集成包括但不限于其他(如资料管理、存储)等功能。下面分别从群成员信息的查询和群消息的发送两个方面,对本场景实施例进行展开说明。
图1示出了本场景实施例提供的一种可选的数据处理系统的结构示意图,如图1所示,该数据处理系统可以用户终端10、接入层20、转发服务器30、多个逻辑服务器(如逻辑服务器41、逻辑服务器42、…、逻辑服务器4N)、存储服务器50、以及推送服务器集群。
其中,用户终端10可以是运行有具有即时通信功能的应用/软件的任意终端,用户终端可以是用户的手机,也可以是电脑等。用户终端10可以通过接入层20与即时通信应用的服务器建立通信连接,用户可以基于其用户终端10上显示的该应用的用户界面,使用该应用提供的各种服务,如用户是一个群组中的成员,用户可以进行消息的群发。本申请实施例中,用户终端10可以通过接入层接入即时通信应用的转发服务器30,其中,转发服务器30可以有一个或多个,接入层20可以根据预配置的转发策略,将用户终端10的业务处理请求发送给该终端对应的转发服务器30。转发服务器30与即时通信应用的逻辑服务器通信,其中,逻辑服务器可以对其接收到的业务处理请求进行处理。本场景实施例中,存储服务器50可以是云服务器集群,可以用于存储即时通信应用中涉及的各种数据,如包括但不限于各个群组的群基础资料(如群组标识、群组的时效信息(有效期)、群组的群主信息、群组的成员上限、群组的创建时间、群组中各成员的标识等等),群组中成员的资料(可以包括但不限于成员标识、成员加入群组的时间、成员的个人属性信息等成员基本资料,还可以包括成员的当前状态,如是否在线)。可选的,本申请实施例中,群组的群基础资料和群组中成员的成员资料可以是分开存储的,如存储在不同的服务器集群中,可选的,成员的成员基础资料和状态信息也可以是分开存储的。
其中,本场景实施例中的转发服务器是本申请后文实施例中的第一服务节点,逻辑服务器为第二服务节点,可选的,第一服务节点和/或第二服务节点可以是云服务器。推送服务器集群中的推送服务器可以对群组中的群发消息进行推送。
本场景实施例中,任一群组的任一成员可以查询该群组中任一成员的基础资料,还可以查询群组的群基础资料,下面结合图2对本申请实施例提供的一种查询群成员的基础资料的方案进行说明,该方案以群组中的成员a查询群组中成员b的基础资料为例进行说明,该查询流程可以包括如下步骤:
步骤S11:成员a的用户终端10接收成员基础资料查询操作。
可选的,成员a可以在其用户终端10的用户界面上通过执行设定好的操作来发起针对成员b的基础资料的查询请求,例如,用户界面中可以显示有成员a和成员b所属的目标群组的群成员列表,该列表中可以显示有该群组中各个成员的标识信息(如成员昵称),成员a可以在成员b关联的目标区域(如用户界面中成员b的名称(如昵称或备注名称)显示区域)进行点击操作(当然也可以是其他触发方式),此时用户界面上可以显示与成员b关联的各种可选操作,如“查看资料”、“发送消息”等,成员a可以通过点击“查看资料”来触发针对成员b的基础资料查询操作。
步骤S12:用户终端10将针对成员b的成员基础资料查询请求(图2中的信息查询请求)通过接入层20发送给转发服务器30即群转发层。
其中,成员基础资料查询请求中包括目标群组的第一群组标识和成员b的成员标识。其中,成员b的成员标识可以是成员b在目标群组中的名称(如昵称),也可以是成员b的第一成员标识,例如,成员b加入该目标群组中为其分配的唯一标识(如根据群组中成员的加入时间先后,分配的成员在该群组中的唯一索引,比如,创建群组的成员的第一成员标识为1,第二个加入该群组的成员的第一成员标识为2,依次类推,群组标识和一个第一成员标识可以唯一地标识群组中的一个成员)。如果资料查询请求中没有包含成员b的第一成员标识,接收到该请求的逻辑服务器可以根据请求中携带的成员b的其他成员标识,确定出成员b的第一成员标识,如逻辑服务器中存储有全组中各个成员的昵称和相对应的第一成员标识之间的映射关系,根据该映射关系可以确定出成员b在该群组中的第一成员标识。
步骤S13:转发服务器30根据基础资料查询请求中的第一群组标识,确定该请求对应的目标逻辑服务器即目标群逻辑层,并将该请求发送给目标群逻辑层,如图2中的逻辑服务器41。
转发服务器30在接收到针对成员b的基础资料查询请求后,可以根据该请求中携带的第一群组标识,从多个群逻辑层中确定处理该请求的目标群逻辑层,其中,多个群逻辑层中的每个群逻辑层可以关联一个或多个群组的第一群组标识,一个群组的第一群组标识关联多个群逻辑层中设定数量的逻辑层,这里的设定数量可以是一个,也可以是多个,设定数量小于所有群逻辑层的总数目。
可选的,可以采用一致性哈希算法,建立群组的第一群组标识与群逻辑层之间的关联关系。可选的,假设群逻辑层的总数量为10个,上述设定数量为3个,对于每个群逻辑层,可以将该群逻辑层的指定参数(如群逻辑层的节点编号或其他标识)通过哈希算法,确定出该群逻辑层在哈希环上的第一位置,对于任一群组,可以根据该群组的第一群组标识通过哈希算法,确定出该群组在哈希环上的第二位置,可以根据该第二位置和各个群逻辑层对应的第一位置之间的匹配程度(如距离,或者以第二位置为起始位置,在哈希环上按照顺时针和/或逆时针方向进行移动,将经过第一位置的先后作为匹配程度,越先经过的第一位置匹配程度越高),将10个群逻辑层中第一位置与该第二位置最匹配的3个第一位置对应的群逻辑层,确定为该群组对应的目标群逻辑层。
步骤S14:目标逻辑服务器41对接收到的成员基础资料查询请求进行处理,将成员b的成员基础资料(查询结果)发送给成员a的用户终端。
如图2中所示,假设目标逻辑服务器为图1中的逻辑服务器41,该服务器接收到成员基础资料查询请求,可以根据请求中携带的第一群组标识和成员b的第一成员标识,获取到成员b的成员基础资料,并将该资料依次经由转发服务器30和接入层20发送给成员a的用户终端10,由该用户终端将成员b的群基础资料展示给成员a。
在实际应用中,由于针对群组的绝大多数或者所有的业务处理请求,都要用到群组的群基础资料,如上述成员基础资料查询请求,也需要基于该请求对应的目标群组的群基础资料进行相关验证,如验证目标群组是否失效,请求针对的成员b是否属于目标群组或者是否还在目标群组等等。考虑到该原因,本申请实施例中,每个逻辑服务器可以关联一个或多个群组(即第一群组标识),每个逻辑服务器可以从存储服务器50中预先获取其所关联的群组的群基础资料并缓存,当然,还可以按照预配置的群基础资料更新策略对其缓存的群基础资料进行全量更新或增量更新,这样,当一个逻辑服务器接收到业务处理请求时,可以基于其缓存的群组数据对业务处理请求进行快速处理。由于每个群组可以只关联部分逻辑服务器,因此,本申请实施例提供的方法无需全部逻辑服务器中都缓存所有群组的群组基础资料,可以提高缓存的利用率,还可以避免存储资源的浪费。
下面结合图3中所示的架构和上述场景实施例,对本申请实施例提供的一种针对群组的消息群发方案的可选流程进行说明。如图3所示,消息发送终端11是目标群组中发送目标消息(群发消息)的用户终端,消息接收终端12是目标群组中任一成员的用户终端。下面以发送终端11是目标群组(可以是任一群组)中的成员a的用户终端,接收终端12是成员b的用户终端为例,消息群发流程可以包括以下步骤:
步骤S21:发送终端11接收成员a针对目标群组的消息群发操作。
步骤S22:发送终端11通过接入层将消息群发请求发送给转发服务器30。
可选的,成员a可以在发送终端11上的上述即时通信应用的消息群发界面上输入其想要群发的消息,输入之后可以点击“发送”控件。发送终端11在获取到成员a的该点击操作之后,可以通过接入层将消息群发请求发送给转发服务器30,该请求中包括要发送的群发消息和目标群组的第一群组标识。
步骤S23:转发服务器30根据消息群发请求中的第一群组标识,确定该请求对应的目标逻辑服务器,并将该请求发送给目标逻辑服务器,如图3中的逻辑服务器43。
步骤S24:目标逻辑服务器43根据消息群发请求中的第一群组标识,确定目标群组对应的成员数量,根据该成员数量确定目标群组是小群、大群还是特大群。
步骤S241:若目标群组是小群,目标逻辑服务器43根据目标群组的第一群组标识,从本地缓存读取或者从存储服务器50获取该目标群组中所有成员的成员资料,生成针对每个成员的待推送信息,并将该信息发送到消息中心;
步骤S242:若目标群组是大群,目标逻辑服务器根据目标群组的群组标识,生成该目标群组对应的待推送信息,并将待推送信息发送到消息队列中存储,该待推送信息中包括群组指示信息(如第一群组标识)和目标消息。
步骤S243:若目标群组是特大群,目标逻辑服务器43根据目标群组的成员数量,确定目标群组的分组数量,并生成相应数量的分组索引,基于每个分组索引生成该每个分组索引对应的待推送信息,将待推送信息发送到消息队列中存储,该待推送信息中包括群组指示信息(如第一群组标识和分组索引)和目标信息。
其中,本申请实施例中,小群、大群和特大群的划分,是依据群组中的成员数量来划分的,不同群的成员人员划分阈值可以根据实际需求配置和调整。
步骤S25:推送服务器60对消息中心或消息队列中的待推送信息进行消费,将目标消息推送给群组中的各个成员。
为了更好的满足实际应用中的群发消息的推送需求,提升推送效率,本申请实施例中提供了两种消息推送方式,一种是针对小群的快速通道推送方式,一种是针对大群和特大群的慢速通道推送方式。
具体的,在目标群组是小群时,成员数量相对较小,目标逻辑服务器可以基于目标群组中每个成员的成员资料,生成每个成员各自对应的待推送信息。当然,如果目标逻辑服务器中之前获取并缓存了该目标群组中各成员的成员资料,目标逻辑服务器可以从缓存中直接读取该目标群组中各成员的成员资料,并根据每个成员的成员资料,生成每个成员各自对应的待推送信息,可以将每个成员对应的待推送信息存储到消息中心中,由推送服务器对该消息中心存储的待推送信息进行消费。如果目标逻辑服务器中没有缓存的成员资料,逻辑服务器可以从存储服务器中获取成员资料。
在目标群组是大群或特大群时,如果仍采用快速通道推送方式,会大大增加目标逻辑服务器的处理时间,针对该问题,大群和特大群可以采用慢速通道推送方式,其中,对于大群,目标逻辑服务器可以基于目标群组的第一群组标识生成待推送信息,可选的,该待推送信息中可以包括第一群组标识和需要推送的目标消息(即群发消息),待推送信息可以存放到消息队列中,由推送服务器消费。推送服务器在对该待推送信息消费时,可以基于第一群组标识从其缓存或存储服务器中获取该第一群组标识对应的各成员的成员资料,并基于每个成员的成员资料,可以采用在线或离线的推送方式,将目标消息推送给各个成员。
而对于特大群,目标逻辑服务器可以根据目标群组的具体成员数量,将目标群组划分成多个分组,每个分组可以对应目标群组中的部分成员,目标逻辑服务器可以生成每个分组对应的待推送信息,并将每个分组对应的待推送信息存储到消息队列中,由推送服务器消费。此时,一个分组对应的待推送信息除了包含要推送的目标消息之外,还应该包括该分组对应的群组指示信息,消费服务器基于该指示信息能够从存储服务器或其缓存中获取到该分组对应的部分成员中各个成员的成员资料,从而将目标消息采用离线或在线推送的方式,将目标消息推送给该分组对应的各个成员。其中,每个分组对应的待推送信息中的指示信息可以是由群组成员的成员资料的具体存储方式决定的,例如,根据成员资料的存储方式,根据目标群组的群组标识和分组索引可以获取到成员资料,那么指示信息可以是群组标识和分组索引。
也就是说,大群对应的群组指示信息是用于确定整个群组中所有成员的相关信息,特大群对应的群组指示信息用于确定群组中一个分组对应的成员的相关信息。
可选的,快速通道推送和慢速通道推送对应的推送服务器或服务器集群,可以是相同的,也可以是不同的。如图3所示,推送服务器60在对消息中的待推送信息进行消费时,由于其中的待推送信息是每个成员各自对应的,其中至少包括有成员的状态(是否在线)和成员的推送地址等信息,推送服务器60可以根据这些信息将目标消息发送给每个成员的用户终端,可选的,推送服务器60可以通过接入层将目标消息发送给消息接收终端。对于消息队列中的待推送消息,由于消息队列中包含的是用于获取成员资料的指示信息,因此,推送服务器60在对消息队列中的待推送信息进行消费时,需要基于待推送信息中的指示信息,从其缓存或存储服务器中先获得成员资料,再基于获得的资料进行目标消息的推送。
对于本申请实施例中群组的群基础资料和群组中成员的基础资料的可选存储方式、以及资料的获取方式,将在后文中结合可选方式再进行说明。
下面通过对几个示例性实施方式的描述,对本申请实施例的技术方案以及本申请的技术方案产生的技术效果进行说明。需要指出的是,下述实施方式之间在互相不存在冲突的前提下,是可以相互参考、借鉴或结合,对于不同实施方式中相同的术语、相似的特征以及相似的实施步骤等,不再重复描述。
图4示出了本申请实施例中提供的一种数据处理方法的流程示意图,该方法可以由第一服务节点(如图1中的转发服务器)执行,如图4所示,本申请实施例提供的数据处理方法可以包括以下步骤:
步骤S410:获取与目标群组有关的业务处理请求,业务处理请求中包括目标群组的第一群组标识;
步骤S420:根据第一群组标识,从多个第二服务节点中确定出业务处理请求对应的目标服务节点,其中,目标服务节点为多个第二服务节点中的部分节点;
步骤S430:将业务处理请求发送给目标服务节点,以使目标服务节点根据目标群组的相关资料对业务处理请求进行处理。
其中,目标群组可以是目标应用程序中的任一群组(或直接称为群),如即时通信应用中的群组,一个群组中应包括至少一个成员。对于上述业务处理请求的具体请求类型本申请实施例不做限定,可以是针对目标群组的任意业务处理请求,例如,业务处理请求可以是群组成员资料查询请求、群组资料查询请求、消息群发请求等等。
本申请实施例中,目标群组的第一群组标识可称为目标群组的原始群组标识或原始群号(OriginGroupCode),对于原始群号的确定方式本申请实施例不做限定,可以是数字或其他方式,一个群组的群号可以唯一标识一个群组。
本申请实施例中,一个群组可以与至少一个第二服务节点(如图1中的逻辑服务器)关联,该至少一个第二服务节点是所有第二服务节点中的部分节点,针对一个群组的业务处理请求会被第一服务节点发送至该群组所关联的第二服务节点,由第二服务节点中预配好的业务处理逻辑对业务处理请求进行处理。
为了描述方便,下面的一些实施例中可以将第一服务节点称为群转发层,将第二服务节点称为群逻辑层。
本申请实施例中,群组和与其关联的群逻辑层之间的关联,可以是通过群组的原始群号建立起来的,群转发层在接收到业务处理请求之后,可以根据请求中携带的原始群号确定该请求对应的群逻辑层,也就是目标服务节点。其中,对于采用原始群号建立群组和第二服务节点之间关联的具体方式,本申请实施例不做唯一限定,可以包括但不限于一致性哈希算法。
可选的,对于上述目标群组而言,群转发层在接收到针对该群组的业务处理请求之后,可以将该群组的OriginGroupCode作为key(键),利用一致性Hash将请求转发给多个群逻辑层中的某台或某几台群逻辑层,这里的某台或某几台群逻辑层即为该业务处理请求对应的目标服务节点。可选的,对于来自于任一用户终端的针对目标群组的一个业务处理请求,群转发层可以根据该目标群组对应的各个群逻辑层的负载情况,将该业务处理请求发送给其中负载较轻的群逻辑层。
图5示出了本申请实施例提供的一种业务处理请求的可选处理流程,以业务处理请求是针对目标群组的群相关请求为例,该请求的处理流程可以包括:用户终端可以通过终端上的即时通信应用的客户端发起请求到达接入层,接入层可以将群相关请求发给群转发层,群转发层根据目标群组的原始群号确定出目标群组关联的目标群逻辑层,将请求转发给目标群逻辑层进行处理。例如,群相关请求是群基础资料查询请求,目标群逻辑层接收到该请求后,可以根据群号找到该目标群组的群基础资料,并发送给群转发层,群转发层通过接入层将群基础资料发送给请求的用户终端,由该终端将群基础资料显示给用户。
可选的,本申请实施例中,目标群组的目标服务节点可以缓存有目标群组的群基础资料,除目标服务节点之外的第二服务节点不缓存目标群组的群基础资料;目标服务节点在对接收到的业务处理请求进行处理时,可以基于该目标群组的相关资料进行处理,其中,该相关资料包括目标群组的群基础资料。
在实际应用中,在应用程序初始化阶段,如果一个群组关联的群逻辑层中没有缓存该群组的群基础资料,群逻辑层在接收到该群组对应的业务处理请求时,可以先根据该群组的原始群号,从存储群组基础资料的存储服务器中获取该群组的群基础资料并缓存。可选的,群逻辑层中的资料缓存可以是短时缓存,比如,在缓存时长超过设定时间(如2秒)后缓存的资料会被删除,以减少对群逻辑层的存储资源的占用,当群逻辑层再次接收到业务处理请求时,可以从群基础资料服务器中再次去拉取相关资料。当然,如果群逻辑层的存储能力足够强大,理论上群逻辑层也可以定期对其缓存的群基础资料进行更新,例如,群逻辑层可以定期去存储服务器请求更新后的群基础资料,或者是存储服务器可以在群组的群基础资料有更新时,将更新后的资料发送给群组关联的群逻辑服务器,其中,更新可以是全量更新,也可以是增量更新。
对于提供与群组有关服务的应用(如即时通信IM软件)来说,主要数据(群组的相关数据)通常有两个,一个是群基础资料,一个是群成员基础资料,大部分与群组有关的请求都需要对这两个资料进行验证(比如群是不是还存在、是不是整个群的全成员、如果请求涉及到权限的验证,还要确定请求端是不是具有权限)。对于群组而言,在群组是小群时通常能够稳定运行,但在群人数到达一定量(如到达万这个级别)时,由于群成员人数比较多,针对同一群组的请求量就会比较大,会极易造成热点请求问题,大量针对同一群组的请求可能会拖垮服务器。
其中,群成员基础资料由于是与群成员相关,通常不存在热点问题,可以通过分布式存储的方式来解决与群成员资料相关的请求量大的问题。而群基础则料则不用,由于所有群成员使用的都是同一份群基础资料,群基础资料在群成员进退群、群中有消息发送等情况下会更新,群成员登录应用、应用由后台切换到前台、群成员读消息等情况也都会读取群基础资料,群组会涉及大量的群基础资料的并发读操作。如果使用通常的分布式存储而不做特殊处理的话极易造成资源不平衡,比如某个百万人群的群基础资料被分布式存储到某台机器了,为了能够匹配大量读请求,需要将存储机器配置调的很高,或者开启大量副本以应对读请求,如此一来,没有存储百万人群的其他分布式存储机器也相应的增加了配置,造成资源的浪费。可选的,为了合理利用资源,可以在群逻辑层增加本地缓存,即在群逻辑层中缓存群基础资料。但目前的相关技术中,如图6中所示的一种现有相关技术的群组请求处理方式,接入层在接收到用户终端的群相关请求时,会将群相关请求转发给群逻辑层,如基于负载均衡策略确定的负载较小的逻辑层,由于目前一个群组的请求可以会被发送给任一群逻辑层,如果采用在群逻辑层增加本地缓存的方式,就需要在群逻辑层中的所有机器都要缓存所有群组的群基础资料,导致增加本地缓存后的缓存利用率并不高。
为了避免热点请求问题,并提高存储资源的利用率,本申请实施例提供的上述数据处理方法中,增加了群转发层即上述第一服务节点,并且每个群组只关联逻辑层中的部分机器即部分第二服务节点,每个第二服务节点可以关联一个或多个群组(可选的,可以是部分群组),这样,每个第二服务节点中可以只需缓存其所关联的群组的群基础资料,可以无需缓存其他不相关群组的群基础资料。相应的,群转发层在接收到与群组有关的业务处理请求时,可以将请求转发给群组关联的群逻辑层即可。通过在群逻辑层增加本地缓存,可以大大提高群基础资料的获取效率,避免由于针对同一群组的大量请求造成的热点问题,通过增加群转发层并建立群组与群组关联的部分群逻辑层的之间的关联,使得同一个群组的相关请求只会被与该群组关联的部分群逻辑层处理,该群组的相关资料也只需在部分群逻辑层中缓存,从而可以有效提高缓存利用率,还可以避免资源浪费。
对于目标群组中各成员的成员资料,其中,一个成员的成员资料可以包括成员基本资料或成员状态信息中的至少一项,成员基本资料可以包括但不限于成员昵称、成员头像、成员加入群组的时间、成员在群组中的成员类型(如是否是群组创建者、是否是群组管理员等)等基本信息,成员状态信息则是指成员当前是在线状态还是离线状态,群组成员的成员基本资料和成员状态信息可以是采用同一存储服务器集群进行存储的,也可以是采用不同的存储服务器集群存储的,可选的,目标群组各成员的成员基本资料可以存储在基本资料存储服务器中,成员状态信息可以存储在状态存储服务器中。
在目前的相关技术中,对于一个群组,通常是将该群组的群成员的成员资料按照群号(如GroupCode)做分布式存储,例如,将群号作为key计算群组对应的存储服务器,将群组中所有成员的成员资料都存储到该副服务器中,如基于成员的第一成员标识存储到服务器中。然后随着群成员数量的持续增长,就会导致某些存储了百万群的机器资源要求较高,因此不得不统一升级所有群存储机器的配置,导致资源浪费。
为了解决或改善上述由于群成员的资料存储导致的问题,本申请的可选实施例中,目标群组中的各成员的成员资料可以采用以下方式存储:
获取目标群组中各成员的第二成员标识;
对于目标群组中的任一成员,根据该成员的第二成员标识,从多个第二存储节点中确定出该成员对应的第二目标节点,并将该成员的成员资料存储到该第二目标节点中。
本申请的该可选方案,提出了一种将群成员的相关数据进行拆分存储的方案,而不是将一个群组中的所有成员的相关存储到一个服务器中。其中,一个成员的第二成员标识是能够唯一标识该成员的信息,可以按照预配置好的标识生成规则得到一个群组中每个成员的第二成员标识,第二成员标识可称为MemberId。
对于目标群组中的每个成员,可以将其第二成员标识作为存储依据,根据该标识来确定存储该成员的成员资料的目标节点(如云服务器或其他类型的服务器),可选的,该成员的成员资料在目标节点中也可以是基于第二成员标识存储的,也就是说,既可以根据第二成员标识确定成员资料的存储在哪个存储节点中,还可以根据该标识从存储节点中读取到该成员的资料。
其中,对于根据成员的第二成员标识来确定成员对应的第二目标节点的具体实现方式,本申请实施例也不做唯一限定,理论上只要可以是能够建立起第二成员标识和该标识对应的第二目标节点之间关联关系的方式都是可以的。可选的,对于任一成员,可以将其第二成员标识作为检索该成员资料的索引,在需要获取该成员的成员资料时,可以直接基于该索引从本地缓存中查找到该成员的成员资料,或者是可以基于该索引找到该成员对应的目标节点,还可以根据该索引从该目标节点中读取到该成员的成员资料。
作为一可选方案,上述获取目标群组中各成员的第二成员标识,可以包括:
确定目标群组的成员数量;
若成员数量大于或等于第一阈值,则生成目标群组中各成员的第二成员标识,记录并存储各个成员的旧标识和第二成员标识之间的映射关系,一个成员的旧标识包括该成员的第一成员标识和目标群组的第一群组标识;
若成员数量小于第一阈值,目标群组中的各成员的成员资料可以采用以下方式存储:
根据第一群组标识,从多个第一存储节点中确定出目标群组对应的第一目标节点;
基于目标群组中各成员的第一成员标识,将目标群组中各成员的成员资料存储到所述第一目标节点。
本申请的该可选方案,可以按照当前群组的成员数量来确定成员资料的方式,如果群组成员数量相对较小,即小于上述第一阈值,可以仍采用按照群号对群成员资料进行分布式存储的方式,在群组成员数量超过一定数量时,对群成员资料进行迁移,从第一目标节点迁移到第二目标节点中。
其中,上述第一阈值的具体取值可以根据实际应用需求配置和调整,为了描述方便,本申请实施例中,可以将成员数量大于或等于第一阈值的群组称为特大群,将成员数量小于第一阈值的群组称为非特大群,非特大群可以是小群或大群,可选的,大群和小群可以采用第二阈值进行划分,成员数量大于或等于第二阈值的群组可称为大群,成员数量小于第二阈值的群组可称为小群。
可选的,在实际实施中,对于非特大群,群中的成员可以只有第一成员标识(可称为原始成员标识OriginUserId),该标识的具体生成方式也可以根据需求配置,如可以是数字编号,例如,可以按照成员加入群组的时间从1开始增长,在群组达到特大群组的规模时,可以为群组分配新的群号(NewGroupCode,也就是后文的第二群组标识),需要新的群号的生成方式也可以根据实际应用需求配置,如可以从1开始增长,第1个被迁移的群组的新的群号为1,第二个被迁移的群组的新的群号为2。
在群组达到特大群组的规模时,可以为群组中的每个成员生成第二成员标识,也就是在获取成员资料时需要用到的成员标识。作为一可选方案,对于目标群组中的任一成员,该成员的第二成员标识可以是通过以下方式生成的:
确定目标群组的第二群组标识、以及该成员的第三成员标识;
根据该成员的第一成员标识和多个第二存储节点对应的分片的总数量,确定该成员对应的目标分片索引;
基于第二群组标识、该成员的目标分片索引和第三成员标识,生成该成员的第二成员标识。
本申请的该可选方案中,目标群组中成员的成员资料可以采用数据分片的分布式存储方案,多个第二存储节点对应的分片的总数量可以是根据实际需求预配置好的,每个第二存储节点可以对应至少一个分片,采用数据分片的方式,可以进一步加快数据查询的效率。本申请实施例中,可以将成员的第二成员标识MemberId作为分片键进行分布式存储,每个分片具有各自的分片索引(ShardIndex),一个分片索引唯一标识一个分片,对于任一群组中的任一成员,该成员的成员资料可以对应到一个分片中。
一个成员的第三成员标识(可称为NewUserId)可以是在成员数量增长到特大群时对成员分配的一个新的成员号,对于每个群组,该群组中各成员的编号可以从1开始增长,例如可以按照成员加入目标群组的时间(也可以是不按照该时间),为群组中的每个成员从1开始依次分配编号,第n个成员的第三成员标识为n。
本申请实施例中,一个成员对应的目标分片索引可以基于该成员的第一成员标识OriginUserId和分片的总数量来确定的,一个群组中一个成员的OriginUserId关联一个分片.可选的,第一成员标识可以是数字,如群组中共m个成员,第j个成员的第一成员标识分别是j,多个第二存储节点对应的所有分片的分片索引也可以是数字,如分片的总数量为256个,第i个分片的分片索引为i-1,可以将一个成员的OriginUserId%256的计算结果,确定为该成员的目标分片索引,或者称为目标分片位。
在确定出成员对应的目标分片索引之后,可以基于群组的第二群组标识、该成员对应的目标分片索引和该成员的第三成员标识NewUserId,生成该成员的第二成员标识。本申请实施例中,在已确定某个群组的情况下,该成员的第一成员标识和第三成员标识可以是该成员在该群组内的唯一标识(即群组内的标识,成员的局部标识),群组的第一群组标识和成员的第一成员标识的结合,或者,群组的第二群组标识和成员的第三成员标识的结合(群组间的唯一标识,成员的全局标识)可以唯一标识一个群组中的一个成员,群组的第二群组标识、成员的第三成员标识以及成员对应的目标分片索引的结合,可以从多个分片中找到成员的资料所存储在的第二目标节点,还可以从该节点中获取到该成员的成员资料。
可选的,不同群组的第二群组标识可以采用连续的数字编码作为群组标识,目标群组中各成员的第三成员标识也可以采用连续的数字编码;对于任一成员,该成员的第二成员标识可以是二进制编码标识,也就是二进制代码,其中,按照由高位到低位的顺序,该成员对应的二进制编码标识可以包括:目标群组的第二群组标识对应的第一设定位数的二进制表示、该成员的目标分片索引对应的第二设定位数的二进制表示、以及该成员的第三成员标识对应的第三设定位数的二进制表示。
其中,第一设定位数、第二设定位数和第三设定位数均可以根据实际应用需求预配置。第二设定位数也就是分片的总数量的二进制表示所占的位数。例如,分片总数量为256,第二设定位数为8。目标群组中各个第三成员标识NewUserId可以从1开始依次递增,各分片的分片索引也可以从0开始依次递增,那么二进制表示为00000000的分片索引则表示第一个分片索引,二进制表示为00000001的分片索引则表示第二个分片索引。
作为一可选方案,第一设定位数可以为28位,第二设定位数为8位,第三设定位数为28位,那么一个群组中各成员的第二成员标识MemberId(也可称为成员资料ID)可以表示如下:
其中,第二成员标识的高28位为NewGroupCode(也就是新的群号的二进制表示),低28位为NewUserId,中间8位为Shard分片位ShardIndex,可通过OriginUserId%256计算,其中,OriginUserId可以是64位整形数据。
在生成每个群组成员的第二成员标识MemberId之后,则可以将每个成员的该MemberId作为分片键,将该成员的成员资料迁移到新的存储节点中,具体的,可以根据MemberId确定出该成员所在的第二存储节点,并将成员资料存储到该节点中。
其中,为了能够根据成员的第一成员标识OriginUserId检索到成员资料,在为成员生成第二成员标识时,还需要新增索引层Member Index(MIndex),用于存储OriginGroupCode和OriginUserId到MemberId之间的映射关系,即记录并存储成员的旧标识和成员的第二成员标识之间的映射关系,其中,成员的旧标识可以与成员的OriginUserId关联,可选的,成员的旧标识可以是成员的全局标识,对于目标群组中的任一成员,该成员的旧标识可以包括该成员的第一成员标识和第一群组标识。那么在需要获取某个成员的资料时,可以根据该成员的第一成员标识和第二群组标识,找到该成员的第二成员标识MemberId,进而可以采用该MemberId从第二存储节点中获取到该成员的成员资料。
对应于本申请实施例提供的上述群成员资料的存储方案,可以采用相应的方式来获取目标群组中成员的成员资料,可选的,对于目标群组中的任一成员,该成员的成员资料可以是通过以下方式获取到的:
确定目标群组的成员数量;
若成员数量小于第一阈值,则基于第一群组标识确定目标群组对应的第一目标节点,基于该成员的第一成员标识,从所述第一目标节点获得该成员的成员资料;
若成员数量大于或等于第一阈值,则根据该成员的旧标识和映射关系,确定该成员的第二成员标识,根据该成员的第二成员标识,确定该成员对应的第二目标节点,并从确定的第二目标节点中获得该成员的成员资料。
本申请实施例中,在群成员数量较少时(如小群和大群)时,可以仍然按照原有方式存储,如可以使用OriginGroupCode做分片,可以使用OriginGroupCode和OriginUserId检索一个群成员,可以根据OriginGroupCode确定出目标群组中所有成员的成员资料的存储位置即第一目标节点,进一步的,以根据各成员的OriginUserId(或OriginGroupCode和OriginUserId)从第二目标节点中检索到各成员的成员资料。例如,对于一个群组的群成员资料的存储节点,如果不同群组的成员资料是分别存储的,请求成员资料的电子设备(如第二服务节点或群发消息推送服务器)可以根据OriginGroupCode和OriginUserId去请求成员资料,当然,如果是请求群组中所有成员的资料,也可以是根据OriginGroupCode去请求,存储节点接收到请求之后,可以根据OriginGroupCode找到该群组中所有成员的资料,如果是请求某个成员的资料,存储节点可以根据该成员OriginUserId从该群组中所有成员的资料中找到该成员的成员资料。
如果目标群组是特大群,则需要根据上述映射关系,首先确定出群组中成员的第二成员标识MemberId,然后根据该MemberId检索到成员资料。如图7所示的一种特大群的群成员的成员资料的检索原理示意图,例如,用户终端发送的业务处理请求是成员a的基本资料获取请求,该请求中包含目标群组的原始群号OriginGroupCode和成员a的第一成员标识OriginUserId,目标服务节点即目标群组对应的目标群逻辑层在接收到群转发层发送的该请求之后,可以先确定目标群组的成员数量,如可以根据群基础资料确定成员数量,如果目标群组是特大群,目标群逻辑层则根据请求中的OriginGroupCode和OriginUserId(原始UserId),从记录的成员的旧标识和MemberId之间的映射关系(如7中所示的MIndex)中,找到成员a的MemberId(新UserID),根据该MemberId即可以检索得到成员a的成员资料。
本申请实施例提供的上述存储方案,迁移后可将特大群(如百万人群)的群成员由原来的GroupCode分片转为使用新的MemberId分片,可以大大增加分片key数量,可利用分布式存储将百万人群的群成员资料分散到多个存储机器上,平衡存储资源,可避免将一个群组的所有群成员的资料堆积在一台机器上,可以解决分页拉取群成员信息或者全量拉取群成员信息都会遇到瓶颈的问题。可选的,上述群组成员资料的迁移操作可以由逻辑层执行,也可以由迁移服务器执行,可选的,为了避免对群逻辑层的业务处理造成影响,群成员资料的迁移可以采用异步迁移,比如,当群成员的数量达到特大群规模时,逻辑层可以通知迁移服务器将目标群组的群成员资料进行迁移操作。
本申请实施例中,针对目标群组的业务处理请求可以包括消息群发请求,该请求中包括发送终端输入的目标消息(其中,目标消息可以包括但不限于文本、图像、语音或视频等各种模态信息中的一种或多种),该目标消息需要发送给目标群组中的每个成员。可选的,目标群组的目标消息的群发,群逻辑层可以基于本地存储或从存储节点中获取的该目标群组中所有成员的成员资料,生成每个成员各自对应的待推送信息,由推送服务器消费每个成员的待推送信息,将目标消息推送给各个成员,即发送到各个成员的用户终端。其中,对于在线的群成员,可以采用在线推送方式,对于离线的群成员,可以采用离线推送方式。
虽然上述方案能够满足基本的消息群发需求,但是该方案需要逻辑层先将群组中所有群成员的成员资料查出后,再根据群成员状态决定使用在线推送或离线推送,在目标群组的成员数量达到一定数量时,如果目标群组中每次有群发消息都去查询所有群成员信息,那么群发消息的推送延迟将变得不可接受,为了提升消息推送速度,作为一可选方案,可以采用先将群成员信息缓存到本地(如本地内存)并定时更新的方式,具体的,在需要进行消息群发时,目标群组中各成员的成员资料可以通过以下方式获取:
若本地缓存中存在目标群组中各成员的成员资料,则从本地缓存中获取目标群组中各成员的成员资料;
若本地缓存中不存在目标群组中各成员的成员资料,则从存储目标群组的各成员的成员资料的目标存储节点(如目标群组对应的第一目标节点,或者是群组中成员对应的第二目标节点)中,获取目标群组中各成员的成员资料,并将获取的成员资料缓存在本地缓存中。
当然,如果群逻辑层或者推送服务器中缓存有成员资料,也可以定期或者根据通知对缓存的资料进行更新。比如,群逻辑层或推送服务器可以按照一定的间隔从成员资料的存储节点拉取最新的群成员资料,或者,推送服务器也可以从群逻辑层去拉取成员资料。
此外,对于成员数量较大(如大群和特大群)的目标群组,如果每次有针对该群组的群发消息,都由该目标群组对应的目标群逻辑层根据每个成员的成员资料生成每个成员各自对应的待推送信息,即对于每个成员,目标群逻辑层需要告诉推送服务器给该成员推送消息所需的该成员的相关信息以及群发消息,这就会导致群逻辑需要花费大量的资源和处理时间。针对该问题,本申请实施例还提供了一种可选方案,该方案中,需要群发的目标消息是由目标服务节点通过以下方式发送的:
确定目标群组的成员数量;
若成员数量小于第三阈值(该阈值与第二阈值可以同一阈值,也可以不是),则获取目标群组中各成员的成员资料,对于目标群组中的每个成员,根据该成员的成员资料,生成该成员对应的包含目标消息的待推送信息,以由第四推送服务器基于该待推送信息将目标消息推送给该成员;
若成员数量大于或等于第二阈值,则生成目标群组对应的待推送信息,以由第五推送服务器基于该待推送信息中的第三群组指示信息获取目标群组中各成员的成员资料,并根据各每个成员的成员资料,将待推送信息中的目标消息推送给各个成员。
其中,第四推送服务器和第五推送服务器可以是同一推送服务器集群中的服务器,也可以是不同推送服务器集群的服务器。
本申请的该可选方案中,提供了两种不同的群发消息推送方案,其中,成员数量小于第三阈值(如小群)的推送方式可以称为快速通道下发,对于成员大于或等于第三阈值(如大群、特大群)的推送方式可以称为慢速通道下发。这两种方式的主要不同在于,快速通道下发是由目标群逻辑层生成每个成员的待推送信息,推送服务器只需要根据待推送信息中包括的目标消息和成员的相关信息,将目标消息发给对应的成员即可。慢速通道下发对应的待推送信息中除了包括目标消息,还应包括第三群组指示信息,推送服务器需要根据该指示信息自行获取推送目标信息所需的成员的相关信息,如成员状态(在线或离线)和成员的用户终端的相关信息,推送服务器根据获取的各成员的相关信息,将目标消息采用离线推送或在线推送方式发送给群组指示信息对应的各个成员。
对于本申请实施例中所描述的群组指示信息(如上述第三群组指示信息、后文中的第一群组指示信息、第二群组指示信息)的具体内容,本申请实施例不做限定,可以根据群成员信息的方式关联,理论上,只要推送服务器可以根据群组指示信息获取到需要推送目标消息的各成员的成员资料即可,这里的群员资料可以是进行消息推送所需的相关资料。
可选的,在成员数量大于或等于上述第三阈值,且小于第一阈值时,如目标群组是大群时,上述目标群组对应的待推送信息可以是群组中所有成员对应的待推送信息,上述第三群组指示信息可以包括第一群组标识,推送服务器根据该标识可以获取到目标群组中所有成员的成员资料,并可以基于获取的资料将目标消息推送给群组中的所有成员。如果成员数量大于第一阈值,如目标群组是特大群,目标群组对应的待推送信息可以包括多个分组对应的待推送信息,每个分组对应群组中的部分成员,上述第三指示信息可以包括第一群组标识和分组指示(如分组索引),对于每个分组对应的待推送信息,推送服务器可以根据该信息中的群组指示信息,确定并获取到该分组对应的部分成员的成员资料,并将待推送信息中的目标消息推送给这部分成员。
需要说明是的是,本申请实施例提供的上述快速通道下发和慢速通道下发的推送方式,可以适用于采用现有相关技术对群成员资料进行存储的方式,也使用于本申请实施例中提供的任一群成员资料的存储方式。只要在采用慢速通道下发方案时,推送服务器能够根据待推送信息中的群组指示信息获取到群组中各个成员的成员资料即可。
作为一可选方案,目标群组的群成员资料可以采用本申请前文的可选实施例提供的下述存储方式:
若目标群组的成员数量小于第一阈值,则基于第一群组标识确定目标群组对应的第一目标节点,基于各成员的第一成员标识,将各成员的成员资料存储到第一目标节点中;若成员数量大于或等于第一阈值,则采用前文中提供的采用二进制编码标识作为每个成员的第二成员标识的方案,确定每个成员对应的第二目标节点,并将每个成员的成员信息存储到各自对应的第二目标节点中。
对于该存储方式,在目标群组的业务处理请求是目标消息的群发请求时,作为一可选方案,需要群发的目标消息可以是由目标服务节点通过以下方式发送的:
若成员数量小于第二阈值,则基于第一群组标识,获取目标群组中各成员的成员资料;对于每个成员,根据该成员的成员资料和目标消息,生成该成员对应的待推送信息,以由第一推送服务器基于该成员对应的待推送信息将目标消息推送给该成员;其中,第二阈值小于第一阈值;
若成员数量大于或等于第二阈值且小于第一阈值,则生成目标群组对应的待推送信息,以由第二推送服务器根据该待推送信息中的第一群组指示信息,获取目标群组中所有成员的成员资料,并根据各成员的成员资料,将该待推送信息中的目标消息推送给各成员,即一个群组对应一个待推送信息;
若成员数量大于或等于第一阈值,根据成员数量确定目标群组对应的分组数量,并生成相应数量的分组索引,其中,每个分组索引对应目标群组的部分成员、且不同分组索引对应的成员不同,每个分组索引对应至少一个分片;对于每个分组索引,基于目标消息和该分组索引,生成该分组索引对应的待推送信息,以由第三待推送服务器根据该待推送信息中的第二群组指示信息,获得所述目标群组中该分组索引对应的各成员的成员资料,并根据各成员的成员资料,将该分组索引对应的待推送信息中的所述目标消息推送给各成员。
该可选方案中,不同的群组按照成员数量可以分为小群、大群和特大群三种。小群可以采用快速通道下发方式,大群和特大群可以采用慢速通道下发方式,其中,特大群还可以采用分组推送的慢速通道下发方式。该可选方案中针对大群和特大群的推送方式,即为前文中在目标群组的成员数量大于或等于第三阈值时的一种可选实施方式,此方式中的第二阈值即为第三阈值,是小群和非小群的划分阈值。
该可选方案中,如果目标群组是特大群组,在进行消息推送时,可以将目标群组进行分组推送,以避免由于群成员人数过多导致群组的群发消息推送过慢。可选的,可以根据预设阈值,将目标群组划分为至少两个分组,该预设阈值用于限制每个分组对应的群成员的成员数量。采用该分组方式,可以基于成员数量实现动态分组,每个分组对应至少一个分片。采用该方案,推送服务器在进行目标消息推送时,每一次推送是针对一个分组的,推送服务器根据一个分组对应的群组指示信息可以获取到该分组对应的各成员的成员资料,将目标消息发送给该分组对应的各成员。
作为一可选方案,若目标群组是大群,即成员数量大于或等于第二阈值,且小于第一阈值,上述第一群组指示信息可以包括第一群组标识,若目标群组是特大群,即成员数量大于或等于第一阈值,上述第二群组指示信息可以包括第一群组标识和分组索引,或者可以包括第二群组索引和分组索引。
可选的,目标群组对应的各分组索引的值分别为0,1,2…,N-1,其中,N为分组数量,N-1为第N个分组索引,对于任一分组索引,该分组索引对应的各成员的成员资料可以是通过以下方式获得的:
基于第二群组标识和该分组索引的值,通过以下表达式确定该分组索引对应的第二成员标识的标识下限和标识上限:
标识下限lower limit=NewGroupCode<<(shardShift+shardIndexBit)+
((PushShardIndex*(2shardIndexBit/ShardNum))<<shardShift);
标识上限upper limit=NewGroupCode<<(shardShift+shardIndexBit)+
(((PushShardIndex+1)*(2shardIndexBit/ShardNum))<<shardShift);
其中,NewGroupCode为第二群组标识的二进制表示,PushShardIndex表示分组索引的值,shardIndexBit为前文中的第二设定位数(也就是分片索引所占的存储位),shardShift为第三设定位数(也就是成员的第三成员标识所占的存储位),ShardNum为分组数量,即ShardNum=N;
根据该分组索引对应的第二成员标识的标识下限和标识上限,获得第二成员标识位于所述标识下限和标识上限之内的各成员的成员资料,所获得的各成员的成员资料为该分组索引对应的各成员的成员资料。
可选的,在实际实施时,在目标群组是特大群时,如果群逻辑层或推送服务器需要获取(如本地没有缓存或需要对缓存进行更新时)特大群的群成员资料时,对于每个分组,可以基于上述表达式确定出要获取的该分组对应的上述成员标识上限和成员标识下限,从而可以拉取到该分组对应的各成员的成员资料。
具体的,对于每个分组,该分组对应的第二成员标识的标识下限和标识上限范围内的所有第二成员标识(即满足lower limit<MemberId<=upper limit的所有MemberId)都是该分组对应的部分成员的标识,进而可以获得该分片对应的所有成员的成员资料。
需要说明的是,本申请上述各可选实施例中提供的群组成员资料的获取方案,也可以作为群组成员资料的更新方案。群逻辑层和推送服务器可以根据群组标识(如第一标识)定期或根据通知对其缓存的资料进行更新。
为了更好的理解和说明本申请提供的群发消息推送方案,下面结合图8对本申请的一种可选实现方案进行进一步说明。为了避免群发消息推送时如果拉取全量群成员资料会导致群成员数量增大到一定阈值后延迟增大,甚至完全不可用的问题,如图8中所示该可选实施方案可以包括如下流程:步骤1:转发层接收消息发送端发送的针对群组1的群发请求,该请求中包括群组1的原始群号OriginGroupCode;
步骤2:转发层将OriginGroupCode作为key,利用一致性Hash将该群发请求转发给该OriginGroupCode对应的目标群逻辑层;
步骤3:目标群逻辑层判断当前群所包含群成员人数即成员数量,如果是小群(群人数较少)则使用快速通道推送方式推送消息给群成员,如果是大群或特大群(群人数较多)则使用慢速通道下发消息给群成员。
可选的,对于小群和大群,群成员的成员资料可以根据群组的OriginGroupCode和成员的OriginUserId(如64位整形,群内成员的该ID可以从1开始递增的方式)检索得到。在群成员的数量达到特大群规模时,可以采用以下方式进行群成员迁移:
①对迁移的群分配新的群号NewGroupCode,从1开始增长;对群成员分配新的NewUserId,每个群独立增长,从1开始增长。
②生成每个成员的第二成员标识MemberId,对于每个成员,MemberId为64位二进制编码,高28位为成员的NewGroupCode,低28位为NewUserId,中间8位为Shard分片位ShardIndex,可通过OriginUserId%256计算得到。
③新增索引层Member Index,存储OriginGroupCode和OriginUserId到MemberId映射关系。
④将群成员迁移到新的存储(第二目标节点)中,分布式存储时可以使用每个成员的MemberId作为分片键。
对于该存储方案,目标群逻辑层在确定群组1是小群时,可以基于其本地缓存的该群组的各成员的相关信息,生成群组1中每个成员对应的待推送信息,存储到图8中所示的消息中心,可选的,每个成员的成员状态信息是可以单独存储在状态服务器中的,推送服务器集群中的推送服务器对消息中心的待推送信息进行消息,推送服务器可以根据从状态服务器获取到的该群组中每个成员的状态是在线还是离线,选择在线或离线的方式,通过接入层将群发消息发送给群组1中各成员的消息接收端。
如果目标群逻辑层确定群组1是大群,大群的群发消息的推送可以包括如下步骤:
1.目标群逻辑层将待下发的消息,可以使用OriginGroupCode作为key发送到消息队列,即存储到消息队列(可以是消息服务器)中的待推送信息可以包括OriginGroupCode和要推送的目标消息。
2.可选的,消息队列根据key使用一致性hash负载均衡方式或其他方式选择一台群推送服务器对队列中的信息进行消费。
3.群推送服务器获取到待推送信息之后,可以根据OriginGroupCode判断本地是否缓存有该群组中群成员的资料,如果已经存在,则根据成员的基本资料和状态,将目标消息采用离线或在线方式,通过接入层发给消息接收端,如果本地缓存中没有缓存该群组中群成员的资料,则推送服务器可以执行以下操作:
a)调用群逻辑服务拉取所有群成员,如根据OriginGroupCode从目标群逻辑层拉取所有成员的资料,可选的,推送服务器也可以基于OriginGroupCode从该群组对应的第一目标节点(存储服务器)中拉取该群组中所有成员的成员资料。
b)调用状态服务获取相应群成员状态,如根据群成员的基本资料(如群成员的原始成员标识)从状态服务器拉取该群组中所有成员的成员状态。
c)根据状态选择在线推送或者离线推送将消息下发给群组中各个成员。
如果目标群逻辑层确定群组1是特大群(如百万人群),特大群的群发消息的推送可以包括如下步骤:
1.通过群基础资料获取当前群成员人数
2.根据群成员人数计算需要将群成员分成多少片(分组),可选的,可以采用以下公式计算分组数量ShardNum:
ShardNum=align2((MemberNum)/(Threshold))
其中,MemberNum为群成员人数即群组的成员数量,align 2用计算大于或等于所求值的最小2的幂,Threshold为阈值,可以根据实际需求配置和调整。作为一个示例,假设MemberNum为100万,阈值为5万,那么MemberNum/Threshold=20,因为24<20<25,align 2(20)=25,所以ShardNum=align 2(20)=32,也就是可以将群组分为32个组。
对于上述存储方式,分布式存储对应的分片的总数量为256,因此,在分组数量为32时,一个分组可以对应8个分片,可选的,第1个分组对应分片索引为0至7的分片,第2个分组对应分片索引为8到15的分片,依次类推,第8个分组对应分片索引为248至255的分片。
3.遍历ShardNum生成索引值为0到ShardNum-1分片号PushShardIndex,也就是分组索引,每个分组索引可以结合群号GroupCode作为key发送到消息队列。具体的,对于每个分组,将每个分组对应的待推送信息发送到消息队列中,一个分组对应待推送信息中可以携带有群号GroupCode、群发消息和该分组的分组索引。其中,群号和分组索引为群组指示信息,用于确定该分组对应的各个成员,得到各个成员的相关信息,以将群发消息由推送服务器推送给该分组对应的各个成员。可选的,待推送信息中的群号可以是OriginGroupCode,也可以是NewGroupCode。
4.消息队列根据key使用一致性hash负载均衡方式选择一台群推送服务机器即推送服务器消费。
5.群推送机器获取到消息队列中待推送信息中的目标消息后,可以先判断本地是否缓存了该待推送信息对应群组的群成员资料,如果缓存了,可以直接基于本地缓存的群成员资料将群发消息推送给每个成员,如果本地没有缓存,群推送机器可以执行以下操作:
a)调用群逻辑服务拉取所有群成员即成员资料。可选的,群推送机器可以根据待推送信息中的群号从目标群逻辑层拉取成员资料,可选的,如果待推送信息中携带的群号是NewGroupCode,对应每个分组,群推送机器也可以根据该分组对应的各个分片,基于NewGroupCode从这些分片中拉取到该群组中该分片的各成员的成员资料。
b)调用状态服务获取相应群成员状态。
6.根据状态选择在线推送或者离线推送将消息下发给用户。
作为一可选方案,对于任一群组,该群组对应的目标群逻辑层在群成员每次进退群时可以分配版本号Version,版本号从1开始递增。其中,不论是有新成员加入群组,还是有成员退出群组,该新成员的成员版本号是在原来版本号的基础上加1,版本号的变化则代表了群组成员的变化,该变化可能是有成员增加,有可能是成员退群,在群成员有变化时,可以通过更新版本号以及具体的变化内容(如相比于更新前的版本号,新增了哪个或哪些成员,哪个成员退群了等)来标识群组成员的具体变化情况,通过获取群组当前最新的版本号即可知晓群成员有没有发生变化,如果有变化,则可以获取具体哪些成员发生了变化。当然,也可以采用其他的方式来记录群组成员数量的变化。通过记录群成员信息的变化情况,可以实现成员资料的增量更新,如推送服务器在需要拉取群成员的最新资料时,例如更新其缓存的群成员基本资料时,可以通过获取群组当前最新的版本号V1,并将其缓存的群组的版本号V0和V1进行比较,如果两者相同,说明群成员没有发生变更,无需更新,如果两者不同,说明群成员信息发生了变更,推送服务器可以去群逻辑层获取具体的成员变化情况,如相比于版本V0,成员a和成员b退群了,那么推送服务器则可以将其缓存的成员a和成员b的资料删除。
本申请实施例中,群逻辑层或推送服务器中所缓存的群成员资料,如成员基本资料和状态信息,都可以按照预配置的更新策略进行更新,例如,可以按照预设的更新间隔进行更新,当然也可以是每次需要使用成员资料时实时更新,如群发消息推送时,推送服务器根据要消费的待推送信息,获取要推送的各个成员的成员资料,其中,群基本资料和状态信息的更新间隔可以不同。其中,对于小群,由于成员数量较小,可以采用全量更新策略,当然也可以采用增量更新策略。下面以推送服务器获取或更新缓存的群成员的成员资料为例,对大群和特大群的群成员资料的可选获取方案进行说明。
对于大群,群推送服务中大群本地群成员缓存更新方案可以采用全量拉取、定期增量更新、或实时通知更新的方式。
1.全量拉取的流程可以包括:
a)消费消息推送事件获取群号OriginGroupCode。
b)通过群号OriginGroupCode获取(例如,从发送需要消费的待推送信息的群逻辑层获取)当前群成员最大版本号,记为Vmax1。
c)根据版本号排序,可以基于群号,分页拉取该群号对应的群组中所有版本号Version≤Vmax1的群成员的资料。
2.大群对应的定时更新方案(该方案可以用于实时通知故障时保证最终一致性)可以包括:
a)获取当前群成员最大版本号记为Vmaxn,可以根据群号OriginGroupCode从群逻辑层获取。
b)上一次全量拉取或定时更新获取的群成员最大版本号记为Vmaxn-1。
c)根据版本号排序,分页拉取所有版本号Vmaxn-1<Version<=Vmax1的群成员。
3.大群对应的实时通知方式可以包括:
a)群逻辑服务即群逻辑层在群成员进群后可以使用OriginGroupCode作为key发送到消息队列,此时发送到消息队列中的信息是用于通知推送服务器关于该群号OriginGroupCode对应群组中的成员变更信息,推送服务器根据该信息,可以知晓该群组中新增了哪些成员,从而可以及时更新推送服务器本地缓存的群成员资料,那么在需要推送该群组的群发消息时,就需要向新增人员也推送,退出成员就无需推送了。
b)群逻辑服务在群成员退群后使用OriginGroupCode作为key发送到消息队列,此时发送到消息队列中的信息则是用于通知推送服务器群组中哪些成员退出了,后续无需再向这些成员进行消息推送。
c)群推送服务消费群成员变更事件(包括成员新增事件或成员退群事件,也就是a)和b)发送到消息队列中的信息)更新本地群成员缓存。
对于特大群,群推送服务中大群本地群成员缓存更新方案也可以采用全量拉取、定期增量更新、或实时通知更新的方式。具体如下:
1.全量拉取:
a)消费消息推送事件获取群号GroupCode和推送分片号PushShardIndex。
b)获取当前群成员最大版本号记为Vmax1。
c)计算属于当前分片号的群成员号MemberId范围,计算公式如下:
lower limit(MemberId下限)=
NewGroupCode<<(shardShift+shardIndexBit)+((PushShardIndex*(2shardIndexBit/ShardNum))<<shardShift);
upper limit(MemberId上限)=
NewGroupCode<<(shardShift+shardIndexBit)+(((PushShardIndex+1)*(2shardIndexBit/ShardNum))<<shardShift);
其中,shardShift=64–NewGroupCodeBit–ShardIndexBit,shardIndexBit为shardIndex二进制位数即8位,NewGroupCodeBit为NewGroupCode二进制位数即28位。
d)根据版本号排序,分页拉取lower limit<MemberId<=upper limit且所有版本号Version≤Vmax1的群成员。
2.定时增量更新(用于实时通知故障时保证最终一致性):
a)获取当前群成员最大版本号记为Vmaxn。
b)上一次全量拉取或定时更新获取的群成员最大版本号Vmaxn-1。
c)根据版本号排序,分页拉取lower limit<MemberId<=upper limit之间且版本号Vmaxn-1<Version<=Vmax1的群成员。
3.实时通知:
a)群逻辑服务在群成员进退群后使用GroupCode和群成员所属的推送分片号PushShardIndex作为key发送到消息队列,此处PushShardIndex计算公式如下:
PushShardIndex=(MemberId>>NewUserIdBit)&(2shardIndexBit-1)
其中,NewUserIdBit为NewUserId二进制位数,即第三成员标识的二进制位数。
b)群逻辑服务在群成员进退群后使用GroupCode和群成员所属的推送分片号PushShardIndex作为key发送到消息队列。
c)群推送服务消费群成员变更事件更新本地群成员缓存。
对于小群、大群和特大群,在进行群发消息推送时,还需要对本地缓存的群成员的状态进行更新,以及时获取到最新的成员状态,判断对成员进行离线推送还是在线推送。可选的,小群成员数量较少,可以采用全量拉取成员状态的方案,对于大群和特大群,可以采用全量拉取、定时更新或根据通知实时更新的方案。
可选的,对于大群而言,推送服务所需的本地群成员状态的更新方案可以是以下任一方式:
1.全量拉取:获取全量群成员(成员基本资料)后调用状态服务获取群成员状态。
2.定时更新(用于实时通知故障时保证最终一致性):全量群成员调用状态服务获取群成员状态(实现上可以与全量拉取一样)。
3.实时通知:
a)群逻辑层在用户状态有变化时获取成员已加入群列表,遍历群使用群号GroupCode作为key发送到消息队列(即将群成员状态变更事件加入消息队列),用于通知推送服务器哪些成员的成员状态发生了变化,如哪些成员的状态由在线变为了离线,哪些成员的状态由离线变成了在线。
b)群推送服务消费群成员状态变更事件更新本地群成员状态缓存。
可选的,对于特大群而言,推送服务所需的本地群成员状态的更新方案可以是以下任一方式:
1.全量拉取:获取全量群成员后调用状态服务获取群成员状态。
2.定时更新(用于实时通知故障时保证最终一致性):全量群成员调用状态服务获取群成员状态。
3.实时通知:
a)群逻辑在用户状态有变化时获取用户已加入群列表,遍历群使用群号GroupCode和群成员所属的推送分片号PushShardIndex作为key发送到消息队列,用于通知推送服务器哪个或哪些分组中的成员的状态发生了变化。
b)群推送服务消费群成员状态变更事件更新本地群成员状态缓存。
本申请实施例提供的各种可选方案,可以有效解决由于群组成员数量的不断增长所导致的各种问题中的一个或多个,采用本申请实施例提供的方案,可以很好的满足大群、特大群(如百万级别的群组)的通信需求,可以解决特大群组的实现难点,解决百万群的消息收发、群成员存储、消息推送等各种核心问题,能够保障成员聊天的体验和小群一致。
基于与本申请提供的数据处理方法相同的原理,本申请实施例还提供了一种数据处理装置,该装置可以实现为任意电子设备,如服务器,如图9所示,该数据处理装置100可以包括请求接收模块110、目标节点确定模块120和请求转发模块130。
请求接收模块110,用于获取与目标群组有关的业务处理请求,业务处理请求中包括目标群组的第一群组标识;
目标节点确定模块120,用于根据第一群组标识,从多个第二服务节点中确定出业务处理请求对应的目标服务节点,其中,目标服务节点为多个第二服务节点中的部分节点,目标服务节点缓存有目标群组的群基础资料,除目标服务节点之外的第二服务节点不缓存目标群组的群基础资料;
请求转发模块130,用于将业务处理请求发送给目标服务节点,以使目标服务节点根据目标群组的相关资料对业务处理请求进行处理,相关资料包括目标群组的群基础资料。
可选的,业务处理请求包括与目标群组中的至少一个成员的成员资料相关的请求;目标群组中的各成员的成员资料是采用以下方式存储的:
获取目标群组中各成员的第二成员标识;
对于目标群组中的任一成员,根据该成员的第二成员标识,从多个第二存储节点中确定出该成员对应的第二目标节点,并将该成员的成员资料存储到第二目标节点中。
可选的,各成员的第二成员标识是通过以下方式获取到的:
确定目标群组的成员数量;
若成员数量大于或等于第一阈值,则生成目标群组中各成员的第二成员标识,记录并存储各个成员的旧标识和第二成员标识之间的映射关系,一个成员的旧标识包括该成员的第一成员标识和第一群组标识;
若成员数量小于第一阈值,目标群组中的各成员的成员资料是采用以下方式存储的:
根据第一群组标识,从多个第一存储节点中确定出目标群组对应的第一目标节点;
基于目标群组中各成员的第一成员标识,将目标群组中各成员的成员资料存储到第一目标节点。
可选的,对于目标群组中的任一成员,该成员的成员资料是通过以下方式获取到的:
确定目标群组的成员数量;
若成员数量小于第一阈值,则基于第一群组标识确定目标群组对应的第一目标节点,基于该成员的第一成员标识,从第一目标节点获得该成员的成员资料;
若成员数量大于或等于第一阈值,则根据该成员的旧标识和映射关系,确定该成员的第二成员标识,根据该成员的第二成员标识,确定该成员对应的第二目标节点,并从确定的第二目标节点中获得该成员的成员资料。
可选的,对于目标群组中的任一成员,该成员的第二成员标识是通过以下方式生成的:
确定目标群组的第二群组标识、以及该成员的第三成员标识;
根据该成员的第一成员标识和多个第二存储节点对应的分片的总数量,确定该成员对应的目标分片索引;
基于第二群组标识、该成员的目标分片索引和第三成员标识,生成该成员的第二成员标识。
可选的,不同群组的第二群组标识采用的是连续的数字编码,目标群组中各成员的第三成员标识采用的是连续的数字编码;
对于任一成员,该成员的第二成员标识是二进制编码标识,其中,按照由高位到低位的顺序,该成员对应的二进制编码标识包括:
目标群组的第二群组标识对应的第一设定位数的二进制表示、该成员的目标分片索引对应的第二设定位数的二进制表示、以及该成员的第三成员标识对应的第三设定位数的二进制表示。
可选的,业务处理请求包括目标消息的群发请求,目标消息是由目标服务节点通过以下方式发送的:
若成员数量小于第二阈值,则基于第一群组标识,获取目标群组中各成员的成员资料;对于每个成员,根据该成员的成员资料和目标消息,生成该成员对应的待推送信息,以由第一推送服务器基于该成员对应的待推送信息将目标消息推送给该成员;
若成员数量大于或等于第二阈值,且小于第一阈值,则生成目标群组对应的待推送信息,以由第二推送服务器根据该待推送信息中的第一群组指示信息,获取目标群组中所有成员的成员资料,并根据各成员的成员资料,将待推送信息中的目标消息推送给各成员;
若成员数量大于或等于第一阈值,则根据成员数量确定目标群组对应的分组数量,并生成相应数量的分组索引,其中,每个分组索引对应目标群组的部分成员、且不同分组索引对应的成员不同,每个分组索引对应至少一个分片;
对于每个分组索引,基于目标消息和该分组索引,生成该分组索引对应的待推送信息,以由第三待推送服务器根据该待推送信息中的第二群组指示信息,获得目标群组中该分组索引对应的各成员的成员资料,并根据各成员的成员资料,将该分组索引对应的待推送信息中的目标消息推送给各成员。
可选的,目标群组对应的各分组索引的值分别为0,1,2…,N-1,其中,N为分组数量,N-1为第N个分组索引,对于任一分组索引,该分组索引对应的各成员的成员资料是通过以下方式获得的:
通过以下表达式确定该分组索引对应的第二成员标识的标识下限和标识上限:
标识下限=
NewGroupCode<<(shardShift+shardIndexBit)+((PushShardIndex*(2shardIndexBit/
ShardNum))<<shardShift);
标识上限=
NewGroupCode<<(shardShift+shardIndexBit)+(((PushShardIndex+1)*
(2shardIndexBit/ShardNum))<<shardShift);
其中,NewGroupCode为第二群组标识的二进制表示,PushShardIndex表示分组索引的值,shardIndexBit为第二设定位数,shardShift为第三设定位数,ShardNum=N;
根据该分组索引对应的第二成员标识的标识下限和标识上限,获得第二成员标识位于标识下限和标识上限之内的各成员的成员资料,所获得的各成员的成员资料为该分组索引对应的各成员的成员资料。
可选的,业务处理请求包括目标消息的群发请求,其中,目标消息是由目标服务节点通过以下方式发送的:
确定目标群组的成员数量;
若成员数量小于第三阈值,则获取目标群组中各成员的成员资料,对于目标群组中的每个成员,根据该成员的成员资料,生成该成员对应的包含目标消息的待推送信息,以由第四推送服务器基于该待推送信息将目标消息推送给该成员;
若成员数量大于或等于第三阈值,则生成目标群组对应的待推送信息,以由第五推送服务器基于该待推送信息中的第三群组指示信息获取目标群组中各成员的成员资料,并根据各每个成员的成员资料,将该待推送信息中的目标消息推送给各个成员。
可选的,目标群组中各成员的成员资料是通过以下方式获取的:
若本地缓存中存在目标群组中各成员的成员资料,则从本地缓存中获取目标群组中各成员的成员资料;
若本地缓存中不存在目标群组中各成员的成员资料,则从存储目标群组的各成员的成员资料的目标存储节点中,获取目标群组中各成员的成员资料,并将获取的成员资料缓存在本地缓存中。
可选的,根据第一群组标识,从多个第二服务节点中确定出业务处理请求对应的目标服务节点,包括:
根据第一群组标识,通过与预配置的标识映射规则确定第一群组标识对应的第一映射标识;
获取多个第二服务节点中各个节点的第二映射标识,其中,每个第二服务节点的第二映射标识是根据该第二服务节点的节点标识,通过目标映射规则确定出的;
根据第一映射标识和各第二服务节点的第二映射标识的匹配程度,从多个第二服务节点中确定出目标服务节点。
本申请实施例的装置可执行本申请实施例所提供的方法,其实现原理相类似,本申请各实施例的装置中的各模块所执行的动作是与本申请各实施例的方法中的步骤相对应的,对于装置的各模块的详细功能描述具体可以参见前文中所示的对应方法中的描述,此处不再赘述。
本申请实施例还提供了一种数据处理系统,如图10所示,该数据处理系统200可以包括至少一个第一服务节点210、以及与至少一个第一服务节点通信连接的多个第二服务节点220,其中,对于任一群组,多个第二服务节点中的部分节点中缓存有该群组的群基础资料,每个第二服务节点与至少一个群组的第一群组标识关联;
第一服务节点210,用于接收与目标群组有关的业务处理请求,根据业务处理请求中包括的目标群组的第一群组标识,从多个第二服务节点中确定出业务处理请求对应的目标服务节点,将业务处理请求发送给目标服务节点;
第二服务节点220,用于接收第一服务节点发送的业务处理请求,并根据所缓存的业务处理请求对应的群组的相关资料对业务处理请求进行处理,群组的相关资料包括群组的群基础资料。
可选的,该系统还可以包括至少一个接入节点,第一服务节点210接收接入节点发送的业务处理请求。可选的,该系统还可以包括至少一个推送服务器,在业务处理请求是目标消息的群发请求时,第二服务节点220通过推送服务器将目标消息推送给目标群组中的各成员。
本申请实施例中还提供了一种电子设备,该电子设备包括至少一个处理器,该处理器被配置为执行本申请任一可选实施例提供的方法的步骤,可选的,该电子设备还可以包括与处理器耦接的收发器和/或存储器,存储器中存储有计算机程序,处理器在运行该计算机程序时可以实现本申请任一可选实施例提供的方案。可选的,该电子设备可以为用户终端或服务器。
图11示出了本发明实施例所适用的一种电子设备的结构示意图,如图11所示,该电子设备可以为服务器或者用户终端,该电子设备可以用于实施本发明任一实施例中提供的方法。
如图11中所示,该电子设备2000主要可以包括至少一个处理器2001(图11中示出了一个)、存储器2002、通信模块2003和输入/输出接口2004等组件,可选的,各组件之间可以通过总线2005实现连接通信。需要说明的是,图11中示出的该电子设备2000的结构只是示意性的,并不构成对本申请实施例提供的方法所适用的电子设备的限定。
其中,存储器2002可以用于存储操作系统和应用程序等,应用程序可以包括在被处理器2001调用时实现本发明实施例所示方法的计算机程序,还可以包括用于实现其他功能或服务的程序。存储器2002可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和计算机程序的其他类型的动态存储设备,也可以是EEPROM(ElectricallyErasable Programmable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(CompactDisc Read Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
处理器2001通过总线2005与存储器2002连接,通过调用存储器2002中所存储的应用程序实现相应的功能。其中,处理器2001可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application Specific Integrated Circuit,专用集成电路),FPGA(FieldProgrammable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合,其可以实现或执行结合本发明公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器2001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
电子设备2000可以通过通信模块2003(可以包括但不限于网络接口等组件)连接到网络,以通过网络与其它设备(如用户终端或服务器等)的通信,实现数据的交互,如向其他设备发送数据或从其他设备接收数据。其中,通信模块2003可以包括有线网络接口和/或无线网络接口等,即通信模块可以包括有线通信模块或无线通信模块中的至少一项。
电子设备2000可以通过输入/输出接口2004可以连接所需要的输入/输出设备,如键盘、显示设备等,电子设备200自身可以具有显示设备,还可以通过接口2004外接其他显示设备。可选的,通过该接口2004还可以连接存储装置,如硬盘等,以可以将电子设备2000中的数据存储到存储装置中,或者读取存储装置中的数据,还可以将存储装置中的数据存储到存储器2002中。可以理解的,输入/输出接口2004可以是有线接口,也可以是无线接口。根据实际应用场景的不同,与输入/输出接口2004连接的设备,可以是电子设备2000的组成部分,也可以是在需要时与电子设备2000连接的外接设备。
用于连接各组件的总线2005可以包括一通路,在上述组件之间传送信息。总线2005可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(Extended Industry Standard Architecture,扩展工业标准结构)总线等。根据功能的不同,总线2005可以分为地址总线、数据总线、控制总线等。
可选的,对于本发明实施例所提供的方案而言,存储器2002可以用于存储执行本发明方案的计算机程序,并由处理器2001来运行,处理器2001运行该计算机程序时实现本发明实施例提供的方法或装置的动作。
基于与本申请实施例提供的方法相同的原理,本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时可实现前述方法实施例的相应内容。
本申请实施例还提供了一种计算机程序产品,该产品包括计算机程序,该计算机程序被处理器执行时可实现前述方法实施例的相应内容。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”、“1”、“2”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除图示或文字描述以外的顺序实施。
应该理解的是,虽然本申请实施例的流程图中通过箭头指示各个操作步骤,但是这些步骤的实施顺序并不受限于箭头所指示的顺序。除非本文中有明确的说明,否则在本申请实施例的一些实施场景中,各流程图中的实施步骤可以按照需求以其他的顺序执行。此外,各流程图中的部分或全部步骤基于实际的实施场景,可以包括多个子步骤或者多个阶段。这些子步骤或者阶段中的部分或全部可以在同一时刻被执行,这些子步骤或者阶段中的每个子步骤或者阶段也可以分别在不同的时刻被执行。在执行时刻不同的场景下,这些子步骤或者阶段的执行顺序可以根据需求灵活配置,本申请实施例对此不限制。
以上所述仅是本申请部分实施场景的可选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请的方案技术构思的前提下,采用基于本申请技术思想的其他类似实施手段,同样属于本申请实施例的保护范畴。

Claims (15)

1.一种数据处理方法,其特征在于,所述方法由第一服务节点执行,所述方法包括:
获取与目标群组有关的业务处理请求,所述业务处理请求中包括所述目标群组的第一群组标识;
根据所述第一群组标识,从多个第二服务节点中确定出所述业务处理请求对应的目标服务节点,其中,所述目标服务节点为所述多个第二服务节点中的部分节点,所述目标服务节点缓存有所述目标群组的群基础资料,除所述目标服务节点之外的第二服务节点不缓存所述目标群组的群基础资料;
将所述业务处理请求发送给所述目标服务节点,以使所述目标服务节点根据所述目标群组的相关资料对所述业务处理请求进行处理,所述相关资料包括所述目标群组的群基础资料。
2.根据权利要求1所述的方法,其特征在于,所述业务处理请求包括与所述目标群组中的至少一个成员的成员资料相关的请求;所述目标群组中的各成员的成员资料是采用以下方式存储的:
获取所述目标群组中各成员的第二成员标识;
对于所述目标群组中的任一成员,根据该成员的第二成员标识,从多个第二存储节点中确定出该成员对应的第二目标节点,并将该成员的成员资料存储到所述第二目标节点中。
3.根据权利要求2所述的方法,其特征在于,所述获取所述目标群组中各成员的第二成员标识,包括:
确定所述目标群组的成员数量;
若所述成员数量大于或等于第一阈值,则生成所述目标群组中各成员的第二成员标识,记录并存储各个成员的旧标识和第二成员标识之间的映射关系,一个成员的旧标识包括该成员的第一成员标识和所述第一群组标识;
若所述成员数量小于所述第一阈值,所述目标群组中的各成员的成员资料是采用以下方式存储的:
根据所述第一群组标识,从多个第一存储节点中确定出所述目标群组对应的第一目标节点;
基于所述目标群组中各成员的第一成员标识,将所述目标群组中各成员的成员资料存储到所述第一目标节点。
4.根据权利要求3所述的方法,其特征在于,对于所述目标群组中的任一成员,该成员的成员资料是通过以下方式获取到的:
确定所述目标群组的成员数量;
若所述成员数量小于所述第一阈值,则基于所述第一群组标识确定所述目标群组对应的第一目标节点,基于该成员的第一成员标识,从所述第一目标节点获得该成员的成员资料;
若所述成员数量大于或等于所述第一阈值,则根据该成员的旧标识和所述映射关系,确定该成员的第二成员标识,根据该成员的第二成员标识,确定该成员对应的第二目标节点,并从确定的第二目标节点中获得该成员的成员资料。
5.根据权利要求3所述的方法,其特征在于,对于所述目标群组中的任一成员,该成员的第二成员标识是通过以下方式生成的:
确定所述目标群组的第二群组标识、以及该成员的第三成员标识;
根据该成员的第一成员标识和所述多个第二存储节点对应的分片的总数量,确定该成员对应的目标分片索引;
基于所述第二群组标识、该成员的目标分片索引和第三成员标识,生成该成员的第二成员标识。
6.根据权利要求5所述的方法,其特征在于,不同群组的第二群组标识采用的是连续的数字编码,所述目标群组中各成员的第三成员标识采用的是连续的数字编码;
对于任一成员,该成员的第二成员标识是二进制编码标识,其中,按照由高位到低位的顺序,该成员对应的二进制编码标识包括:
所述目标群组的第二群组标识对应的第一设定位数的二进制表示、该成员的目标分片索引对应的第二设定位数的二进制表示、以及该成员的第三成员标识对应的第三设定位数的二进制表示。
7.根据权利要求6所述的方法,其特征在于,所述业务处理请求包括目标消息的群发请求,所述目标消息是由所述目标服务节点通过以下方式发送的:
若所述成员数量小于第二阈值,则基于所述第一群组标识,获取所述目标群组中各成员的成员资料;对于每个成员,根据该成员的成员资料和所述目标消息,生成该成员对应的待推送信息,以由第一推送服务器基于该成员对应的待推送信息将所述目标消息推送给该成员;
若所述成员数量大于或等于第二阈值,且小于所述第一阈值,则生成所述目标群组对应的待推送信息,以由第二推送服务器根据该待推送信息中的第一群组指示信息,获取所述目标群组中所有成员的成员资料,并根据各成员的成员资料,将待推送信息中的目标消息推送给各成员;
若所述成员数量大于或等于所述第一阈值,则根据所述成员数量确定所述目标群组对应的分组数量,并生成相应数量的分组索引,其中,每个所述分组索引对应所述目标群组的部分成员、且不同分组索引对应的成员不同,每个所述分组索引对应至少一个分片;
对于每个所述分组索引,基于所述目标消息和该分组索引,生成该分组索引对应的待推送信息,以由第三待推送服务器根据该待推送信息中的第二群组指示信息,获得所述目标群组中该分组索引对应的各成员的成员资料,并根据各成员的成员资料,将该分组索引对应的待推送信息中的所述目标消息推送给各成员。
8.根据权利要求7所述的方法,其特征在于,所述目标群组对应的各所述分组索引的值分别为0,1,2…,N-1,其中,N为所述分组数量,N-1为第N个分组索引,对于任一分组索引,该分组索引对应的各成员的成员资料是通过以下方式获得的:
通过以下表达式确定该分组索引对应的第二成员标识的标识下限和标识上限:
标识下限=
NewGroupCode<<(shardShift+shardIndexBit)+((PushShardIndex*(2shardIndexBit/S
hardNum))<<shardShift);
标识上限=NewGroupCode<<(shardShift+shardIndexBit)+(((PushShardIndex+1)*(2shardIndexBit/ShardNum))<<shardShift);
其中,NewGroupCode为所述第二群组标识的二进制表示,PushShardIndex表示分组索引的值,shardIndexBit为所述第二设定位数,shardShift为所述第三设定位数,ShardNum=N;
根据该分组索引对应的第二成员标识的标识下限和标识上限,获得第二成员标识位于所述标识下限和标识上限之内的各成员的成员资料,所获得的各成员的成员资料为该分组索引对应的各成员的成员资料。
9.根据权利要求1所述的方法,其特征在于,所述业务处理请求包括目标消息的群发请求,其中,所述目标消息是由所述目标服务节点通过以下方式发送的:
确定所述目标群组的成员数量;
若所述成员数量小于第三阈值,则获取所述目标群组中各成员的成员资料,对于所述目标群组中的每个成员,根据该成员的成员资料,生成该成员对应的包含所述目标消息的待推送信息,以由第四推送服务器基于该待推送信息将所述目标消息推送给该成员;
若所述成员数量大于或等于所述第三阈值,则生成所述目标群组对应的待推送信息,以由第五推送服务器基于该待推送信息中的第三群组指示信息获取所述目标群组中各成员的成员资料,并根据各每个成员的成员资料,将待推送信息中的目标消息推送给各个成员。
10.根据权利要求1至9任一项所述的方法,其特征在于,所述目标群组中各成员的成员资料是通过以下方式获取的:
若本地缓存中存在所述目标群组中各成员的成员资料,则从所述本地缓存中获取所述目标群组中各成员的成员资料;
若所述本地缓存中不存在所述目标群组中各成员的成员资料,则从存储所述目标群组的各成员的成员资料的目标存储节点中,获取所述目标群组中各成员的成员资料,并将获取的成员资料缓存在所述本地缓存中。
11.根据权利要求1至9任一项所述的方法,其特征在于,所述根据所述第一群组标识,从所述多个第二服务节点中确定出所述业务处理请求对应的目标服务节点,包括:
根据所述第一群组标识,通过与预配置的标识映射规则确定所述第一群组标识对应的第一映射标识;
获取所述多个第二服务节点中各个节点的第二映射标识,其中,每个所述第二服务节点的第二映射标识是根据该第二服务节点的节点标识,通过所述目标映射规则确定出的;
根据所述第一映射标识和各所述第二服务节点的第二映射标识的匹配程度,从所述多个第二服务节点中确定出所述目标服务节点。
12.一种数据处理系统,其特征在于,所述系统包括至少一个服务节点、以及与所述至少一个第一服务节点通信连接的多个第二服务器节点,其中,对于任一群组,所述多个第二服务节点中的部分节点中缓存有该群组的群基础资料,每个所述第二服务节点与至少一个群组的第一群组标识关联;
所述第一服务节点,用于接收与目标群组有关的业务处理请求,根据所述业务处理请求中包括的所述目标群组的第一群组标识,从所述多个第二服务节点中确定出所述业务处理请求对应的目标服务节点,将所述业务处理请求发送给所述目标服务节点;
所述第二服务节点,用于接收所述第一服务节点发送的业务处理请求,并根据所缓存的所述业务处理请求对应的群组的相关资料对所述业务处理请求进行处理,所述群组的相关资料包括群组的群基础资料。
13.一种数据处理装置,其特征在于,所述装置设置于第一服务节点中,所述装置包括:
请求接收模块,用于获取与目标群组有关的业务处理请求,所述业务处理请求中包括所述目标群组的第一群组标识;
目标节点确定模块,用于根据所述第一群组标识,从多个第二服务节点中确定出所述业务处理请求对应的目标服务节点,其中,所述目标服务节点为所述多个第二服务节点中的部分节点,所述目标服务节点缓存有所述目标群组的群基础资料,除所述目标服务节点之外的第二服务节点不缓存所述目标群组的群基础资料;
请求转发模块,用于将所述业务处理请求发送给所述目标服务节点,以使所述目标服务节点根据所述目标群组的相关资料对所述业务处理请求进行处理,所述相关资料包括所述目标群组的群基础资料。
14.一种电子设备,其特征在于,所述电子设备包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器在运行所述计算机程序时执行权利要求1至11任一项所述的方法。
15.一种计算机可读存储介质,其特征在于,所述存储介质中存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1至11中任一项所述的方法。
CN202310233124.3A 2023-03-01 2023-03-01 数据处理方法、系统、装置、电子设备及存储介质 Pending CN116980241A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310233124.3A CN116980241A (zh) 2023-03-01 2023-03-01 数据处理方法、系统、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310233124.3A CN116980241A (zh) 2023-03-01 2023-03-01 数据处理方法、系统、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN116980241A true CN116980241A (zh) 2023-10-31

Family

ID=88482019

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310233124.3A Pending CN116980241A (zh) 2023-03-01 2023-03-01 数据处理方法、系统、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN116980241A (zh)

Similar Documents

Publication Publication Date Title
Goian et al. Popularity-based video caching techniques for cache-enabled networks: A survey
CN100383758C (zh) 高速缓存设备和高速缓存数据管理方法
RU2509428C2 (ru) Кластерный сервер системы мгновенного обмена сообщениями и способ обмена сообщениями между кластерами
US20160381640A1 (en) Managing contact status updates in a presence management system
US20150215405A1 (en) Methods of managing and storing distributed files based on information-centric network
CN105740337B (zh) 一种基于内容的发布订阅系统中的事件快速匹配方法
US8352604B2 (en) Distributed propagation of data in a wireless communication network
KR102391277B1 (ko) 통지를 위한 방법, 장치 및 시스템
CN101540775A (zh) 内容分发方法、装置与内容分发网络系统
CN104604189A (zh) 大型企业的高效状态发布机制
CN102769640B (zh) 用户信息的更新方法、服务器以及系统
CN111782692B (zh) 一种频率控制方法及装置
CN108540367B (zh) 一种消息处理方法及系统
CN111639356A (zh) 一种智慧城市数据共享系统及方法
CN111355986A (zh) 一种直播间中的消息处理方法、装置和存储介质
CN112351088A (zh) 一种cdn缓存方法、装置、计算机设备及存储介质
CN110311855B (zh) 用户消息处理方法、装置、电子设备及存储介质
CN108471385B (zh) 一种针对分布式系统的流量控制方法及装置
Zhao et al. Contact duration aware data replication in DTNs with licensed and unlicensed spectrum
Sourlas et al. Caching in content-based publish/subscribe systems
CN114595167A (zh) 分布式缓存系统、方法以及装置
WO2021073405A1 (zh) 数据分发方法、电子设备及存储介质
CN101567819A (zh) 一种消息上报方法与服务器
Gavidia et al. A probabilistic replication and storage scheme for large wireless networks of small devices
CN116980241A (zh) 数据处理方法、系统、装置、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication