CN108369608A - 幂等服务器群集 - Google Patents
幂等服务器群集 Download PDFInfo
- Publication number
- CN108369608A CN108369608A CN201780004786.6A CN201780004786A CN108369608A CN 108369608 A CN108369608 A CN 108369608A CN 201780004786 A CN201780004786 A CN 201780004786A CN 108369608 A CN108369608 A CN 108369608A
- Authority
- CN
- China
- Prior art keywords
- server
- request
- cluster
- response
- identifier
- 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.)
- Withdrawn
Links
- 230000004044 response Effects 0.000 claims abstract description 94
- 238000003860 storage Methods 0.000 claims abstract description 45
- 238000000034 method Methods 0.000 claims description 50
- 238000012545 processing Methods 0.000 claims description 38
- 238000004891 communication Methods 0.000 claims description 34
- 230000008569 process Effects 0.000 claims description 6
- 238000004590 computer program Methods 0.000 claims description 2
- 230000011664 signaling Effects 0.000 description 19
- 238000010586 diagram Methods 0.000 description 7
- 230000006399 behavior Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000000977 initiatory effect Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000003672 processing method Methods 0.000 description 3
- 230000003111 delayed effect Effects 0.000 description 2
- 235000013399 edible fruits Nutrition 0.000 description 2
- 230000003362 replicative effect Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004140 cleaning Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000011221 initial treatment Methods 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 210000003127 knee Anatomy 0.000 description 1
- 230000002045 lasting effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000005303 weighing Methods 0.000 description 1
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/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]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/1066—Session management
- H04L65/1069—Session establishment or de-establishment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24532—Query optimisation of parallel queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9017—Indexing; Data structures therefor; Storage structures using directory or table look-up
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/10—Architectures or entities
- H04L65/1046—Call controllers; Call servers
-
- 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/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
- H04L67/1004—Server selection for load balancing
Abstract
在服务器群集中,每个服务器被配置如下。在服务器处从请求实体接收请求。该请求包括请求的标识符。服务器确定请求标识符是否已经与群集数据库中的服务器中的任何一个关联。如果请求标识符已经与群集数据库的服务器中的一个不同服务器相关联,则会将其转发到不同服务器。如果请求标识符尚未与服务器中的任何一个关联,则将其与服务器关联。服务器生成对请求的响应,并存储在服务器可访问的本地存储装置中,并将其副本发送到请求实体。如果请求已与群集数据库中的服务器相关联,则服务器将定位已存储在本地存储装置中的对请求的任何响应。
Description
背景技术
可以在发起设备(即,呼叫设备)与至少一个响应设备(即被叫设备)之间建立通信事件。通信事件可以例如是呼叫(音频或视频呼叫)、屏幕或白板共享会话、其他实时通信事件等。通信事件可以在发起设备和多个响应设备之间,例如它可以是群呼叫。可以通过执行初始信令过程来建立通信事件,其中经由网络交换消息,以便提供通过其可以在建立的通信事件中的设备之间交换媒体数据(音频和/或视频数据)的单元。可以根据各种协议(例如,SIP(会话发起协议)或定制的信令协议)来执行信令阶段。通过信令阶段变得可能的媒体数据交换可以使用任何合适的技术来实现,例如使用通过IP的语音或视频(VoIP),并且可以或不可以经由与信令相同的网络。
通信事件可以在诸如呼叫控制器之类的通信控制器的控制下建立。也就是说,通信控制器可以至少控制信令过程。例如,发送到呼叫者和被呼叫者设备的信令过程的所有消息可以从通信控制器发送,并且在设备本身之间发送。例如,呼叫设备可以通过向通信控制器发送初始请求来发起信令过程,但是通信控制器可以具有接受或拒绝初始请求的自由。如果初始请求被接受,则通信控制器本身可以向呼叫设备发出呼叫邀请,并且响应设备继而可以响应通信控制器(而不是直接发起设备)。
通信控制器可以由包括多个协作服务器的服务器群集来实现。例如,多台服务器位于通用负载均衡器后面。其他类型的服务也可以由服务器群集提供。例如,群集可以在云计算环境中实现,其中群集中的多个服务器提供健壮性和容错能力。
发明内容
提供本“发明内容”是为了以简化的形式介绍将在以下具体实施方式中进一步描述的一些概念。本发明内容并非旨在识别所要求保护的主题的关键特征或基本特征,也并非旨在用于限制所要求保护的主题的范围。
本主题的各个方面涉及处理包括多个服务器的服务器群集内的复制请求。所述服务器可以访问群集数据库以将所述群集的个体服务器与请求标识符相关联。每个服务器被配置为实施以下步骤。在服务器处从请求实体(例如,群集外部的客户端或另一服务器)接收请求。该请求包括请求的标识符。通过应用以下操作来处理接收到的请求由服务器:服务器确定请求标识符是否已与群集数据库中的服务器中的任何一个相关联,并取决于确定进行如下操作:
·如果请求标识符已经与群集数据库的服务器中的一个不同服务器相关联,则将请求转发到不同服务器以在那里进行处理。
·如果请求标识符尚未与群集数据库中的服务器中的任何一个相关联,则将请求标识符与其中的服务器相关联。服务器生成对请求的响应,并且一旦生成,将响应与请求标识符关联地存储于服务器可访问的本地存储装置中,并将其副本发送到请求实体。
·如果请求已经与群集数据库中的服务器相关联,则使用请求标识符来定位对已经存储于服务器可访问的本地存储装置中的请求的任何响应,并且如果定位,则将其副本发送到请求实体。
附图说明
为了更好地理解本主题,并且示出可如何实现其实施例,通过示例参考以下附图,其中:
图1示出了通信系统的示意性框图,该通信系统包括服务器群集;
图2示出了被配置为实施多个虚拟服务器的物理服务器的示意性框图;
图3示出了由客户端生成的请求的示意性表示;
图4示意性地示出了服务器的分层架构;
图5示出了用于在服务器群集内实现的幂等请求处理方法的流程图;
图6A示出了用于当从服务器到客户端的响应丢失时重试的处理的信令图;
图6B示出了用于当来自服务器的响应被延迟时重试的处理的信令图;
图6C是用于服务器群集内的幂等请求代理的信令图;
图7是用于幂等通信事件建立过程的信令图。
具体实施方式
上一部分中提出的各方面允许服务器群集作为整体以展现“幂等”行为。幂等性的概念在本领域中是公知的,并且涉及复制请求(例如重试)不会导致结果的意外重复的范例。也就是说,使得在服务器(或者在这种情况下,服务器群集)接收到的多个复制请求的效果与单个请求相同。
如本领域中已知的,服务器群集内的服务器以这样的方式耦合,即,至少在某种程度上,当从外部查看时,它们作为单个系统来操作。耦合的紧密度可以取决于上下文而变化。例如,在云计算的上下文中,虚拟服务器(“服务器实例”)的群集可以运行彼此相同的代码,并且以基本上无状态的方式运行,即,使得服务器中的任一个同样配备以处理任何传入的请求。虽然在一些方面这是可取的,但在群集内严格执行无状态行为可能是低效的,例如,需要服务器状态的频繁的序列化和集中存储(因此,实际上,服务器中的任何一个都可以从另一台服务器停止处开始)。
特别地,严格地实施无状态行为达到在群集中的服务器中的任何一个配备为以幂等方式处理复制请求的程度,而不管其是否接收到原始请求,这可能是不切实际的。
这样,为了在不需要这种严格无状态行为的情况下提供幂等服务器群集,在“发明内容”部分中提出的本主题的各方面提供了一种机制,其确保在服务器群集处接收到的任何复制请求被转发到在其处接收到用于处理的原始请求的服务器中的任何一个,其可以基于在本地存储装置(例如本地存储器)中保存的数据,该群集中的其他服务器不能直接访问所述本地存储装置。
通常,服务器群集将具有至少一个外部可见的网络地址,例如由服务器位于其后方的负载均衡器提供。根据合适的负载平衡算法,例如,以循环的方式,基于服务器负载等,在负载均衡器处接收到的消息随后被转发到群集中可用的一个服务器。
本主题的一种替代方案是负载均衡器本身基于其中包含的请求ID尝试区分原始请求和复制请求。但是,这种方法存在几个问题。
首先,这种替代方案可能导致安全问题:在这种场景中,负载均衡器需要读取每个传入请求中的请求ID以确定将其发送到哪个服务器,这意味着如果MessageID被加密,则它们将需要由负载均衡器本身进行解密。例如,客户端可能希望经由安全连接(例如TLS/SSL)将其请求传送给服务器—但在这种场景中,该连接将不得不使用负载均衡器而不是在群集本身内终止,这可能对端到端安全性不利。其次,在实际上下文中,负载均衡器倾向于使用某种程度专门的专用硬件来实现。尽管在一些情况下,它们的操作是通过在此硬件上执行的软件来实现的,但此类硬件通常设计的主要目的是允许负载均衡器在尽可能最短的时间内将请求转发到可用服务器。这意味着,在许多情况下,这样的硬件不太适合以这种方式扩展负载均衡器的功能,而不显著增加负载均衡器执行其主要功能所花费的时间。
因此,本发明使用群集本身内的消息转发来通过群集作为整体提供幂等请求处理。这种方法不仅克服了前面段落中概述的问题,而且以足够灵活的方式进行,以准许群集内服务器的有状态行为达到任何期望的程度。关于后者,这尤其允许对请求的响应存储在生成它的服务器的本地存储装置中(例如,在本地存储器存储设备中),本地存储装置不需要群集中的其他服务器可以直接访问。
在实施例中,本公开的服务器群集可以被配置为作为呼叫(或其他通信事件)控制器来操作。在该上下文中,请求客户端在呼叫信令阶段向呼叫控制器发送一个或多个请求,以便在呼叫控制器的控制下在请求客户端与目标客户端之间建立通信事件。发明人尤其发现,尝试配置负载均衡器本身以处理复制请求可以导致呼叫建立时间的显著增加,即,在请求客户端的用户发起呼叫(或其他通信事件)以及媒体数据(音频和/或视频数据)开始在客户端之间流动的时间之间的时间。相比之下,本公开的方法可用于提供对呼叫建立时间影响最小的幂等通信(例如呼叫)控制器。
复制请求可能由于多种原因而发生。在客户端-服务器基础架构中,通常存在以下情况:
·请求(即,从客户端到服务器的消息)在网络中丢失,并且永远不会将其发送到服务器;
·请求处理在服务器上被延迟,导致客户端认为该请求在网络中丢失,而实际上它仍在生成;
·从服务器到客户端的响应在网络中丢失或延迟。
即使客户端依赖于如TCP的可靠传输协议,由于随时可能发生的传输中的可能中断(路由器崩溃等),这些问题也可能发生。
应用通常依赖于客户端侧重试来提高针对这种网络问题的复原性,但是当请求的处理在服务器上引起副作用时,这会产生挑战。
例如,在通过网络建立通信事件(例如呼叫)时,请求通信客户端(即,呼叫者)可以发起“开始呼叫”命令以便向服务器发送呼叫请求,该呼叫请求标识针对通信事件的目标通信客户端(即,被叫者)。响应于接收到该请求,服务器可将对呼叫者客户端的响应和呼叫邀请发送到所标识的被呼叫者客户端。如果原始请求将其发送到服务器,但响应未发送到客户端,则呼叫者客户端可以重试“开始呼叫”命令,如果处理不当,可能会导致无意中创建多个呼叫。
当客户与“服务器群集”交谈时,问题变得更加复杂。服务器群集是指协作以提供单个服务的多个互连的服务器。例如,服务器群集可以包括负载均衡器和位于负载均衡器之后的多个互连的服务器。增加的复杂性提高,这是因为重试可能落在与原始请求不同服务器上。
本文档通过提供用于处理从服务器群集内的客户端接收到的重试的机制来解决这个问题,使得重试即使当它们在每次尝试时着陆于群集中的不同服务器时也不会导致重复的(和错误的)处理/副作用。
图1示出了通信系统,其包括通信网络108以及连接到网络108的第一客户端设备104a、第二客户端设备104b和服务器群集110。在这个示例中,客户端设备104a、104b是用户设备,其每个由相应的用户102a、102b操作。例如,用户设备104a、104b可以是台式或膝上型计算机设备、智能电话、平板设备、智能电视、可穿戴计算设备或任何其他形式的用户设备。客户端设备104a、104b中的每个包括相应的客户端107a、107b正在其上运行的相应处理器106a、106b(例如,包括CPU或多个互连的CPU,如在多核处理器中)。客户端可以是用于与服务器群集中的服务器进行通信的任何合适的软件,并且可以例如是通信客户端(例如VoIP,即通过IP的语音客户端)、网络浏览器或任何其他合适类型的应用。
服务器群集110包括多个服务器(示出了第一服务器114a、第二服务器114b和第三服务器114c)、负载均衡器112,服务器114a、114b、114c中的每一个经由该负载均衡器112连接到网络108,以及群集数据库116。群集数据库116在群集110内部,并且在群集110中的每个服务器114a、114b、114c都有权访问它的意义上共享,使得通过服务器114a、114b、114b中的任何一个在共享数据库116中创建或修改的记录(即条目)对群集110中的所有服务器114a、114b、114c都是可见的。群集110中的每个服务器114a、114b、114c都具有服务器标识符(ID),其在群集110内是唯一的。虽然示出了三个服务器,但这是示例性的,并且群集10可以包括更多或更少的服务器。
共享数据库116例如可以在群集的共享存储装置中实现,例如使用REDIS、Memcache、Azure Table Store、SQL服务器等来实现。在使用服务器虚拟化的情况下(见下文),共享存储装置可以例如实现为群集内的单独虚拟机,即群集110内的附加服务器实例。
数据库116包括多个条目,每个条目包括键-值对。共享数据库116至少支持创建和取回(即获取)操作以用于分别创建和取回数据库的条目。创建操作将期望的键和期望的值作为输入包含在新条目中。取回操作将目标键作为其输入,并返回具有目标键的任何记录。创建操作支持开放式并发,使得如果已经存在具有目标键的条目时创建失败。
网络108是具有分层架构的基于分组的网络,例如互联网。分层架构包括传输层,该传输层被配置为提供在网络的主机(例如客户端设备104a、104b和服务器114a、114b、114c)与传输层上方的应用层之间的端到端连接,所述应用层在运行于这些主机上的不同进程之间提供进程间通信。在传输层下面的一个或多个较低层可以提供数据的较低层通信,例如,通过路由和交换的组合。分层架构可以例如符合TCP/IP协议套件。
如图2所示,服务器114a、114b、114c中的每一个都是虚拟服务器。
图2示出了物理处理器204,并且连接到处理器204的是网络接口202和本地存储器206(是存储器内存储的形式)。本地存储器206可由处理器204直接访问。处理器204、网络接口202和本地存储器206可以例如集成在物理服务器设备中。示出了在处理器204上运行的管理程序208。管理程序204是创建、运行和管理虚拟机(例如第一和第二虚拟服务器114a、114b)的计算机软件。相应操作系统210a、201b(例如Windows Server(TM))在每个虚拟服务器114a、114b上运行。相应应用代码212a、212b在每个操作系统210a、210b上运行。虚拟服务器可以经由网络接口202与诸如负载均衡器112之类的外部部件通信。
对于虚拟服务器114a、114b中的每一个,示出了在本地存储器206中实现的相应本地字典214a、214b。字典214a、214b在它们只能被相应服务器114a、114b直接访问的意义上是本地的。因为它们被实现在被运行虚拟服务器114a、114b的物理处理器204直接访问的存储器206中,所以虚拟服务器114a、114b可以快速访问它们。字典214a、214b中的每一个还分别支持至少创建和检索操作以用于创建和检索该字典中的条目。条目按期望值进行索引。如果具有目标索引的条目已经存在于该字典中,则针对目标索引的创建操作将失败。
虽然在该示例中,第一和第二虚拟服务器114a、114b在相同的物理处理器204上运行,但这纯粹是作为示例,并且它们可以同样在不同的物理处理器上运行。通常,服务器群集110的虚拟服务器可以以任何合适的方式分布在一个或多个物理处理器之间,例如,在数据中心内。在跨物理设备分布的情况下,可以在这些设备之间提供直接通信基础设施,以实现它们之间的快速通信。虚拟服务器在本文中等同地称为服务器实例。
图3示出了由客户端107a生成的请求消息302的格式。请求302具有包含请求302的唯一ID的请求ID字段302以及至少一个内容字段306。对于通过HTTP进行的请求,请求ID字段302可以是标准HTTP头部,而内容字段306可以是标准的HTTP有效载荷。对于其他协议,请求ID可以以应用以客户端和每个服务器理解的方式选择任意方式携带于有效载荷中。请求302标识客户端107a,例如它可以包括客户端的网络地址,例如,传输地址,即用户设备106a的IP地址以及与可用于客户端107a的IP地址相关联的关联端口。
请求ID是全局唯一的标识符并且在重试之间保持相同。也就是说,如果客户端107a故意生成其先前发送的请求的副本,因为它尚未收到响应,则副本包含相同的请求ID。也就是说,请求及其任何副本都有匹配的请求ID。
图4示出了群集110内的服务器的架构的高度示意示出。第一和第二服务器114a、114b以示例的方式示出,并且每个被配置为实现相应的传输层302a、308a和在相应的传输层302a之上相应的应用层308b、308b。应用层包括相应的幂等性层304a、304b和幂等性层304a、304b之上的相应的业务逻辑层306a、306b。术语“操作层”和“业务逻辑层”在本文中可互换使用。服务器可以以常规网络架构的方式实现附加层,例如较低的网络层和链路层(未示出)。
在第一服务器114a的传输层302a处接收从客户端107a到第一服务器114的请求302,并且请求302传递到幂等性层304a以进行初始处理。如下面详细描述的,取决于情况,幂等性层304a可以将请求302向上传递到业务逻辑层306a,将其传递到群集110中的不同服务器(例如第二服务器114b)的幂等性层,或本身完全处理请求302。
图5示出了在服务器群集110内实现的幂等请求处理方法的流程图。该方法是计算机实现的方法,其中服务器114a、114b、114c中的每一个的幂等性层被配置为实现。对于在该服务器处接收到的每个请求,该方法的步骤由群集110中的每个服务器114a、114b、114c独立实现。纯粹出于说明的目的,以下示例考虑第一服务器114a的幂等性层504a的实现,但是该描述同样适用于群集110中的其他服务器的幂等性层。
图6A、图6B和图6C是示出了该方法如何在不同情况下进展的示例的选择的信令图并且结合图5进行描述。在这些图上使用类似的附图标记来表示在图5的方法步骤和图6A-图6C的信令流之间的对应性。在图6A-图6C中,原始请求被表示为402O,而复制请求被标记为402R。当在负载均衡器112处从客户端107接收到原始请求402O时,根据其实现的负载均衡机制,按照负载均衡器112选择的,可以由负载均衡器112将其转发到群集110中的任意一个服务器。该服务器成为该请求的“所有者”,因为它处理对请求的处理并最终处理在群集110处接收到的请求的任何复制的处理。它被称为处理服务器以用于其请求ID,注意因为原始请求及其任何复制都具有匹配的请求ID,所以这会自动使服务器成为原始请求及其所有复制的所有者。在接收到原始请求402O时,该服务器通过将其自己的服务器ID与共享数据库116中的请求ID相关联,而将其自身作为针对其请求ID的处理服务器注册到共享数据库116中。在该上下文中,原始请求402O意味着在接收到时一个请求ID尚未与共享数据库116中群集中的服务器中的任何一个相关联。具有匹配的请求ID的请求4020的任何复制402D也可以由负载均衡器112转发到根据负载平衡机制选择的群集110中的任一服务器。复制请求402D可以例如是由客户端发起的重试,因为无论出于何种原因,其未接收到对其原始请求的任何响应,例如,因为响应在传输中丢失和/或由于服务器侧处理延迟。负载均衡器110不会尝试区分复制请求与原始请求,特别是它不会尝试取决于原始请求被转发的位置而将复制请求转发到服务器。相反,共享数据库116用于跟踪哪些服务器正在处理哪些请求,并且使用群集110内的代理来确保任何复制请求402D被转发到处理或正在处理原始请求4020的同一服务器。
经由负载均衡器112在第一服务器的传输层302a处接收请求402,其源自客户端107。请求402从传输层302a传递到第一服务器114a的幂等性层304a,其中它在步骤S502处被接收。在步骤S504-S508处,幂等性层304a确定请求402的消息头部中的请求ID是否已经与共享数据库116中的服务器中的任何一个相关联,即,确定请求是否是复制请求402D,并且如果是,则处理服务器的身份为其请求ID(“messageID”)。如果确定尚不存在用于MessageID的处理服务器,由此确定该请求是原始请求402O,或者如果处理服务器碰巧是第一服务器114,即如果请求402是碰巧落在与对应的原始请求相同的服务器上的复制请求402D,则在步骤S509-S520中完全由第一服务器114a处理对该请求的处理。否则,即,如果请求是复制请求402D并且第一服务器114a不是用于MessageID的处理服务器,则在步骤S522第一服务器114a将请求转发到处理服务器(在下面的示例中的第二服务器114b),如下所述。
下面给出由幂等性层304a实现步骤S504-S520的更多细节。然而,正如将会意识到的,存在可以实现在前面段落中所述的操作的其他方式,这在本公开的范围内。
步骤S502处在从传输层302a接收到请求402时,第一服务器114a的幂等性层304a尝试在共享存储装置116中创建条目,所述条目将MessageID作为其键并且将第一服务器的服务器ID(“instanceID1”)作为其值(S504)。这种尝试是在没有检查数据库116中是否存在这样的条目的情况下进行的。如果创建成功(S506),则这意味着这是用该键创建记录的第一次尝试,这继而意味着MessageID在共享数据库116中尚未与群集110中的服务器中的任何一个相关联,即该请求是原始请求402O。一旦创建,该条目向群集110中的所有服务器将服务器114a识别为用于MessageID的处理服务器。在那种情况下,该方法进行到步骤S509。
如果在步骤S504中在数据库116中创建新条目失败,则共享数据库110返回指示具有MessageID键的条目已经存在的错误。这表示MessageID已经与群集110中的一个服务器相关联,这继而意味着请求402是先前在群集110内接收到的原始请求的复制402D。在那种情况下,在步骤S508处,现有的条目被读取并且该方法取决于与MessageID相关联的服务器是否是第一服务器114a本身而分支;如果是,即,如果MessageID已经与instanceID1相关联,则这表示复制请求402碰巧落在用于该请求的处理服务器上。在那种情况下,该方法也前进到步骤S509,并且以在步骤S506创建成功的相同方式继续。另一方面,如果不同服务器(例如第二服务器114b)在数据库116中注册为用于MessageID的处理服务器,则该方法不同地进行到S522,如稍后描述的。
幂等性层304a通过以下操作来实现步骤S509-S520。这些操作以线程安全的方式执行,这可以使用已知的服务器侧处理方法来实现。
注意,为了简单起见,对应于步骤S502-508的信令流未在图6A或6B中示出,而仅在图6C中示出。此外,为了简单起见,图6C省略了服务器中的内部信令(这在图6A和6B中示出)。
在步骤S509处,幂等性层403a生成令牌(“等待令牌”),并尝试将其插入到在第一服务器114a的本地存储器中实现的本地字典214a中,并与MessageID相关联。具体地,它尝试在字典214a中创建由MessageID索引的新条目。无论请求402是原始的还是副本402O、402D,都进行该尝试,即步骤S509对于这方面的请求类型是不可知的。
如果该尝试成功(S510),则这意味着字典214a中不存在这样的先前条目,这继而意味着请求402是原始请求402O。如果已经成功创建包括等待令牌的条目,则幂等性层304将请求402传递到业务逻辑层306a以进行处理(S518)。等待令牌最初是空的(即,未填充的),并且在这个未填充的形式中用作该请求当前正由业务逻辑层306a处理的指示符。
只有原始请求402O被传递到业务逻辑层306a,完全由较低幂等性层304a处理复制请求。业务逻辑层306a生成对请求402O的响应(图6A-6C中的408),并且一旦生成,就将其向下传递到幂等性层304a,其中,所述响应在步骤S520处由幂等性层304a接收。幂等性层304a通过将接收到的响应存储在先前未填充的等待令牌中,将接收到的响应与MessageID相关联地存储在其本地字典214a中(S520)。也就是说,幂等性层304a用响应408填充等待令牌。响应408的副本也向下传递到传输层302a(S516),并且从那里发送到请求客户端107。
图6A示出了示例性信令流程,其顶部示出了当原始请求402O被接收并传递到业务逻辑层306a时在客户端107a和服务器114a内之间的信令,其对应于步骤S509、S510、S518、S520和S516的序列,即图5的流程图的中间分支。
返回到步骤S510,另一方面,如果步骤S509在本地字典214a中创建新条目的尝试失败,则这意味着其中对于MessageID已经存在等待令牌,这继而意味着响应408仍然由业务逻辑层306a生成,或者已经被生成并发送到客户端107a。失败的尝试允许幂等性层定位与MessageID相关联的已经存在于字典214a中的现有等待令牌。如果现有等待令牌已经填充有响应408(S512),则方法进行步骤S516,在此在现有等待令牌中保存的响应的副本向下传递到传输层302a以与上述相同的方式传输到请求客户端107。图6A的下半部分示出了示例。在该示例中,由于对原始402O的响应408在传输到客户端107a时丢失,所以发送了复制请求402D。在等待令牌已经被响应408填充之后,该示例中的复制响应402恰好也落在第一服务器114a上,触发了步骤S510、S512至S516的序列。
另一方面,如果现有等待令牌未被填充,则幂等性层304a可以安全地忽略该请求(S514),因为在本地字典214a中没有响应可用的事实还意味着业务逻辑层306a仍处于生成响应的过程中,并且在适当时将其发送到请求客户端107(即,在步骤S516处,针对原始请求402O)。替代地,幂等性层304a可以等待响应408被生成,并且一旦被生成,响应于复制将响应的另一副本发送到客户端(即,使得一旦被生成就发送响应的两个副本,一个响应于原始,一个响应于复制),这也是完全安全的,但是它可能并不总是必要的。在图6B中示出了示例,其中由客户端发送复制响应402D,因为没有收到对其原始请求4020的回复,例如,由于服务器侧进行延迟。在这个示例中,为了简单起见,也假定复制402D落在与原始请求402O相同的服务器114a上,触发步骤S509、S510、S512至S514的序列。
在从创建等待令牌起的足够的持续时间之后,从服务器字典114a中移除等待令牌以释放存储器。时间间隔被选择为使得比客户端侧超时持续时间长。
返回到步骤S508,注意,如果MessageID与现有记录中的服务器的不同的一个服务器相关联,例如其服务器ID是instanceID2的第二服务器114b,这意味着接收到的请求402是复制的原始请求在不同服务器114b处接收到,该不同服务器114b在现有记录的值中识别出(例如,通过instanceID2)。在那种情况下,第一服务器114a的幂等性层304a将请求402转发(S522)到不同服务器114b,即,转发到条目中识别出的处理服务器114b。转发的请求的副本具有相同的messageId。
一旦接收到转发的消息,处理服务器114b上的幂等性层将确保所转发的请求不引起任何副作用,并且通过独立地实施相同的方法来以针对原始尝试进行高速缓存的相同响应进行响应。
请求402被代理到第一服务器114a到第二服务器114b,即已经将请求转发到第二服务器114b,在步骤S524处第一服务器114a的幂等性层304a从第二服务器114b接收对请求402的响应,第二服务器114b转发到请求客户端107a。
这在图6C中示出,其示出了在第一服务器114a处接收和处理原始请求402O,并且在第二服务器114b处接收到复制响应402D,而第一服务器114a对原始响应402O的处理仍然是正在进行中。第二服务器114a将复制响应402D转发到第一服务器,该第一服务器在响应408一旦生成时就将其返回。第二服务器将返回的响应408发送到客户端107a。替代地或另外,第一服务器还可以响应于原始请求402O向客户端107a发送响应408的副本,但是这没有明确示出。也就是说,如果在第一服务器14a仍在处理原始402O的同时在第二服务器上接收到复制请求402D,则一旦生成响应408,一个服务器或者这两个服务器就可以将响应的副本发送到客户端107a。
由于客户端仅直接与第一服务器114a通信,所以该代理对于客户端107不可见。这意味着客户端只需要以端到端的方式与单台服务器进行通信,这在端对端安全性方面可能是有益的,并且也减轻了放置于客户端的负担。
关于该代理方面,注意,如果在步骤S504处,在第一服务器处从群集中的另一服务器(与直接经由负载均衡器112从客户端107不同)接收到请求302,则将在步骤S516或S520发送的响应的副本发送到另一服务器,从另一服务器将其发送到客户端107。也就是说,在处理服务器从另一服务器而不是直接从请求客户端107a接收请求时,该另一服务器代替图5的方法中的客户端107a,并且从处理服务器的角度来看该另一服务器是请求实体。
在创建条目之后的持续时间清理(即,删除)共享存储116中的每个条目,所述持续时间足够大于客户端侧超时以避免任何竞争状况。
为了说明的目的,在上文中,描述了其中在群集110的第一服务器114a处接收到原始请求402O的示例。然后考虑两个其他示例。在这些示例中的第一示例中,在第一服务器114a处接收原始请求402O的复制(使得不需要代理)。在这些示例中的第二示例中,复制请求402D在服务器114b的第二服务器114b处被接收,并被转发到第一服务器114a。这是示例性的,并且通常如上所述,负载均衡器可以将原始请求转发到群集110中的服务器上的任何可用的服务器,其中请求实体可以是客户端或另一服务器。
可以在负载均衡器110处接收任何数量的复制请求,其中的每一个都可以被转发到群集110中的任何一个服务器,这可能碰巧是或者不是处理原始请求的服务器。通过配置群集110中的每个服务器来实现图5的方法,群集作为整体能够处理任何这样的可能性,确保任何复制请求最终被转发到正在处理或已处理原始请求的相同服务器。该方法由服务器独立实施,其中每个服务器独立于群集110中的其他服务器执行该方法的每个步骤。然而,这些独立执行的步骤的结果相互依赖,因为它们取决于范围以及共享数据库116被填充的方式。因此,当描述图5时,关于第一服务器114a或第二服务器114b的任何描述在接收到任何原始或复制请求时同样适用于群集110中的任何其他服务器。
注意,当来自客户端的重试可能落在不同群集上(而不仅仅是相同群集中的不同服务器)时,可以扩展上述方法以实现幂等性。复制请求可能会落在不同的群集上,例如,DNS在不同时间响应于特定的URI而返回不同群集的网络地址。发生这种情况的原因可能有很多,例如,如果检测到客户端已经移动(DNS一般会尝试返回地理上最近群集的网络地址),或者如果群集过载(一些DNS可以考虑这个)。
如果一个群集内的服务器不能直接从另一个群集寻址,则可以使用两步代理过程。第一级确保复制请求到达正确的群集,即与接收到原始请求相同的群集。第二级以上述方式在该群集内执行,以确保复制请求到达正确群集内的正确服务器。正确的群集将响应返回到接收到复制请求的群集中的服务器,继而该服务器将该请求转发到请求客户端。也就是说,代理在不同群集之间发生,而不仅仅是一个群集内的单个服务器。
为了实现第一级群集,可以使用多个群集中的每一个群集可访问的全局数据库来将请求ID与单独群集相关联。当群集中的给定服务器接收到请求时,它首先检查其请求ID是否与全局数据库的群集的中不同的一个群集相关联,即是否与该群集的群集ID关联。如果是,则服务器将其转发到识别出的群集的负载均衡器,从中以上述方式处理该群集。
在该上下文中,请求实体可以是客户端、同一群集中的另一服务器或者完全不同的群集。请求可以以与上述内部代理等效的方式在不同的群集之间进行代理。
图7示出了特定的使用情况,其中服务器群集110被配置为作为诸如呼叫控制器之类的通信控制器进行操作。在这个示例中,客户端107a、107b是通信客户端,用于经由网络108实现诸如呼叫(例如VoIP呼叫)的通信事件。
响应于第一用户102a(“Alice”)在她的用户设备106a处发起呼叫建立指令(由用户设备106a处的用户输入702表示),第一客户端107a向呼叫控制器110发送原始呼叫请求302O。该呼叫请求包含先前未使用的请求ID,并且还标识第二用户102b(“Bob”)和/或他的设备104b和/或在他的设备107b上运行的第二客户端。例如,请求302O可以包含Bob的用户名或其他用户ID,或者与他的设备104b和/或客户端107b相关联的网络或设备标识符。
请求302O在呼叫控制器110的负载均衡器112处被接收,并且从那里被转发到群集中的服务器中的一个可用服务器(在图7中未明确示出)。在该服务器上,它被向上传递到幂等性层,并从那里传递到业务逻辑层(因为它是原始请求)。业务逻辑层处理该请求,并且假设请求302O被授权,生成待发送到Alice的客户端107b的响应308和待发送到Bob的客户端107b的呼叫邀请310。在该示例中,邀请310被Bob的客户端107b成功接收,使其向Bob输出传入的呼叫通知704(例如,可听振铃)。然而,响应308在传送到Alice的客户端107a时丢失。在预期的时间间隔内没有任何响应导致Alice的客户端107b重试请求303O,即向呼叫控制器110发送具有相同请求ID的请求302O的复制302D。根据上述方法处理该复制请求302D,导致响应308的另一副本由与处理原始请求302O相同的服务器发送到Alice的客户端107a。在执行该方法时,服务器意识到请求302D是复制的,并因此不将呼叫邀请310的任何复制发送到Bob的客户端107b。
注意,本文中的术语“数据库”不限于上述具体示例。通常,对多个实体可访问的数据库的引用仅意味着如下任何适当的数据集合,所述数据的集合被存储使得如果由其中一个实体进行修改或添加,则添加的修改对其他一个或多个实体可见。这包括例如分布式数据库,例如由群集中的服务器本身实现的分布式数据库,而不是单独的中央存储装置(如上述实施例中那样)。例如,群集110内的共享数据库116的替代实现可以是分布式实现,通过该分布式实现,每个服务器维持其负责的任何请求ID的本地“主”记录,并将对该本地记录的任何更新传递给群集中的其他服务器(一种分布式数据库复制的形式)。
通常,可以使用软件、固件、硬件(例如,固定逻辑电路)或这些实现的组合来实现本文所描述的任何功能。本文使用的术语“模块”、“功能”、“部件”和“逻辑”一般代表软件、固件、硬件或其组合。在软件实现的情况下,模块、功能或逻辑表示当在处理器(例如,CPU或CPU)上执行时执行指定任务的程序代码。程序代码可以存储在一个或多个计算机可读存储设备中。下面描述的技术的特征是独立于平台的,这意味着这些技术可以在具有各种处理器的各种商业计算平台上实现。
例如,用户设备还可以包括使得用户设备的硬件执行操作的实体(例如软件),例如处理器功能块等。例如,用户设备可以包括计算机可读介质,该介质可以被配置为维护指令,使得用户设备,更具体地用户设备的操作系统和关联硬件执行操作。因此,这些指令用于配置操作系统和关联的硬件以执行操作,并且以这种方式导致操作系统和关联硬件的转换以执行功能。指令可以由计算机可读介质通过各种不同的配置提供给用户设备。
计算机可读介质的一种这样的配置是信号承载介质,并且因此被配置为例如经由网络将指令(例如作为载波)发送到计算设备。计算机可读介质还可以被配置为计算机可读存储介质,并且因此不是信号承载介质。计算机可读存储介质的示例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器以及其他存储器设备,其可以使用磁性、光学和其他技术来存储指令和其他数据。
本主题的第一方面涉及一种处理服务器群集内的复制请求的方法,其中,所述服务器访问群集数据库以用于将所述群集的个体服务器与请求标识符相关联,所述方法包括由所述服务器中的每一个实施以下步骤:在所述服务器处从请求实体接收请求,其中所述请求包括所述请求的标识符;以及处理接收到的请求,通过服务器应用以下操作:确定请求标识符是否已经与群集数据库中的服务器中的任何一个相关联,如果请求标识符已经与群集数据库中的服务器中的一个不同服务器相关联,则将请求转发到不同服务器以用于在所述不同服务器处进行处理,如果请求标识符尚未与群集数据库中的服务器中的任何一个相关联:将请求标识符与其中的服务器相关联,生成对请求的响应,并且所述响应一旦生成,与请求标识符关联地将响应存储于服务器可访问的本地存储装置中,并将其副本发送到请求实体,以及如果请求已经与群集数据库中的服务器相关联,则使用请求标识符来定位已经存储于服务器可访问的本地存储装置中的对请求的任何响应,并且如果被定位,则将响应的副本发送到请求实体。
在实施例中,请求实体可以是所述群集外部的实体(例如客户端或外部服务器)或群集中的另一服务器。
所述请求可以标识目标客户端;其中如果所述请求标识符尚未与所述群集数据库中的服务器中的任何一个相关联,则所述服务器还基于所述请求将消息发送到所述目标客户端;以及其中如果所述请求已经与所述群集数据库中的服务器相关联,则所述服务器将所述响应的副本发送到请求客户端,但不基于所述请求将任何消息发送到目标客户端。
例如,所述消息可以是通信事件邀请,其使得通信事件在与请求相关联的用户与目标客户端的用户之间建立。例如,通信事件是用户之间的呼叫。
如果所述请求标识符已经与所述群集数据库中的服务器中的一个不同服务器相关联,则在所述服务器处从所述不同服务器接收对所述请求的响应时,所述服务器将响应转发到请求实体。
所述群集中的每个服务器连接到公共负载均衡器,并且所述请求可以经由所述负载均衡器被接收。
如果所述请求标识符尚未与所述群集数据库中的服务器中的任何一个相关联:
·如果在服务器接收到请求之后但在其生成并存储了响应之前在服务器处接收请求的复制,则服务器忽略复制请求和/或等待响应被生成;以及
·如果在响应已经存储在本地存储装置中之后在服务器处接收到请求的复制,则服务器可以使用复制请求中的请求标识符来定位存储的响应,并将其另一副本发送到请求实体。
例如,如果所述请求标识符尚未与群集数据库中的任一服务器相关联,则在接收到请求时,服务器可以在本地存储装置中与所述请求标识符相关联的生成请求的指示符,并且然后一旦生成响应就与请求标识符相关联地将其存储在本地存储装置中;其中如果在所述指示符已经存储之后但在所述响应已经存储在本地存储装置之前接收到所述请求的复制,则服务器可以使用复制请求中的请求标识符来定位指示符,其中在该事件中所述服务器可以忽略复制响应和/或等待响应被生成;其中如果在所述响应已被存储在所述本地存储装置中之后接收到所述请求的复制,则所述服务器可以使用所述复制请求中的请求标识符来定位本地存储装置中的存储的响应,并且将其另一副本发送到请求实体。
例如,指示符可以是最初未被填充的令牌,其中可以通过用响应填充令牌而将响应与请求标识符相关联地存储在本地存储装置中。
如果请求尚未与群集数据库中的服务器中的一个不同服务器相关联,则服务器可以尝试在本地存储装置中与消息标识符相关联地生成请求的指示符,而不管任何指示符是否已经与本地存储装置中的请求标识符相关联,其中如果现有指示符已经与本地存储装置中的请求标识符相关联,则尝试失败,由此定位现有指示符。
消息可以在服务器的传输层被接收并且被传递到传输层上方的服务器的应用层,其中请求处理操作可以在服务器的应用层被实现。
通过其生成响应的生成操作在所述应用层的操作层处实现,其中在操作层下的应用层的幂等性层处可以执行剩余的请求处理操作,由此如果请求标识符在请求被接收到时尚未与群集数据库中的服务器中的任何一个相关联,那么稍后仅从幂等性层将响应传递到操作层。
在接收到所述请求时,所述服务器尝试将其自身与所述群集数据库中的请求标识符相关联,而不管所述服务器中的任何一个是否已经与所述群集数据库中的请求标识符相关联,其中如果服务器中的任何一个已经与群集数据库中的请求标识符相关联,则尝试失败,由此识别所述服务器。
本主题的第二方面涉及一种跨多个服务器的群集处理复制请求的方法,其中,每个群集都访问全局数据库,以用于将各个群集与请求标识符相关联,其中每个群集中的服务器访问群集数据库以用于将群集的各个服务器与请求标识符相关联,其中所述方法包括通过每个群集中的每个服务器实施以下步骤:在所述服务器处从请求实体接收请求,其中所述请求包括所述请求的标识符;以及确定所述请求标识符是否已经与全局数据库中的任何群集相关联;如果所述请求已经与群集中的不同的一个群集相关联,则将所述请求转发到所述不同的群集以所述不同的群集处进行处理;如果所述请求尚未与所述全局数据库中的任何群集相关联,则将所述群集与其中的请求标识符相关联,并且通过应用第一方面的请求处理操作来处理所述请求;以及如果所述请求已经与全局数据库中的群集相关联,则通过应用第一方面的请求处理操作来处理所述请求。
在实施例中,请求实体是客户端、群集中的另一服务器或另一个群集中的服务器。
根据本主题的第三方面,一种系统包括:服务器的群集;以及群集数据库,服务器访问所述群集数据库,以用于将群集的各个服务器与请求标识符相关联;其中所述群集中的每个服务器被配置为实施以下步骤:在所述服务器处从请求实体接收请求,其中所述请求包括所述请求的标识符;以及通过服务器应用以下操作来处理接收到的请求:确定请求标识符是否已经与群集数据库中的服务器中的任何一个相关联,如果请求标识符已经与群集数据库中的服务器中的一个不同服务器相关联,则将请求转发到所述不同服务器以在所述不同服务器处进行处理,如果请求标识符尚未与群集数据库中的服务器中的任何一个相关联:将请求标识符与其中的服务器相关联,生成对请求的响应,并且一旦生成,与请求标识符关联地将响应存储于服务器可访问的本地存储装置中,并将其副本发送到请求实体,以及如果请求已经与群集数据库中的服务器相关联,则使用请求标识符来定位已经存储于服务器可访问的本地存储装置中的对请求的任何响应,并且如果被定位,则将响应的副本发送到请求实体。
在实施例中,服务器可以是由系统的一个或多个处理单元的集合实现的虚拟服务器。
根据本主题的第三方面,一种计算机程序产品,包括代码,所述代码存储在计算机可读存储介质上,并且被配置为当在服务器群集中的每个服务器上执行时使所述服务器实现以下步骤:在所述服务器处从请求实体接收请求,其中所述请求包括所述请求的标识符;以及通过服务器应用以下操作来处理接收到的请求:确定请求标识符是否已经与群集数据库中的服务器中的任何一个相关联,所述群集数据库用于将群集的各个服务器与请求标识符相关联,如果请求标识符已经与群集数据库中的服务器中的一个不同服务器相关联,则将请求转发到不同服务器以用于在所述不同服务器处进行处理,如果请求标识符尚未与群集数据库中的服务器中的任何一个相关联:将请求标识符与其中的服务器相关联,生成对请求的响应,并且一旦生成,与请求标识符关联地将响应存储于服务器可访问的本地存储装置中,并将响应的副本发送到请求实体,以及如果请求已经与群集数据库中的服务器相关联,则使用请求标识符来定位已经存储于服务器可访问的本地存储装置中的对请求的任何响应,并且如果被定位,则将响应的副本发送到请求实体。
虽然已经用结构特征和/或方法动作特有的语言描述了主题,但是应该理解,所附权利要求中限定的主题不一定限于上述特定特征或动作。相反,上述具体特征和动作是作为实施权利要求的示例形式公开的。
Claims (15)
1.一种处理服务器的群集内的复制请求的方法,其中,所述服务器对群集数据库进行访问以将所述群集的个体服务器与请求标识符相关联,所述方法包括由所述服务器中的每一个实施以下步骤:
在所述服务器处从请求实体接收请求,其中,所述请求包括所述请求的标识符;以及
由所述服务器应用以下操作来处理接收到的请求:
确定请求标识符是否已经与所述群集数据库中的服务器中的任何一个相关联,
如果所述请求标识符已经与所述群集数据库的服务器中的一个不同服务器相关联,则将所述请求转发到所述不同服务器以在所述不同服务器处进行处理,
如果所述请求标识符尚未与所述群集数据库中的服务器中的任何一个相关联:则将所述请求标识符与其中的服务器相关联,生成对所述请求的响应,并且所述响应一旦被生成,则与所述请求标识符关联地将所述响应存储于所述服务器可访问的本地存储装置中,并且将所述响应的副本发送到所述请求实体,以及
如果所述请求已经与所述群集数据库中的该服务器相关联,则使用所述请求标识符来定位对已经存储于该服务器可访问的本地存储装置中的对所述请求的任何响应,并且如果对所述请求的所述任何响应被定位,则将对所述请求的所述任何响应的副本发送到所述请求实体。
2.根据权利要求1所述的方法,其中,所述请求实体是所述群集外部的实体(例如,客户端)或所述群集中的另一服务器。
3.根据权利要求1或2所述的方法,其中,所述请求标识目标客户端;
其中,如果所述请求标识符尚未与所述群集数据库中的服务器中的任何一个相关联,则所述服务器还基于所述请求将消息发送到所述目标客户端;以及
其中,如果所述请求已经与所述群集数据库中的服务器相关联,则所述服务器将所述响应的副本发送到请求客户端,但不基于所述请求将任何消息发送到所述目标客户端。
4.根据权利要求3所述的方法,其中,所述消息是通信事件邀请,其使得通信事件在与所述请求相关联的用户与所述目标客户端的用户之间被建立。
5.根据权利要求1、2、3或4所述的方法,如果所述请求标识符已经与所述群集数据库中的服务器中的一个不同服务器相关联,则在所述服务器处接收到来自所述不同服务器的对所述请求的响应时,所述服务器将所述响应转发到所述请求实体。
6.根据前述权利要求中任一项所述的方法,其中,所述群集中的每个服务器连接到公共负载均衡器,并且所述请求是经由所述负载均衡器被接收的。
7.根据前述权利要求中任一项所述的方法,其中,如果所述请求标识符尚未与所述群集数据库中的服务器中的任何一个相关联:
如果在所述服务器接收到请求之后但在生成并且存储所述响应之前所述请求的复制在所述服务器处被接收到,则所述服务器忽略复制请求和/或等待所述响应被生成;以及
如果在所述响应已经被存储在本地存储装置中之后所述请求的复制在所述服务器处被接收到,则所述服务器使用所述复制请求中的请求标识符来定位存储的响应,并将所述响应的另一副本发送到所述请求实体。
8.根据前述权利要求中任一项所述的方法,其中,如果所述请求尚未与所述群集数据库中的服务器中的一个不同服务器相关联,则所述服务器尝试在本地存储装置中与所述消息标识符相关联地生成所述请求的指示符,而不管任何指示符是否已经与本地存储装置中的请求标识符相关联,其中,如果现有指示符已经与所述本地存储装置中的所述请求标识符相关联,则尝试失败,由此定位所述现有指示符。
9.一种系统,包括:
服务器的群集;以及
群集数据库,所述服务器访问所述群集数据库,以用于将所述群集的各个服务器与请求标识符相关联;
其中,所述群集中的每个服务器被配置为实施前述或以下权利要求中的任一项所述的方法。
10.根据权利要求9所述的系统,其中,所述服务器是由所述系统的一个或多个处理单元的集合实现的虚拟服务器。
11.根据前述权利要求中任一项所述的方法,其中,所述消息是在所述服务器的传输层处被接收并且被传递到所述传输层上方的所述服务器的应用层,其中,请求处理操作是在所述服务器的应用层处实施的。
12.根据权利要求11所述的方法,其中,通过其来生成响应的生成操作是在所述应用层的操作层处实施的,其中,剩余的请求处理操作是在所述操作层下的所述应用层的幂等性层处执行的,由此如果当所述请求被接收到时所述请求标识符尚未与所述群集数据库中的服务器中的任何一个相关联,则响应稍后仅从所述幂等性层被传递到所述操作层。
13.根据前述权利要求中任一项所述的方法,其中,在接收到所述请求时,所述服务器尝试将其自身与所述群集数据库中的所述请求标识符相关联,而不管所述服务器中的任何一个是否已经与所述群集数据库中的所述请求标识符相关联,其中,如果所述服务器中的任何一个已经与所述群集数据库中的所述请求标识符相关联,则尝试失败,由此识别该服务器。
14.一种跨多个服务器群集来处理复制请求的方法,其中,所述群集中的每个都访问全局数据库,以用于将各个群集与请求标识符相关联,其中,每个群集中的服务器访问群集数据库以用于将所述群集的各个服务器与请求标识符相关联,其中,所述方法包括通过所述群集中每个群集中的每个服务器实施以下步骤:
在所述服务器处从请求实体接收请求,其中,所述请求包括所述请求的标识符;以及
确定所述请求标识符是否已经与所述全局数据库中的任何群集相关联;
如果所述请求已经与所述群集中的一个不同群集相关联,则将所述请求转发到所述不同群集以在所述不同群集处进行处理;
如果所述请求尚未与所述全局数据库中的群集中的任何一个相关联,则将所述群集与其中的请求标识符相关联,并且通过应用前述权利要求的任一项所述的请求处理操作来处理所述请求;以及
如果所述请求已经与所述全局数据库中的群集相关联,则通过应用前述权利要求中任一项所述的请求处理操作来处理所述请求。
15.一种包括代码的计算机程序产品,所述代码被存储在计算机可读存储介质上并且被配置为当在服务器群集中的每个服务器上执行时,使得所述服务器实现前述权利要求中任一项所述的方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/016,668 US20170230457A1 (en) | 2016-02-05 | 2016-02-05 | Idempotent Server Cluster |
US15/016,668 | 2016-02-05 | ||
PCT/US2017/015699 WO2017136298A1 (en) | 2016-02-05 | 2017-01-31 | Idempotent server cluster |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108369608A true CN108369608A (zh) | 2018-08-03 |
Family
ID=58054514
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780004786.6A Withdrawn CN108369608A (zh) | 2016-02-05 | 2017-01-31 | 幂等服务器群集 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20170230457A1 (zh) |
EP (1) | EP3374886A1 (zh) |
CN (1) | CN108369608A (zh) |
WO (1) | WO2017136298A1 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108200196B (zh) * | 2018-01-31 | 2020-12-04 | 杭州优工品科技有限公司 | 基于分布式架构的数据储存、查询方法及系统 |
CN108762962A (zh) * | 2018-05-18 | 2018-11-06 | 网易宝有限公司 | 防止应用异常的方法和装置、存储介质及电子设备 |
CA3101843A1 (en) * | 2018-05-31 | 2019-12-05 | Mobophiles, Inc., Dba Mobolize | Systems and methods for dynamic channel bonding |
US11418621B2 (en) | 2018-09-21 | 2022-08-16 | Microsoft Technology Licensing, Llc | Cloud-based composable data layer |
US10839037B2 (en) | 2018-09-21 | 2020-11-17 | Microsoft Technology Licensing, Llc | Connected application experience |
CN111641692B (zh) * | 2020-05-20 | 2022-09-30 | 北京字节跳动网络技术有限公司 | 会话数据处理方法、装置及电子设备 |
CN113688158A (zh) * | 2021-09-07 | 2021-11-23 | 京东科技控股股份有限公司 | 业务规则校验的处理方法、装置、设备、系统及介质 |
CN117439993B (zh) * | 2023-12-22 | 2024-04-16 | 中电云计算技术有限公司 | Redis集群负载均衡方法、装置、设备及存储介质 |
Family Cites Families (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB0119146D0 (en) * | 2001-08-06 | 2001-09-26 | Nokia Corp | Controlling processing networks |
US6862277B2 (en) * | 2002-10-28 | 2005-03-01 | Motorola, Inc. | Method and apparatus for multi-media communication over multiple networks |
US20040249948A1 (en) * | 2003-03-07 | 2004-12-09 | Sethi Bhupinder S. | Performing application layer transactions during the connection establishment phase of connection-oriented protocols |
US7457806B2 (en) * | 2003-12-18 | 2008-11-25 | International Business Machines Corporation | Accessing a non-relational store with a container-managed persistence bean via a web service function |
US7509332B1 (en) * | 2005-12-16 | 2009-03-24 | Tevaclata Us, Inc. | Customized indexes for user defined data types |
US8621154B1 (en) * | 2008-04-18 | 2013-12-31 | Netapp, Inc. | Flow based reply cache |
US7933962B1 (en) * | 2008-05-29 | 2011-04-26 | Google Inc. | Reducing reliance on a central data store while maintaining idempotency in a multi-client, multi-server environment |
US8117156B2 (en) * | 2008-10-26 | 2012-02-14 | Microsoft Corporation | Replication for common availability substrate |
US8171227B1 (en) * | 2009-03-11 | 2012-05-01 | Netapp, Inc. | System and method for managing a flow based reply cache |
US8352658B2 (en) * | 2010-05-27 | 2013-01-08 | Microsoft Corporation | Fabric based lock manager service |
EP2442518A1 (fr) * | 2010-10-18 | 2012-04-18 | Alcatel Lucent | Procédé de traitement de requêtes SIP initiales par des backends d'un groupe SIP en présence d'une défaillance, et dispositif de traitement associé |
US8473783B2 (en) * | 2010-11-09 | 2013-06-25 | International Business Machines Corporation | Fault tolerance in distributed systems |
US8612190B2 (en) * | 2010-12-28 | 2013-12-17 | Sap Ag | Derived simulations for planning systems |
EP2509279B1 (en) * | 2011-04-05 | 2017-06-07 | BlackBerry Limited | Method and network component for applying authentication and security policies in a SIP environment |
US8856582B2 (en) * | 2011-06-30 | 2014-10-07 | Microsoft Corporation | Transparent failover |
US9223630B2 (en) * | 2011-12-22 | 2015-12-29 | Alcatel Lucent | Method and apparatus for energy efficient distributed and elastic load balancing |
US10936591B2 (en) * | 2012-05-15 | 2021-03-02 | Microsoft Technology Licensing, Llc | Idempotent command execution |
US9239868B2 (en) * | 2012-06-19 | 2016-01-19 | Microsoft Technology Licensing, Llc | Virtual session management and reestablishment |
US9578130B1 (en) * | 2012-06-20 | 2017-02-21 | Amazon Technologies, Inc. | Asynchronous and idempotent distributed lock interfaces |
US9635121B2 (en) * | 2012-08-06 | 2017-04-25 | Paypal, Inc. | Systems and methods for caching HTTP post requests and responses |
US9596297B2 (en) * | 2013-05-16 | 2017-03-14 | Toshiba Global Commerce Solutions Holdings Corporation | Managing communications in a multi-client, multi-server environment |
US9407692B2 (en) * | 2013-11-27 | 2016-08-02 | Avi Networks | Method and system for distributed load balancing |
US9661035B2 (en) * | 2015-03-20 | 2017-05-23 | Vonage Business Inc. | Method and apparatus for providing call flow information to terminal devices |
-
2016
- 2016-02-05 US US15/016,668 patent/US20170230457A1/en not_active Abandoned
-
2017
- 2017-01-31 EP EP17705729.6A patent/EP3374886A1/en not_active Withdrawn
- 2017-01-31 WO PCT/US2017/015699 patent/WO2017136298A1/en active Application Filing
- 2017-01-31 CN CN201780004786.6A patent/CN108369608A/zh not_active Withdrawn
Also Published As
Publication number | Publication date |
---|---|
EP3374886A1 (en) | 2018-09-19 |
WO2017136298A1 (en) | 2017-08-10 |
US20170230457A1 (en) | 2017-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108369608A (zh) | 幂等服务器群集 | |
JP4616159B2 (ja) | クラスタシステム、ロードバランサ、ノード振替方法およびノード振替プログラム | |
US20140006632A1 (en) | Multiplexer Load Balancer for Session Initiation Protocol Traffic | |
CN102025718B (zh) | Sip端点增强器 | |
US20060167897A1 (en) | Administration of a broker-based publish/subscribe messaging system | |
JP2009519512A (ja) | メディア資源を負荷分散する方法、システム及びコンピュータ読み取り可能な記録媒体(メディア・サーバーにおける分散されたメディア資源の負荷分散及びフェイルオーバー) | |
EP3095229B1 (en) | Method and nodes for configuring a communication path for a media service | |
WO2021233093A1 (zh) | 帐号接入方法和装置、存储介质及电子设备 | |
US10367856B2 (en) | Failover management of SIP based multimedia communication sessions | |
US20180338020A1 (en) | Multiplexed peer-to-peer connections for servers behind a network address | |
EP2629484A1 (en) | Resolving device specific identifiers to a user identifier to initiate a dialog establishment with devices of a user | |
CN106331147A (zh) | 一种redis分布式调用方法及其系统 | |
JP5620881B2 (ja) | トランザクション処理システム、トランザクション処理方法、および、トランザクション処理プログラム | |
WO2014014909A1 (en) | Control system for conferencing applications in named-data networks | |
CN106970843B (zh) | 远程调用方法和装置 | |
US9930106B2 (en) | Processing data and operating a communications device | |
JP5941434B2 (ja) | セッション・ボーダ・コントローラのクラスタシステム、アプリケーション・サーバのクラスタシステム、および、そのsipダイアログ生成方法 | |
CN103703745A (zh) | 用于将用户代理与服务器集群互连的方法和设备 | |
CN106664314A (zh) | 一种用于调用远程Java对象的软件应用方法的方法、计算设备以及系统 | |
JP2023547880A (ja) | バックアップネットワーク機能を提供するためのネットワークノードおよびネットワークノードにおける方法 | |
US10469539B2 (en) | Implementing application level multimedia services as a switching function | |
US20150200980A1 (en) | Hybrid Client/Server Online Conference Session Management | |
US20120059888A1 (en) | Communication System And Method For Communicating Over A Communication System | |
US11785057B1 (en) | Increase service reliability by reusing session-stateful service instances within a single long-lived session | |
US11647072B2 (en) | Methods and apparatus for efficient failure recovery and scaling of a communications system |
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 | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20180803 |
|
WW01 | Invention patent application withdrawn after publication |