CN112925662B - 标识生成方法和装置 - Google Patents

标识生成方法和装置 Download PDF

Info

Publication number
CN112925662B
CN112925662B CN202110317803.XA CN202110317803A CN112925662B CN 112925662 B CN112925662 B CN 112925662B CN 202110317803 A CN202110317803 A CN 202110317803A CN 112925662 B CN112925662 B CN 112925662B
Authority
CN
China
Prior art keywords
identifier
message
partition
server
request
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
Application number
CN202110317803.XA
Other languages
English (en)
Other versions
CN112925662A (zh
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.)
Alipay Hangzhou Information Technology Co Ltd
Original Assignee
Alipay Hangzhou Information Technology 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 Alipay Hangzhou Information Technology Co Ltd filed Critical Alipay Hangzhou Information Technology Co Ltd
Priority to CN202110317803.XA priority Critical patent/CN112925662B/zh
Publication of CN112925662A publication Critical patent/CN112925662A/zh
Application granted granted Critical
Publication of CN112925662B publication Critical patent/CN112925662B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/541Client-server
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/547Messaging middleware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/549Remote execution

Abstract

本说明书实施例提供了一种标识生成方法和装置。根据该实施例的方法,首先接收来自客户端的标识生成请求;然后利用所述标识生成请求生成第一消息;再将所述第一消息发送至分布式消息系统;然后从所述分布式消息系统中读取所述第一消息,利用所述第一消息在所述分布式消息系统中的分区信息和偏移量信息生成标识;再响应于所述标识生成请求,向所述客户端返回生成的所述标识。

Description

标识生成方法和装置
技术领域
本说明书一个或多个实施例涉及计算机技术领域,尤其涉及标识生成方法和装置。
背景技术
在诸如交易、支付、酒店、电影等相关的复杂业务系统中,往往需要一个唯一ID(Identity,标识)来标识一个对象。其中对象可以是实体、数据或消息等等,例如订单ID、商品ID、消息ID、风控事件ID。通过ID可以迅速定位到对象,为对象之间建立关联,跟踪对象在不同服务之间的流转等等。
业务系统对于ID的要求一般需要满足全局唯一和趋势递增的特性,因此需要提供一种满足上述特性要求的ID生成方式。
发明内容
本说明书一个或多个实施例描述了一种标识生成方法和装置,以便于生成全局唯一和趋势递增特性的标识。
根据第一方面,提供了一种标识生成方法,由服务器端执行,包括:
接收来自客户端的标识生成请求;
利用所述标识生成请求生成第一消息;
将所述第一消息发送至分布式消息系统;
从所述分布式消息系统中读取所述第一消息,利用所述第一消息在所述分布式消息系统中的分区信息和偏移量信息生成标识;
响应于所述标识生成请求,向所述客户端返回生成的所述标识。
在一个实施例中,所述分布式消息系统包括:Kafka消息系统。
在另一个实施例中,利用所述标识生成请求生成第一消息包括:
获取所述标识生成请求的请求标识,生成包含所述请求标识的第一消息。
在一个实施例中,所述获取所述标识生成请求的请求标识包括:
利用当前时间、随机数和所述标识生成请求携带的硬件标识生成通用唯一识别码UUID,将所述UUID作为所述标识生成请求的请求标识。
在另一个实施例中,所述服务器端为服务器集群;
将所述第一消息发送至分布式消息系统包括:
依据预设的服务器与所述分布式消息系统的分区之间的映射规则,确定接收到所述标识生成请求的服务器所映射的分区;
将所述第一消息发送至分布式消息系统中所述服务器所映射的分区。
在一个实施例中,所述确定接收到所述标识生成请求的服务器所映射的分区,包括如下中的任一项:
根据预先配置的所述服务器集群中每一个服务器与分布式消息系统中每一个分区之间的映射关系,确定接收到所述标识生成请求的服务器所映射的分区;
根据对分布式消息系统中各分区进行负载均衡的原则,确定接收到所述标识生成请求的服务器所映射的分区。
在另一个实施例中,该方法进一步包括:
将所述分布式消息系统中各分区的信息分别进行哈希处理,将得到的各分区的哈希值映射至哈希环上,得到各分区的映射点;
将各服务器的信息分别进行所述哈希处理,将得到的各服务器的哈希值映射至所述哈希环上,得到各服务器的映射点;
所述确定接收到所述标识生成请求的服务器所映射的分区,包括:
在所述哈希环上,沿预设方向查找与接收到所述标识生成请求的服务器的映射点距离最近的分区的映射点;
将查找到的所述距离最近的分区,确定为接收到所述标识生成请求的服务器所映射的分区。
在一个实施例中,在利用所述标识生成请求生成第一消息之后,还包括:在请求缓存池中创建所述请求标识和所述标识生成请求之间的第一对应关系;
在所述生成标识之后,还包括:在响应缓存池中存储生成的所述标识与所述请求标识之间的第二对应关系;
所述响应于所述标识生成请求,向所述客户端返回生成的所述标识包括:依据所述第二对应关系和所述第一对应关系,确定生成的所述标识对应的标识生成请求,向所述标识生成请求所来源的客户端返回生成的所述标识。
在另一个实施例中,利用所述第一消息在所述分布式消息系统中的分区信息和偏移量信息生成标识包括:
利用所述第一消息在所述分布式消息系统中的分区编号以及偏移量值与分区总数量的乘积,得到所述标识。
根据第二方面,提供了一种标识生成装置,设置于服务器端,包括:
接收模块,被配置为接收来自客户端的标识生成请求;
消息模块,被配置为利用所述标识生成请求生成第一消息;将所述第一消息发送至分布式消息系统;
生成模块,被配置为从所述分布式消息系统中读取所述第一消息,利用所述第一消息在所述分布式消息系统中的分区信息和偏移量信息生成标识;
响应模块,被配置为响应于所述标识生成请求,向所述客户端返回生成的所述标识。
在一个实施例中,所述分布式消息系统包括:Kafka消息系统。
在另一个实施例中,所述消息模块,具体被配置为获取所述标识生成请求的请求标识,生成包含所述请求标识的第一消息。
在一个实施例中,所述消息模块在获取所述标识生成请求的请求标识时,具体被配置为利用当前时间、随机数和所述标识生成请求携带的硬件标识生成通用唯一识别码UUID,将所述UUID作为所述标识生成请求的请求标识。
在另一个实施例中,所述服务器端为服务器集群;
所述消息模块,具体被配置为依据预设的所述服务器集群中服务器与所述分布式消息系统的分区之间的映射规则,确定接收到所述标识生成请求的服务器所映射的分区;将所述第一消息发送至分布式消息系统中所述服务器所映射的分区。
在一个实施例中,所述消息模块被配置为:根据预先配置的所述服务器集群中每一个服务器与分布式消息系统中每一个分区之间的映射关系,确定接收到所述标识生成请求的服务器所映射的分区;或者,根据对分布式消息系统中各分区进行负载均衡的原则,确定接收到所述标识生成请求的服务器所映射的分区。
在另一个实施例中,进一步包括:映射模块,
所述映射模块被配置为将所述分布式消息系统中各分区的信息分别进行哈希处理,将得到的各分区的哈希值映射至哈希环上,得到各分区的映射点;将各服务器的信息分别进行所述哈希处理,将得到的各服务器的哈希值映射至所述哈希环上,得到各服务器的映射点;
所述消息模块被配置为:在所述哈希环上,沿预设方向查找与接收到所述标识生成请求的服务器的映射点距离最近的分区的映射点;将查找到的所述距离最近的分区,确定为接收到所述标识生成请求的服务器所映射的分区。
在一个实施例中,所述消息模块,进一步被配置为在请求缓存池中创建所述请求标识和所述标识生成请求之间的第一对应关系;
所述生成模块,进一步被配置为在响应缓存池中存储生成的所述标识与所述请求标识之间的第二对应关系;
所述响应模块,具体被配置为依据所述第二对应关系和所述第一对应关系,确定生成的所述标识对应的标识生成请求,向所述标识生成请求所来源的客户端返回生成的所述标识。
在另一个实施例中,所述生成模块,具体被配置为利用所述第一消息在所述分布式消息系统中的分区编号以及偏移量值与分区总数量的乘积,得到所述标识。
根据第三方面,提供了一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面的方法。
根据本说明书实施例提供的方法和装置,基于分布式消息系统的分区中消息的有序特性,利用消息所在的分区信息和偏移量信息生成全局唯一且趋势递增的标识。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本公开所涉及的系统架构图;
图2示出了根据一个实施例的标识生成方法的流程图;
图3示出了根据一个实施例的Kafka消息系统的示意图;
图4示出了根据一个实施例的Kafka消息系统的各分区存储消息的实例图;
图5示出了根据一个实施例的测试装置的示意性框图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
在本公开之前已有的标识生成方式主要包括以下几种:
第一种:采用UUID(Universally Unique Identifier,通用唯一识别码)或GUID(Globally Unique Identifier,全局唯一标识符)。但这种方式获得的标识长度过长,存储冗余,且无序不可读,查询效率低下。
第二种:基于数据库生成的标识。这种方式存在数据库的单点性能瓶颈问题,即所有的标识生成都依赖于单点的服务器,从而导致性能瓶颈。
第三种:基于Twitter的Snowflake算法生成的标识。但这种方式对机器时钟有强依赖,如果机器时钟发生回拨,则会导致生成的标识重复而导致服务不可用。
本申请则提出了一种新的构思来生成标识,将诸如Kafka等分布式消息系统作为生成标识的核心组件,利用分布式消息系统的分区中消息的有序特性生成全局唯一且趋势递增的标识。
下面描述以上构思的具体实现方式。为了方便对本公开说明书的理解,首先对本公开所涉及的系统架构进行简单描述。
图1为本公开所涉及的系统架构图,如图1中所示,该系统主要包括:客户端、服务器端和分布式消息系统。
其中客户端运行于终端设备中,通过网络与服务器端进行交互。
服务器端可以是单一服务器,也可以是多个服务器构成的服务器集群。本公开所涉及的标识生成装置运行于服务器端。
分布式消息系统能够对接收到的消息进行分区存储并保证每个分区中的消息顺序传输,然后进行分布式消费。典型的分布式消息系统可以是诸如Kafka消息系统。在后续的实施例中均以Kafka消息系统为例进行描述。
在该系统架构中,当客户端在业务执行过程中需要获取某个新创建的对象的标识时,例如,当客户端在订单创建过程中需要获取订单标识,可以向服务器端发送标识生成请求,以从服务器端获取针对该对象生成的标识。
图2示出根据一个实施例的标识生成方法的流程图。可以理解,该方法在上述服务器端来执行。如图2所示,该方法包括:
步骤201,接收来自客户端的标识生成请求。
步骤203,利用标识生成请求生成第一消息。
步骤205,将第一消息发送至Kafka消息系统。
步骤207,从Kafka消息系统中读取第一消息,利用第一消息在分布式消息系统中的分区信息和偏移量信息生成标识。
步骤209,响应于标识生成请求,向客户端返回生成的标识。
下面描述图2所示的各个步骤的执行方式。
首先,结合实施例对步骤203即“利用标识生成请求生成第一消息”进行描述。
在本公开中可以获取标识生成请求的请求标识,生成包含该请求标识的第一消息。需要说明的是,本公开中“第一消息”中的“第一”仅仅是为了描述和引用方便对该消息进行的称呼,以与上述的标识生成请求进行区分,并不具备数量、顺序等方面的限定作用。
上述的请求标识只要满足唯一性即可,用以唯一标识该请求。作为其中一种可实现的方式,可以采用UUID作为请求标识。在生成UUID时,可以利用当前时间、随机数和标识生成请求携带的硬件标识生成。其中硬件标识可以是发送标识生成请求的设备的MAC地址、主机ID等。除了UUID之外,也可以采用其他诸如GUID等。
在利用标识生成请求生成第一消息后,阻塞请求处理线程。例如可以通过线程同步机制,使得处理该标识生成请求的线程进入休眠状态。
更进一步地,可以在请求缓存池中创建请求标识和标识生成请求之间的对应关系,在本公开实施例中将该对应关系称为“第一对应关系”。例如,可以将请求标识作为key(键),标识生成请求作为value(值)放入请求缓存池中。
下面,结合实施例对步骤205即“将第一消息发送至Kafka消息系统”进行描述。
若本公开中涉及的服务器端仅包含一个服务器,则将该第一消息直接发送至Kafka消息系统即可。
但作为一个优选的实施方式,为了能够提高请求的处理效率,提高系统性能以及增强系统的安全性。本公开中涉及的服务器端可以是由多个服务器构成的服务器集群。每个服务器集群都可以作为Kafka消息系统的消费方。
为了方便对本公开的理解,首先对Kafka消息系统的相关技术进行简单描述。
Kafka消息系统是最初由Linkedin公司开发的分布式、分区的、多副本的分布式消息系统。如图3中所示,Kafka消息系统的上游和下游分别对应生产方和消费方。其中,生产方是Kafka消息系统中的消息来源,即由生产方将消息发送给Kafka消息系统。消费方负责从Kafka消息系统中读取消息并进行后续处理。
Kafka消息系统是包含多个分区(Partition)的,在图3中以存在5个分区为例。每个分区中的消息都按照写入顺序存储,并且给该消息分配一个称为偏移量(Offset)的连续编号,以在分区中唯一标识该消息。其中,分区编号是从0开始的整数,偏移量是从1开始的整数。
每个分区映射至一个消费方,关系为多对一。也就是说,一个分区最多有一个消费方进行消费,但一个消费方可以读取并处理多个分区的消息。在图3中以存在3个消费方为例。由于在本公开中生产方和消费方需要位于同一服务器,即接收到客户端的标识生成请求的服务器需要将生成的标识返回给客户端。如图1中所示,生产方1与消费方1位于同一服务器,生产方2与消费方2位于同一服务器,生产方3与消费方3位于同一服务器。有鉴于此,在本公开中可以预先设置服务器集群中各服务器与Kafka消息系统中的分区之间的映射规则。其中一个分区仅能够映射至一个服务器,但一个服务器可以映射至多个分区。
上述映射规则的配置方式可以采用静态配置、动态配置或者一致性hash(哈希)算法等方式。
其中,静态配置指的是预先将映射规则配置于配置文件中,服务器在启动时从配置文件中读取并且不能够在服务器运行过程中改变。在此静态配置方式下,步骤205的实现过程可以包括:根据预先配置的所述服务器集群中每一个服务器与分布式消息系统中每一个分区之间的映射关系,确定接收到所述标识生成请求的服务器所映射的分区;将第一消息发送至分布式消息系统中接收到标识生成请求的服务器所映射到的分区。
动态配置指的是能够在服务器运行过程中,不重启的情况下进行映射规则的配置和更新。可以由用户通过服务器的管理界面进行映射规则的动态配置,也可以由其他服务器或其他终端设备将映射规则发送给服务器以实现对该服务器的映射规则的动态配置。在此动态配置方式下,步骤205的实现过程可以包括:根据对分布式消息系统中各分区进行负载均衡的原则,确定接收到所述标识生成请求的服务器所映射的分区;将第一消息发送至分布式消息系统中接收到标识生成请求的服务器所映射到的分区。
一致性hash算法,是将整个哈希值空间组织成一个虚拟的圆环即hash环。hash环上的点对应哈希函数的值的空间,即从0~232-1。在本公开中将Kafka消息系统中各分区(假设为4个)的信息进行哈希处理后映射至hash环上。例如分区的分区号分别进行哈希计算后,将各哈希计算的结果分别对232取模,就肯定得到4个0~232-1之间的整数。这4个整数必然可以映射到hash环上的某个点,称为分区的映射点。
在实现从服务器到分区的映射时,可以将各服务器的信息分别采用上述的哈希处理后,得到的哈希值映射至hash环上,得到各服务器的映射点。例如将服务器的节点值采用与上述分区相同的哈希函数进行哈希计算,计算得到的哈希值在hash环上映射后,确定从映射点沿预设方向比如顺时针方向的距离最近的分区的映射点,该分区的映射点所对应的分区就是该服务器映射的分区。在利用一致性hash算法的方式下,步骤205的实现过程可以包括:在哈希环上,沿预设方向查找与接收到所述标识生成请求的服务器的映射点距离最近的分区的映射点;将查找到的所述距离最近的分区,确定为接收到标识生成请求的服务器所映射的分区;将第一消息发送至分布式消息系统中接收到标识生成请求的服务器所映射到的分区。
上述一致性hash的映射规则实现方式,可以保证即便是Kafka的分区数出现变化或分区出现故障,也仅影响少量分区映射规则,而大多数的分区映射逻辑不变,使得业务受分区调整的影响降到最低。
在将第一消息发送至Kafka消息系统时,可以依据预设的服务器与分布式消息系统的分区之间的映射规则,确定本服务器(即接收到该标识生成请求的服务器)所映射的分区,然后将第一消息发送至Kafka消息系统中该服务器所映射的分区。相应地,服务器从Kafka消息系统中读取第一消息并进行消费时,也从所映射的分区中读取。在本公开中服务器对第一消息的消费就是后续步骤中生成标识并返回给客户端的处理。
下面,结合实施例对步骤207即“从Kafka消息系统中读取第一消息,利用第一消息在分布式消息系统中的分区信息和偏移量信息生成标识”进行描述。
上面已经提及,预先创建了服务器与Kafka消息系统中分区的映射关系,在本步骤中,服务器从其所映射的分区中读取第一消息,并解析消息记录。通常经过Kafka消息系统后,消息会被记录一些相关信息。在本公开中会在第一消息的相关字段中记录请求标识、分区信息以及偏移量。
作为一种可实现的方式,可以利用第一消息在Kafka消息系统中的分区编号以及偏移量值与分区总数量的乘积,来得到标识。例如可以采用如下公式生成标识resultID:
resultID=partitionId+offset*Np (1)
其中,partitionId表示分区编号,offset表示偏移量,Np表示Kafka消息系统中的分区总数量。
如图4中所示,假设Kafka消息系统中存在两个分区:分区0和分区1。图4中假设第一消息的编号分别为括号里的数字,各分区中消息的偏移量为分区中不带括号的数字。若读取第一消息(13)后,采用本申请中上述公式(1)生成的标识为:
resultID=0+7*2=14。
除了上述公式之外,可以基于上述生成标识的基本思路对该公式进行简单的变形、扩展等等都属于本公开的保护范围。
采用上述方式可以针对分区0中第一消息(1)、(2)、(5)、(7)、(9)、(10)、(13)、(14)生成标识分别为:
2、4、6、8、10、12、14、16。
可以针对分区1中第一消息(3)、(4)、(6)、(8)、(11)、(12)、(15)生成标识分别为:
3、5、7、9、11、13、15。
可以看出,上述生成的标识在所有分区中均唯一,体现出了全局唯一性。并且在单个分区内是趋势递增的。由于在服务器端接收标识生成请求的服务器本身具有负载均衡性,即针对各标识生成请求生成的第一消息会整体上均衡地分布于Kafka消息系统的各分区中,使得所生成的标识整体趋势呈现递增。
若想使得同一个客户端获取的标识是单调递增的,则可以配置路由规则,使得来自同一客户端的标识生成请求对应的第一消息被发送至分布式消息系统的同一分区。也就意味着,同一客户端的标识生成请求需要发送至同一服务器。其中,该路由规则可以在客户端配置,即配置本公开的服务器集群中特定的服务器为目的服务器,该客户端的标识生成请求均发送至配置的该服务器。该路由规则也可以在服务器集群的负载均衡层实现,即在进行负载均衡时,将同一客户端的标识生成请求发送至特定的服务器。
更进一步地,在生成标识之后,可以在响应缓存池中存储生成的标识与请求标识之间的对应关系,在此称为第二对应关系。例如可以将请求标识作为key,生成的标识作为value放入响应缓存池。
下面,结合实施例对步骤209即“响应于标识生成请求,向客户端返回生成的标识”进行描述。
本步骤中对响应缓存池进行监听,如果监听到标识,则利用上述第一对应关系和第二对应关系,确定该标识对应的标识生成请求,向该标识生成请求所来源的客户端返回生成的标识。
具体地,上述的第二对应关系是标识与请求标识之间的对应关系,因此依据第二对应关系可以确定生成的标识对应的请求标识。第一对应关系是请求标识和标识生成请求之间的对应关系,因此可以进一步依据第一对应关系确定请求标识对应的标识请求。
更进一步地,在上述对响应缓存池进行监听的过程中,如果在发送第一消息之后的设定时长内监听到利用第一消息生成的标识,则唤醒对应的请求处理线程,将生成的标识返回给标识生成请求所来源的客户端。
如果在发送第一消息之后的设定时长内未监听到利用第一消息生成的标识,则可以从请求缓存池中获取消息标识对应的标识请求消息,唤醒对应的请求处理线程,向标识请求消息所来源的客户端返回指示超时的消息。
本公开中上述的请求缓存池和响应缓存池对于客户端而言是没有感知的。对于客户端而言,整个过程和普通的RPC(Remote Procedure Call,远程过程调用)没有区别。也就是说,对于客户端而言就是从服务器端远程请求服务,不需要了解底层网络技术。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
根据另一方面的实施例,提供了一种标识生成装置。图5示出根据一个实施例的该测试装置的示意性框图。该装置设置于服务器端的各服务器。如图5所示,该装置500包括:
接收模块501,被配置为接收来自客户端的标识生成请求。
消息模块502,被配置为利用标识生成请求生成第一消息;将第一消息发送至分布式消息系统。
生成模块503,被配置为从分布式消息系统中读取第一消息,利用第一消息在分布式消息系统中的分区信息和偏移量信息生成标识。
响应模块504,被配置为响应于标识生成请求,向客户端返回生成的标识。
作为一种优选的实施方式,上述的分布式消息系统可以包括:Kafka消息系统。
作为一种可实现的方式,上述消息模块502可以具体被配置为获取标识生成请求的请求标识,生成包含请求标识的第一消息。
其中,消息模块502可以采用UUID作为请求标识。在生成UUID时,可以利用当前时间、随机数和标识生成请求携带的硬件标识生成。其中硬件标识可以是发送标识生成请求的设备的MAC地址、主机ID等。除了UUID之外,也可以采用其他诸如GUID等。
消息模块502在利用标识生成请求生成第一消息后,可以阻塞请求处理线程。例如可以通过线程同步机制,使得处理该标识生成请求的线程进入休眠状态。
其中,消息模块502,还可以用于预先采用静态配置、动态配置或一致性哈希的方式设置上述映射规则。
在一个实施例中,所述消息模块502被配置为:根据预先配置的所述服务器集群中每一个服务器与分布式消息系统中每一个分区之间的映射关系,确定接收到所述标识生成请求的服务器所映射的分区;或者,根据对分布式消息系统中各分区进行负载均衡的原则,确定接收到所述标识生成请求的服务器所映射的分区。
在另一个实施例中,进一步包括:映射模块,
所述映射模块被配置为将所述分布式消息系统中各分区的信息分别进行哈希处理,将得到的各分区的哈希值映射至哈希环上,得到各分区的映射点;将各服务器的信息分别进行所述哈希处理,将得到的各服务器的哈希值映射至所述哈希环上,得到各服务器的映射点;
所述消息模块502被配置为:在所述哈希环上,沿预设方向查找与接收到所述标识生成请求的服务器的映射点距离最近的分区的映射点;将查找到的所述距离最近的分区,确定为接收到所述标识生成请求的服务器所映射的分区。
但作为一个优选的实施方式,为了能够提高请求的处理效率,提高系统性能以及增强系统的安全性。本公开中涉及的服务器端可以是由多个服务器构成的服务器集群。消息模块502可以具体被配置为依据预设的服务器集群中服务器与分布式消息系统的分区之间的映射规则,确定接收到标识生成请求的服务器所映射的分区;将第一消息发送至分布式消息系统中服务器所映射的分区。
作为其中一种可选的实施方式是,消息模块502可以进一步被配置为在请求缓存池中创建请求标识和标识生成请求之间的第一对应关系。例如,可以将请求标识作为key,标识生成请求作为value放入请求缓存池中。
生成模块503可以进一步被配置为在响应缓存池中存储生成的标识与请求标识之间的第二对应关系。例如,可以将请求标识作为key,生成的标识作为value放入响应缓存池。
相应地,响应模块504具体被配置为依据第二对应关系和第一对应关系,确定生成的标识对应的标识生成请求,向标识生成请求所来源的客户端返回生成的标识。
其中,响应模块504可以对响应缓存池进行监听,如果在发送第一消息之后的设定时长内监听到利用第一消息生成的标识,则唤醒对应的请求处理线程,将生成的标识返回给标识生成请求所来源的客户端。如果在发送第一消息之后的设定时长内未监听到利用第一消息生成的标识,则可以从请求缓存池中获取消息标识对应的标识请求消息,唤醒对应的请求处理线程,向标识请求消息所来源的客户端返回指示超时的消息。
作为一种优选的实施方式,生成模块503可以具体被配置为利用第一消息在分布式消息系统中的分区编号以及偏移量值与分区总数量的乘积,得到标识。例如可以采用方法实施例中上述公式(1)生成标识resultID。
上述服务器集群和Kafka消息系统共同实现了分布式的RPC通信。
根据另一方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图2所描述的方法。
根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合图2所述的方法。
由以上实施例可以看出,本公开提供的方法、装置、计算机设备和计算机可读存储介质可以具备以下优点:
1)本公开基于分布式消息系统的分区中消息的有序特性,利用消息所在的分区信息和偏移量信息生成全局唯一且趋势递增的标识。
2)本公开中生成标识的方式完全不依赖机器时钟等信息,避免了因机器时钟回拨所产生的标识重复的问题。
3)本公开提供的方式中,若服务器端新增了服务器,则在服务器上线后,只需要新增服务器到分布式消息系统的分区之间的映射关系即可实现整体性能和容量的水平扩展,因此,具有高扩展性。
4)诸如Kafka消息系统等分布式消息系统引起具备多副本特性,使得消息的高可靠性保证了整个RPC链路的高可靠性。
5)由于不同的标识生成请求最终会落在分布式消息系统中不同的分区上,读写操作不会集中在某一台服务器或存储上,因此,不会产生单点瓶颈的问题,大大提高了系统性能。
6)对于客户端而言,仅需要向服务器端发送标识生成请求以及从服务器端获取生成的标识,与普通的RPC没有区别,因此接入成本低。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。

Claims (15)

1.标识生成方法,由服务器端执行,包括:
接收来自客户端的标识生成请求;
利用所述标识生成请求,生成第一消息;
将所述第一消息发送至分布式消息系统;
从所述分布式消息系统中读取所述第一消息,利用所述第一消息在所述分布式消息系统中的分区信息和偏移量信息生成标识;
响应于所述标识生成请求,向所述客户端返回生成的所述标识;
所述服务器端为服务器集群;
将所述第一消息发送至分布式消息系统包括:
确定接收到所述标识生成请求的服务器所映射的分区;
将所述第一消息发送至分布式消息系统中所述服务器所映射的分区;
该方法进一步包括:
将所述分布式消息系统中各分区的信息分别进行哈希处理,将得到的各分区的哈希值映射至哈希环上,得到各分区的映射点;
将各服务器的信息分别进行所述哈希处理,将得到的各服务器的哈希值映射至所述哈希环上,得到各服务器的映射点;
所述确定接收到所述标识生成请求的服务器所映射的分区,包括:
在所述哈希环上,沿预设方向查找与接收到所述标识生成请求的服务器的映射点距离最近的分区的映射点;
将查找到的所述距离最近的分区,确定为接收到所述标识生成请求的服务器所映射的分区。
2.根据权利要求1所述的方法,其中,所述分布式消息系统包括:Kafka消息系统。
3.根据权利要求1所述的方法,其中,利用所述标识生成请求生成第一消息,包括:
获取所述标识生成请求的请求标识,生成包含所述请求标识的第一消息。
4.根据权利要求3所述的方法,其中,所述获取所述标识生成请求的请求标识包括:
利用当前时间、随机数和所述标识生成请求携带的硬件标识生成通用唯一识别码UUID,将所述UUID作为所述标识生成请求的请求标识。
5.根据权利要求1所述的方法,其中,所述确定接收到所述标识生成请求的服务器所映射的分区,包括如下中的任一项:
根据预先配置的所述服务器集群中每一个服务器与分布式消息系统中每一个分区之间的映射关系,确定接收到所述标识生成请求的服务器所映射的分区;
根据对分布式消息系统中各分区进行负载均衡的原则,确定接收到所述标识生成请求的服务器所映射的分区。
6.根据权利要求3所述的方法,在利用所述标识生成请求生成第一消息之后,还包括:在请求缓存池中创建所述请求标识和所述标识生成请求之间的第一对应关系;
在所述生成标识之后,还包括:在响应缓存池中存储生成的所述标识与所述请求标识之间的第二对应关系;
所述响应于所述标识生成请求,向所述客户端返回生成的所述标识包括:依据所述第二对应关系和所述第一对应关系,确定生成的所述标识对应的标识生成请求,向所述标识生成请求所来源的客户端返回生成的所述标识。
7.根据权利要求1所述的方法,其中,利用所述第一消息在所述分布式消息系统中的分区信息和偏移量信息生成标识包括:
利用所述第一消息在所述分布式消息系统中的分区编号以及偏移量值与分区总数量的乘积,得到所述标识。
8.标识生成装置,设置于服务器端,包括:
接收模块,被配置为接收来自客户端的标识生成请求;
消息模块,被配置为利用所述标识生成请求生成第一消息;将所述第一消息发送至分布式消息系统;
生成模块,被配置为从所述分布式消息系统中读取所述第一消息,利用所述第一消息在所述分布式消息系统中的分区信息和偏移量信息生成标识;
响应模块,被配置为响应于所述标识生成请求,向所述客户端返回生成的所述标识;
所述服务器端为服务器集群;
所述消息模块,具体被配置为确定接收到所述标识生成请求的服务器所映射的分区;将所述第一消息发送至分布式消息系统中所述服务器所映射的分区;
进一步包括:映射模块,
所述映射模块被配置为将所述分布式消息系统中各分区的信息分别进行哈希处理,将得到的各分区的哈希值映射至哈希环上,得到各分区的映射点;将各服务器的信息分别进行所述哈希处理,将得到的各服务器的哈希值映射至所述哈希环上,得到各服务器的映射点;
所述消息模块被配置为:在所述哈希环上,沿预设方向查找与接收到所述标识生成请求的服务器的映射点距离最近的分区的映射点;将查找到的所述距离最近的分区,确定为接收到所述标识生成请求的服务器所映射的分区。
9.根据权利要求8所述的装置,其中,所述分布式消息系统包括:Kafka消息系统。
10.根据权利要求8所述的装置,其中,所述消息模块,具体被配置为获取所述标识生成请求的请求标识,生成包含所述请求标识的第一消息。
11.根据权利要求10所述的装置,其中,所述消息模块在获取所述标识生成请求的请求标识时,具体被配置为利用当前时间、随机数和所述标识生成请求携带的硬件标识生成通用唯一识别码UUID,将所述UUID作为所述标识生成请求的请求标识。
12.根据权利要求8所述的装置,其中,所述消息模块被配置为:根据预先配置的所述服务器集群中每一个服务器与分布式消息系统中每一个分区之间的映射关系,确定接收到所述标识生成请求的服务器所映射的分区;或者,根据对分布式消息系统中各分区进行负载均衡的原则,确定接收到所述标识生成请求的服务器所映射的分区。
13.根据权利要求10所述的装置,其中,所述消息模块,进一步被配置为在请求缓存池中创建所述请求标识和所述标识生成请求之间的第一对应关系;
所述生成模块,进一步被配置为在响应缓存池中存储生成的所述标识与所述请求标识之间的第二对应关系;
所述响应模块,具体被配置为依据所述第二对应关系和所述第一对应关系,确定生成的所述标识对应的标识生成请求,向所述标识生成请求所来源的客户端返回生成的所述标识。
14.根据权利要求8所述的装置,其中,所述生成模块,具体被配置为利用所述第一消息在所述分布式消息系统中的分区编号以及偏移量值与分区总数量的乘积,得到所述标识。
15.一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-7中任一项所述的方法。
CN202110317803.XA 2021-03-25 2021-03-25 标识生成方法和装置 Active CN112925662B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110317803.XA CN112925662B (zh) 2021-03-25 2021-03-25 标识生成方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110317803.XA CN112925662B (zh) 2021-03-25 2021-03-25 标识生成方法和装置

Publications (2)

Publication Number Publication Date
CN112925662A CN112925662A (zh) 2021-06-08
CN112925662B true CN112925662B (zh) 2024-02-27

Family

ID=76175953

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110317803.XA Active CN112925662B (zh) 2021-03-25 2021-03-25 标识生成方法和装置

Country Status (1)

Country Link
CN (1) CN112925662B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6697876B1 (en) * 1998-08-26 2004-02-24 Qnx Software Systems Ltd. Distributed kernel operating system
CN106407026A (zh) * 2016-09-19 2017-02-15 北京集奥聚合科技有限公司 一种在流式计算中消息id的生成方法
CN107193643A (zh) * 2017-03-28 2017-09-22 中国科学院信息工程研究所 一种高可靠分布式数据流实时统计方法及系统
CN108459939A (zh) * 2018-01-08 2018-08-28 平安科技(深圳)有限公司 一种日志收集方法、装置、终端设备及存储介质
CN111031135A (zh) * 2019-12-17 2020-04-17 金瓜子科技发展(北京)有限公司 消息传送方法、装置及电子设备
CN111126933A (zh) * 2019-11-11 2020-05-08 中盈优创资讯科技有限公司 Kafka生产和消费进度监控方法及装置
CN111580965A (zh) * 2020-04-30 2020-08-25 深圳壹账通智能科技有限公司 数据请求的处理方法及系统
CN112015561A (zh) * 2020-09-16 2020-12-01 支付宝(杭州)信息技术有限公司 用于流式计算服务的方法、装置和系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10459922B2 (en) * 2016-11-08 2019-10-29 At&T Intellectual Property I, L.P. Unique identification generation for records in a data streaming processing system

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6697876B1 (en) * 1998-08-26 2004-02-24 Qnx Software Systems Ltd. Distributed kernel operating system
CN106407026A (zh) * 2016-09-19 2017-02-15 北京集奥聚合科技有限公司 一种在流式计算中消息id的生成方法
CN107193643A (zh) * 2017-03-28 2017-09-22 中国科学院信息工程研究所 一种高可靠分布式数据流实时统计方法及系统
CN108459939A (zh) * 2018-01-08 2018-08-28 平安科技(深圳)有限公司 一种日志收集方法、装置、终端设备及存储介质
CN111126933A (zh) * 2019-11-11 2020-05-08 中盈优创资讯科技有限公司 Kafka生产和消费进度监控方法及装置
CN111031135A (zh) * 2019-12-17 2020-04-17 金瓜子科技发展(北京)有限公司 消息传送方法、装置及电子设备
CN111580965A (zh) * 2020-04-30 2020-08-25 深圳壹账通智能科技有限公司 数据请求的处理方法及系统
CN112015561A (zh) * 2020-09-16 2020-12-01 支付宝(杭州)信息技术有限公司 用于流式计算服务的方法、装置和系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
分布式追踪技术综述;杨勇;李影;吴中海;;软件学报;20200715(第07期);全文 *
基于标识符的Android客户端身份认证方案;王亚伟;彭长根;丁红发;周凯;;网络与信息安全学报;20170415(第04期);全文 *

Also Published As

Publication number Publication date
CN112925662A (zh) 2021-06-08

Similar Documents

Publication Publication Date Title
US9817703B1 (en) Distributed lock management using conditional updates to a distributed key value data store
US9317555B2 (en) Query method for a distributed database system and query apparatus
WO2020147331A1 (zh) 一种微服务监控方法及系统
CN111078147B (zh) 一种缓存数据的处理方法、装置、设备及存储介质
CN103458036B (zh) 一种集群文件系统的访问装置和方法
US8943082B2 (en) Self-assignment of node identifier in a cluster system
US9749445B2 (en) System and method for updating service information for across-domain messaging in a transactional middleware machine environment
US20090100289A1 (en) Method and System for Handling Failover in a Distributed Environment that Uses Session Affinity
US20100235509A1 (en) Method, Equipment and System for Resource Acquisition
WO2018233630A1 (zh) 故障发现
US9367261B2 (en) Computer system, data management method and data management program
US9069571B2 (en) Propagation of unique device names in a cluster system
JP2008519362A (ja) コンテンツアドレスマッピングを維持するためのコンテンツアドレス記憶デバイス
CN105162879B (zh) 实现多机房数据一致性的方法、装置及系统
US11163499B2 (en) Method, apparatus and system for controlling mounting of file system
US20120143829A1 (en) Notification of configuration updates in a cluster system
TWI716822B (zh) 事務因果序的校正方法及裝置、電子設備
WO2017118318A1 (zh) 一种数据存储与业务处理的方法及装置
US11784905B2 (en) Method and apparatus for ensuring continued device operational reliability in cloud-degraded mode
US20080307036A1 (en) Central service allocation system
WO2016101759A1 (zh) 一种数据路由方法、数据管理装置和分布式存储系统
CN112925662B (zh) 标识生成方法和装置
CN103023704A (zh) 虚拟网络服务设备接入方法及系统
GB2500348B (en) Validation of access to a shared data record subject to read and write access by multiple requesters
EP3349416B1 (en) Relationship chain processing method and system, and storage medium

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
GR01 Patent grant
GR01 Patent grant