本发明涉及计算机技术领域,具体涉及一种服务器负载均衡方法和装置、负载信息处理方法和装置、计算机、存储介质。
背景技术:
随着互联网的高速发展,服务器系统所接入的设备的数量越来越多,为解决高访问量给服务器带来的压力,分布式部署方案应运而生。而如何解决负载均衡问题,是分布式部署方案必须考虑的因素。
负载均衡提供了一种廉价有效透明的方法,其可扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
常见的负载均衡的解决方案为,客户端发送终端请求给负载均衡器loadbalancer,负载均衡器loadbalancer分配rs(真实服务)给客户端,这种方式由负载均衡器修改请求/返回的ip数据报的目的地,多台服务器对外开放一个域名,由负载均衡器负责域名解析,转发请求到真实服务器。
对于上述技术方案,负载均衡器成本太高,且存在一定的风险,如果dns/域名解析服务器出现问题,则整个系统将无法正常运行。
故,有必要提出一种新的技术方案,以解决上述技术问题。
技术实现要素:
本发明的目的在于提供一种服务器负载均衡方法和装置、负载信息处理方法和装置、计算机、存储介质,其能实现服务器群组中各个服务器的负载均衡。
为解决上述问题,本发明的技术方案如下:
第一方面,提供一种服务器负载均衡方法,所述服务器负载均衡方法包括以下步骤:接收终端设备发送的服务器分配请求信息;根据所述服务器分配请求信息读取与服务器群组中的服务器连接的外部设备的数量信息,其中,每个所述服务器均配置有互联网协议地址和/或域名;根据所述数量信息将与所述外部设备连接的数量最少的所述服务器的互联网协议地址和/或域名发送至所述终端设备,以使所述终端设备通过所述互联网协议地址和/或域名与所述服务器建立连接。
第二方面,提供一种服务器负载均衡装置,所述服务器负载均衡装置包括:第一接收模块,用于接收终端设备发送的服务器分配请求信息;读取模块,用于根据所述服务器分配请求信息读取与服务器群组中的服务器连接的外部设备的数量信息,其中,每个所述服务器均配置有互联网协议地址和/或域名;第一发送模块,用于根据所述数量信息将与所述外部设备连接的数量最少的所述服务器的互联网协议地址和/或域名发送至所述终端设备,以使所述终端设备通过所述互联网协议地址和/或域名与所述服务器建立连接。
第三方面,提供一种负载信息处理方法,所述负载信息处理方法包括:接收终端设备根据所述互联网协议地址和/或所述域名发送的连接请求信息;根据所述连接请求信息与所述终端设备建立连接;将所述终端设备的信息更新到服务器群组的第一存储空间中。
第四方面,提供一种负载信息处理装置,所述负载信息处理装置包括:第二接收模块,用于接收终端设备根据所述互联网协议地址和/或所述域名发送的连接请求信息;连接模块,用于根据所述连接请求信息与所述终端设备建立连接;更新模块,用于将所述终端设备的信息更新到服务器群组的第一存储空间中。
第五方面,提供一种计算机,所述计算机包括处理器和存储器,所述存储器用于存储程序代码,所述计算机运行时,所述处理器用于执行所述程序代码,以执行上述服务器负载均衡方法或上述负载信息处理方法。
第六方面,提供一种存储有程序代码的计算机可读存储介质,所述程序代码用于使得计算机执行上述服务器负载均衡方法或上述负载信息处理方法。
在本发明中,由于每台stun服务器都配置有一个域名,每台stun服务器记录自身的负载(连接终端设备的个数)情况,并将本服务器的域名和负载等信息定时更新(写入)到缓存中,终端设备连接acs时,由acs选择负载最小的stun服务器,并将其域名等信息返回给终端设备,从而使终端设备连接到最优的stun服务器上,实现了各个stun服务器的负载均衡。
附图说明
为了更清楚地说明本发明中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的服务器负载均衡方法和装置的工作模式的示意图。
图2是本发明提供的服务器负载均衡方法和装置的工作模式的流程图。
图3是本发明提供的负载信息处理方法和装置的工作模式的流程图。
图4是本发明提供的服务器负载均衡方法的流程图。
图5是本发明提供的服务器负载均衡装置的框图。
图6是本发明提供的负载信息处理方法的流程图。
图7是本发明提供的负载信息处理装置的框图。
图8是本发明提供的服务器负载均衡方法和装置、负载信息处理方法和装置的运行环境的示意图。
具体实施方式
下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明中,术语“模块”一般指:硬件、硬件和软件的组合、软件等。例如,模块可以是运行在处理器上的进程、处理器、对象、可执行应用、执行的线程、程序等。运行在处理器上的应用和该处理器二者都可以是模块。一个或多个模块可以位于一个计算机中和/或分布在两个或更多计算机之间。
在本发明中,“第一”、“第二”等仅用于区分不同的对象,而不应对本发明构成任何限定。
本发明提出了一种服务器系统102,所述服务器系统102包括一负载均衡装置一服务器群组,所述服务器群组包括至少两服务器。所述服务器与所述负载均衡装置的缓存电性连接。每一所述服务器均接入到互联网,每一所述服务器均配置有独立的互联网协议地址和/或域名。所述服务器和所述负载均衡装置均可以通过所述互联网与外部的终端设备101通信(连接)。所述服务器可例如为stun(sessiontraversalutilitiesfornat,nat会话穿越应用程序)服务器,如图1所示。
所述负载均衡装置包括acs(auto-configurationserver,自动配置服务器)和redis缓存,acs的一个例子是tr069服务器,如图1所示。
本发明提供的服务器负载均衡方法和装置适用于(集成于)所述负载均衡装置,所述负载均衡装置可以为个人计算机、服务器、移动设备(例如:移动电话、个人数字助理(pda,personaldigitalassistant)、平板电脑)、会议设备等等。
本发明提供的负载信息处理方法和装置通过为每台stun服务器配置一个域名,当终端设备101请求相应的stun服务器时,stun服务器将终端设备101的信息放到内存中,再通过运行定时任务来扫描内存中的终端设备101的信息,将一定时间内未发送过保活数据包的终端设备101设置成离线状态,将新上报的终端设备101设置成连接状态,并将本stun服务器的ip地址、域名、与stun服务器连接的终端设备101的个数等信息插入到缓存中。当终端设备101连接到acs,并请求stun服务器的地址时,acs从缓存中读取到每台stun服务器对应的终端设备101的个数,将负载最小的stun服务器的地址返回给该终端设备101,从而实现stun服务器的负载均衡。
所述终端设备101是需要云端集中管理的设备,其能联网,上报数据到云端,并接受云端下发的指令,所述终端设备101可例如为话机、ap等,本例以ip话机为例进行描述。
本发明提供的负载信息处理方法和装置适用于(集成于)所述stun服务器。
所述服务器用于根据所述服务器系统102外的外部设备(例如,终端设备101)的请求信息为所述外部设备处理业务。所述负载均衡装置用于根据每一个所述服务器的负载(例如,连接所述外部设备的数量,或者所处理的所述外部设备的任务的数量)来为所述终端设备101分配负载较小的服务器,以使负载较小的服务器为所述终端设备101处理相应的业务,避免在服务器群组中存在负载较小的服务器的情况下,将新增的所述终端设备101的任务分配给负载较大的服务器来处理。
参考图1、图2和图4,本发明提供了一种服务器负载均衡方法,所述服务器负载均衡方法包括以下步骤:
步骤401、所述负载均衡装置接收终端设备101通过互联网发送的服务器分配请求信息。所述服务器分配请求信息可例如为请求所述负载均衡装置分配服务器的信息。
步骤402、所述负载均衡装置根据所述服务器分配请求信息读取与服务器群组中的服务器连接的外部设备(所述终端设备101属于外部设备)的数量信息,其中,每个所述服务器均配置有互联网协议地址和/或域名,任意两个所述服务器的互联网协议地址和/或域名互不相同,所述服务器群组包括至少两所述服务器。具体地,所述负载均衡装置在所述服务器分配请求信息的触发下,从所述缓存中读取与所述服务器连接的所述外部设备的数量信息。所述服务器群组中的每一个所述服务器所连接的所述外部设备的数量记录于所述缓存中。
步骤403、所述缓存记录与每个所述服务器连接的所述外部设备的数量信息。具体地,所述缓存在接收所述服务器定时发送的所述数量信息后,记录(更新)所述数量信息。
步骤404、所述负载均衡装置根据所述数量信息判断所述服务器群组中是否存在与所述外部设备连接的数量最少的所述服务器。具体地,所述负载均衡装置将每个所述服务器所连接的所述外部设备的数量进行比较,以判断是否存在与所述外部设备连接的数量最少的所述服务器。
步骤405、所述负载均衡装置根据所述数量信息将与所述外部设备连接的数量最少的所述服务器的互联网协议地址和/或域名发送至所述终端设备101,以使所述终端设备101通过所述互联网协议地址和/或域名与所述服务器建立连接。具体地,所述负载均衡装置将每个所述服务器所连接的所述外部设备的数量进行比较,从中选出数量最小的所述服务器,并将所述服务器的互联网协议地址和/或域名发送至所述终端设备101。
所述步骤405具体为:所述负载均衡装置在所述服务器群组中存在与最少的所述外部设备连接的所述服务器时,根据所述数量信息将与所述外部设备连接的数量最少的所述服务器的互联网协议地址和/或域名发送至所述终端设备101,以使所述终端设备101通过所述互联网协议地址和/或域名与所述服务器建立连接。
所述服务器负载均衡方法还包括以下步骤:
步骤406、所述负载均衡装置在所述服务器群组中不存在与最少的所述外部设备连接的所述服务器时,从所述服务器群组中的选择预设服务器。例如,在所述服务器群组中存在至少两个与所述外部设备连接的数量最少的所述服务器(至少两个的数量相等)时,所述负载均衡装置从至少两个与所述外部设备连接的数量最少的所述服务器中选择一个,作为所述预设服务器。
步骤407、所述负载均衡装置将所述预设服务器(默认服务器)的互联网协议地址和/或域名发送至所述终端设备101,以使所述终端设备101通过所述互联网协议地址和/或域名与所述预设服务器建立连接。
在所述步骤405或所述步骤407之前,所述服务器负载均衡方法还包括以下步骤:
所述负载均衡装置判断是否首次接收到所述终端设备101发送的服务器分配请求信息。
所述步骤405或所述步骤407包括:
所述负载均衡装置在首次接收到所述终端设备101发送的服务器分配请求信息时,根据所述数量信息将与所述外部设备连接的数量最少的所述服务器的互联网协议地址和/或域名发送至所述终端设备101,以使所述终端设备101通过所述互联网协议地址和/或域名与所述服务器建立连接。
在所述步骤405或所述步骤407之后,所述服务器负载均衡方法还包括以下步骤:
所述负载均衡装置判断是否向所述终端设备101发送所述互联网协议地址和/或所述域名失败。
所述负载均衡装置在向所述终端设备101发送所述互联网协议地址和/或所述域名失败时,重新选择与所述外部设备连接的数量最少的所述服务器,并再次将所选择的与所述外部设备连接的数量最少的所述服务器的互联网协议地址和/或域名发送至所述终端设备101,以使所述终端设备101通过所述互联网协议地址和/或域名与所述服务器建立连接。
所述服务器负载均衡方法还包括以下步骤:
所述负载均衡装置判断所述终端设备101当前所连接的所述服务器是否处于可用状态。
所述负载均衡装置在所述终端设备101当前所连接的所述服务器处于不可用状态时,重新选择与所述外部设备连接的数量最少的所述服务器,并再次将所选择的与所述外部设备连接的数量最少的所述服务器的互联网协议地址和/或域名发送至所述终端设备101,以使所述终端设备101通过所述互联网协议地址和/或域名与所述服务器建立连接。
例如,如图1和图2所示,tr069服务器接收终端设备101发送的服务器分配请求信息(访问请求信息),tr069服务器查询redis缓存,以获取stun服务器1至stun服务器n的负载信息,即,获取所有stun服务器的负载信息。
在redis缓存中记录有stun服务器1至stun服务器n的负载信息的情况下,tr069服务器从stun服务器1至stun服务器n中选择负载最小的一者,并将所选择的stun服务器的信息(例如,所述互联网协议地址和/或所述域名)返回给所述终端设备101。
在redis缓存中没有记录stun服务器1至stun服务器n的负载信息的情况下,或者在redis缓存所记录的stun服务器1至stun服务器n的负载信息中,存在至少两个stun服务器的负载为最小值的情况下,tr069服务器查找默认的stun服务器的信息,并将所选择的stun服务器的信息(例如,所述互联网协议地址和/或所述域名)返回给所述终端设备101。
为了更好地实施以上方法,相应的,如图1、图2和图5所示,本发明提供了一种服务器负载均衡装置,所述服务器负载均衡装置包括第一接收模块501、读取模块502、缓存503、第一判断模块504和第一发送模块505。
所述第一接收模块501用于接收终端设备101通过互联网发送的服务器分配请求信息。所述服务器分配请求信息可例如为请求所述负载均衡装置分配服务器的信息。
所述读取模块502用于根据所述服务器分配请求信息读取与服务器群组中的服务器连接的外部设备(所述终端设备101属于外部设备)的数量信息,其中,每个所述服务器均配置有互联网协议地址和/或域名,任意两个所述服务器的互联网协议地址和/或域名互不相同,所述服务器群组包括至少两所述服务器。具体地,所述负载均衡装置在所述服务器分配请求信息的触发下,从所述缓存中读取与所述服务器连接的所述外部设备的数量信息。所述服务器群组中的每一个所述服务器所连接的所述外部设备的数量记录于所述缓存中。
所述缓存503用于记录与每个所述服务器连接的所述外部设备的数量信息。具体地,所述缓存503在接收所述服务器定时发送的所述数量信息后,记录(更新)所述数量信息。
所述第一判断模块504用于根据所述数量信息判断所述服务器群组中是否存在与所述外部设备连接的数量最少的所述服务器。具体地,所述负载均衡装置将每个所述服务器所连接的所述外部设备的数量进行比较,以判断是否存在与所述外部设备连接的数量最少的所述服务器。
所述第一发送模块505用于根据所述数量信息将与所述外部设备连接的数量最少的所述服务器的互联网协议地址和/或域名发送至所述终端设备101,以使所述终端设备101通过所述互联网协议地址和/或域名与所述服务器建立连接。具体地,所述负载均衡装置将每个所述服务器所连接的所述外部设备的数量进行比较,从中选出数量最小的所述服务器,并将所述服务器的互联网协议地址和/或域名发送至所述终端设备101。
所述第一发送模块505还用于在所述服务器群组中存在与最少的所述外部设备连接的所述服务器时,根据所述数量信息将与所述外部设备连接的数量最少的所述服务器的互联网协议地址和/或域名发送至所述终端设备101,以使所述终端设备101通过所述互联网协议地址和/或域名与所述服务器建立连接。
所述服务器负载均衡装置还包括选择模块506,所述选择模块506用于在所述服务器群组中不存在与最少的所述外部设备连接的所述服务器时,从所述服务器群组中的选择预设服务器。例如,在所述服务器群组中存在至少两个与所述外部设备连接的数量最少的所述服务器(至少两个的数量相等)时,所述负载均衡装置从至少两个与所述外部设备连接的数量最少的所述服务器中选择一个,作为所述预设服务器。
所述第一发送模块505还用于将所述预设服务器(默认服务器)的互联网协议地址和/或域名发送至所述终端设备101,以使所述终端设备101通过所述互联网协议地址和/或域名与所述预设服务器建立连接。
所述第一判断模块504还用于判断是否首次接收到所述终端设备101发送的服务器分配请求信息。
所述第一发送模块505还用于在首次接收到所述终端设备101发送的服务器分配请求信息时,根据所述数量信息将与所述外部设备连接的数量最少的所述服务器的互联网协议地址和/或域名发送至所述终端设备101,以使所述终端设备101通过所述互联网协议地址和/或域名与所述服务器建立连接。
所述第一判断模块504还用于判断是否向所述终端设备101发送所述互联网协议地址和/或所述域名失败。
所述选择模块506还用于在向所述终端设备101发送所述互联网协议地址和/或所述域名失败时,重新选择与所述外部设备连接的数量最少的所述服务器,所述第一发送模块505还用于再次将所选择的与所述外部设备连接的数量最少的所述服务器的互联网协议地址和/或域名发送至所述终端设备101,以使所述终端设备101通过所述互联网协议地址和/或域名与所述服务器建立连接。
所述第一判断模块504还用于判断所述终端设备101当前所连接的所述服务器是否处于可用状态。
所述选择模块506还用于在所述终端设备101当前所连接的所述服务器处于不可用状态时,重新选择与所述外部设备连接的数量最少的所述服务器,所述第一发送模块505还用于再次将所选择的与所述外部设备连接的数量最少的所述服务器的互联网协议地址和/或域名发送至所述终端设备101,以使所述终端设备101通过所述互联网协议地址和/或域名与所述服务器建立连接。
例如,如图1和图2所示,tr069服务器接收终端设备101发送的服务器分配请求信息(访问请求信息),tr069服务器查询redis缓存,以获取stun服务器1至stun服务器n的负载信息,即,获取所有stun服务器的负载信息。
在redis缓存中记录有stun服务器1至stun服务器n的负载信息的情况下,tr069服务器从stun服务器1至stun服务器n中选择负载最小的一者,并将所选择的stun服务器的信息(例如,所述互联网协议地址和/或所述域名)返回给所述终端设备101。
在redis缓存中没有记录stun服务器1至stun服务器n的负载信息的情况下,或者在redis缓存所记录的stun服务器1至stun服务器n的负载信息中,存在至少两个stun服务器的负载为最小值的情况下,tr069服务器查找默认的stun服务器的信息,并将所选择的stun服务器的信息(例如,所述互联网协议地址和/或所述域名)返回给所述终端设备101。
参考图1、图3和图6,本发明提供了一种负载信息处理方法,所述负载信息处理方法包括:
步骤601、所述服务器接收终端设备101根据所述互联网协议地址和/或所述域名发送的连接请求信息。
步骤602、所述服务器根据所述连接请求信息与所述终端设备101建立连接。
步骤603、所述服务器将所连接的所述终端设备101的信息记录到第二存储空间中。所述第二存储空间为所述服务器的自身存储空间(内存)。
步骤604、所述服务器将所述终端设备101的信息更新(记录)到服务器群组的第一存储空间中。所述第一存储空间为所述服务器群组的公共存储空间。例如,所述第一存储空间为所述负载均衡装置的所述缓存。
在所述步骤602之后,所述负载信息处理方法还包括以下步骤:
所述服务器向所述终端设备101发送与所述连接请求信息对应的反馈信息。
所述步骤604包括:
所述服务器将所述第二存储空间所记录的所述终端设备101的信息更新(记录)到所述第一存储空间中。具体地,每隔第一预定时间,所述服务器将所述第二存储空间所记录的所述终端设备101的信息更新到所述第一存储空间中。
在所述步骤602之后,所述负载信息处理方法还包括以下步骤:
步骤605、所述服务器接收终端设备101根据所述互联网协议地址和/或所述域名发送的保活数据包。所述保活数据包为所述终端设备101定时发送的用于保持所述终端设备101与所述服务器之间的连接状态的数据包。
步骤606、所述服务器在所述保活数据包的触发下,判断所述终端设备101与服务器是否处于连接状态。
步骤607、所述服务器在所述终端设备101与所述服务器处于断开状态的情况下,将所述终端设备101设置成与所述服务器连接的状态。
步骤608、所述服务器在所述终端设备101与所述服务器处于连接状态的情况下,将接收到所述连接请求信息的时间记录到第二存储空间中,以防止所述终端设备101与所述服务器的连接状态被修改为断开状态(离线状态)。
作为一种改进,所述服务器每隔第二预定时间,将所述第二存储空间所记录的所述终端设备101的信息写入到预设文件中。
例如,如图1和图3所示,在stun服务器1为负载最小的stun服务器的情况下,终端设备101通过互联网向stun服务器1发送连接建立请求,stun服务器1接收终端设备101发送的请求连接的信息后,与所述终端设备101建立连接,并向所述终端设备101返回请求结果信息。stun服务器1在与所述终端设备101建立连接后,将所连接的终端设备101的信息记录到其内存中(与所述stun服务器1连接的终端设备101的数量 1),stun服务器1运行有定时的任务,每隔一定的时间,stun服务器1将其内存中所记录的(包括新增的、删除的)所述终端设备101(所述外部设备)的信息(包括公网ip、端口、终端设备101的数量)插入到redis缓存中。
所述stun服务器1在与所述终端设备101建立连接后,接收所述终端设备101定时发送的保活数据包,stun服务器1在接收到该保活数据包后,判断所述终端设备101与所述stun服务器1的连接状态是否为断开,若是,则将所述终端设备101与所述stun服务器1的连接状态设置为连接,否则,将接收到所述保活数据包的数据更新到其内存中,以防止所述终端设备101与所述stun服务器1的连接状态被设置为断开。当所述定时任务运行时,所述stun服务器1的设备管理平台将五分钟未上报的终端设备101设置为离线状态,将不在线的终端设备101设置为在线状态。
所述stun服务器1定时将其内存中所记录的所连接的所述终端设备101的信息写入到文件中,作为备份。所备份的所述终端设备101的信息用于在所述stun服务器1非正常关机或重启时,可以使得所述stun服务器1重新与相应的终端设备101建立连接。
为了更好地实施以上方法,相应的,如图1、图3和图7所示,本发明还提供了一种负载信息处理装置,所述负载信息处理装置包括第二接收模块701、连接模块704、记录模块705、第二发送模块703、更新模块706和第二判断模块702。
所述第二接收模块701用于接收终端设备101根据所述互联网协议地址和/或所述域名发送的连接请求信息。
所述连接模块704用于根据所述连接请求信息与所述终端设备101建立连接。
所述记录模块705用于将所连接的所述终端设备101的信息记录到第二存储空间中。所述第二存储空间为所述服务器的自身存储空间(内存)。
所述更新模块706用于将所述终端设备101的信息更新(记录)到服务器群组的第一存储空间中。所述第一存储空间为所述服务器群组的公共存储空间。例如,所述第一存储空间为所述负载均衡装置的所述缓存。
所述第二发送模块703用于向所述终端设备101发送与所述连接请求信息对应的反馈信息。
所述更新模块706用于将所述第二存储空间所记录的所述终端设备101的信息更新(记录)到所述第一存储空间中。具体地,每隔第一预定时间,所述更新模块706用于将所述第二存储空间所记录的所述终端设备101的信息更新到所述第一存储空间中。
所述第二接收模块701还用于接收终端设备101根据所述互联网协议地址和/或所述域名发送的保活数据包。所述保活数据包为所述终端设备101定时发送的用于保持所述终端设备101与所述服务器之间的连接状态的数据包。
所述第二判断模块702用于在所述保活数据包的触发下,判断所述终端设备101与服务器是否处于连接状态。
所述连接模块704用于在所述终端设备101与所述服务器处于断开状态的情况下,将所述终端设备101设置成与所述服务器连接的状态。
所述记录模块705还用于在所述终端设备101与所述服务器处于连接状态的情况下,将接收到所述连接请求信息的时间记录到第二存储空间中,以防止所述终端设备101与所述服务器的连接状态被修改为断开状态(离线状态)。
作为一种改进,所述服务器每隔第二预定时间,将所述第二存储空间所记录的所述终端设备101的信息写入到预设文件中。
例如,如图1和图3所示,在stun服务器1为负载最小的stun服务器的情况下,终端设备101通过互联网向stun服务器1发送连接建立请求,stun服务器1接收终端设备101发送的请求连接的信息后,与所述终端设备101建立连接,并向所述终端设备101返回请求结果信息。stun服务器1在与所述终端设备101建立连接后,将所连接的终端设备101的信息记录到其内存中(与所述stun服务器1连接的终端设备101的数量 1),stun服务器1运行有定时的任务,每隔一定的时间,stun服务器1将其内存中所记录的(包括新增的、删除的)所述终端设备101(所述外部设备)的信息(包括公网ip、端口、终端设备101的数量)插入到redis缓存中。
所述stun服务器1在与所述终端设备101建立连接后,接收所述终端设备101定时发送的保活数据包,stun服务器1在接收到该保活数据包后,判断所述终端设备101与所述stun服务器1的连接状态是否为断开,若是,则将所述终端设备101与所述stun服务器1的连接状态设置为连接,否则,将接收到所述保活数据包的数据更新到其内存中,以防止所述终端设备101与所述stun服务器1的连接状态被设置为断开。当所述定时任务运行时,所述stun服务器1的设备管理平台将五分钟未上报的终端设备101设置为离线状态,将不在线的终端设备101设置为在线状态。
所述stun服务器1定时将其内存中所记录的所连接的所述终端设备101的信息写入到文件中,作为备份。所备份的所述终端设备101的信息用于在所述stun服务器1非正常关机或重启时,可以使得所述stun服务器1重新与相应的终端设备101建立连接。
以所述终端设备101为话机为例,本发明的技术方案如下:
话机访问acs,获取可用的stun服务器的域名、ip地址、端口等信息。acs收到话机的请求后,依次判断话机是否首次连接、是否已成功下发stun服务器信息、话机当前使用的stun服务器是否仍然可用,判断结果如下:(1)若话机首次连接,则从缓存中获取取出所有stun服务器的信息(如:stun1:{"num":100,"ip":"192.168.126.121"},stun2:{"num":300,"ip":"192.168.126.122"}),"num"表示当前该stun服务器上话机的个数,"ip"表示当前该stun服务器上的ip地址,将所有stun服务器的个数num进行对比,取出个数最少的stun服务器信息下发给话机;(2)若向话机下发stun服务器信息失败,则从缓存中查找话机数量最少的stun服务器信息再次下发到话机;(3)否则,判断话机当前所连接的stun服务器是否可用,若不可用,则重新从缓存中查找话机数量最少的stun服务器信下发到话机。
若未取到任何stun服务器的信息,则获取到默认的stun服务器信息返回到话机,保证若默认stun服务器已启动,话机能及时连接到stun服务器;若默认stun服务器未启动,则当stun启动之后话机仍可及时连上stun服务器,以便云端远程管理。
话机得到acs的返回信息后,根据域名/ip地址和端口向stun服务器发起bindingrequest请求,stun服务器回复bindingresponse,并将当前话机更新为保持连接状态;后期话机继续向本stun服务器发送stun保活包,使得话机始终与stun服务器保持连接。
若stun服务器未启动,则话机一直轮询该stun服务器,以保证当stun服务器启动之后,话机能及时连上stun服务器。
stun服务器收到话机的上报信息后,若话机是离线状态,则将话机设置成保持连接状态,并将话机信息存于stun内存中;若话机已与stun服务器保持连接,则更新内存中改话机的最后上报时间,使得话机不被云端修改为离线状态。
经过反复验证,话机信息存到内存里时,内存占用情况为:(1)50000个话机占用内存约16.6mb。(2)100000个话机占用内存约31.7mb。
若话机长时间未上报保活包,则stun会将话机设置成断开连接状态,并将话机从内存中清除。
stun服务器上存在更新话机保持/断开连接及stun负载信息的定时任务,每一分钟运行一次。当该定时任务运行时:
(1)stun获取到当前服务器的公网ip地址、端口、域名配置信息、以及当前服务器上的话机个数,插入到缓存中,供acs服务器使用。数据格式为:"server_domain":{"mac_num":n,"ip_port":"ip:port"}。
(2)将与stun服务器断开连接的话机更新为保持连接的状态,若由于某种不可知的异常导致此次更新状态不成功,则等待下次定时任务运行时再次请求。
(3)将大于五分钟未上报过信息的话机更新为离线状态,若请求话机管理平台不成功,则等待下次定时任务运行时再次请求。
stun服务器上存在持久化内存中话机信息的定时任务,每五分钟运行一次,将内存中话机的信息写入文件中,保证stun服务器重启后,能还原话机当时的状态。
(1)持久化内存中话机信息的定时任务运行时,将话机的mac地址、ip、端口、当前时间戳等信息写入文件,若文件已存在,则覆盖原有内容。
容灾:重启stun服务器时,监听器监听到服务器的停止事件,立即将当前服务器内存中的话机信息写入文件。
(2)启动stun服务器时,从文件中读入话机信息,再写入服务器内存,将话机对应的时间戳都改成当前时间戳,并将话机设置成保持连接的状态,防止原本与stun服务器保持连接的话机因为服务器重启而断连。若stun服务器重启时,话机已断开连接,则待五分钟之后离线定时任务运行时,将其置为断开连接的状态。
通过以上六步,即可实现stun的负载均衡,保证每台stun服务器承担的设备数量大致相等,方案简单、容易施行、易扩展、成本小。缓存中的stun负载信息每一分钟更新一次,可促使acs服务器及时调整负载方案,保证将误差降低到很小的范围。
本发明提供的服务器负载均衡方法和装置、负载信息处理方法和装置实现动态扩容的方式为:若增加一台新的stun服务器,并为该服务配置一个新的域名后,当本stun服务器的定时任务运行时,会将本服务器的ip、域名、与stun服务器保持连接的设备个数等信息插入到缓存(redis)中,定时任务首次运行时,本服务器所连接的终端设备101的个数为0。此时,新的终端设备101请求acs获取可连接的stun服务器,acs从缓存(redis)中读取到每台stun服务器对应的终端设备101的个数,将所连接的终端设备101的个数最少的stun服务器的信息返回给该终端设备101,此stun服务器必定是刚加入的这台与终端设备101连接的数量为0的stun服务器,直到此台stun服务器的与终端设备101连接的数量不是最小的为止,由此实现动态扩容。
综上,本发明以云端的方式集中管理远程的终端设备101,由于每台stun服务器都配置有一个域名,每台stun服务器记录自身的负载(连接终端设备101的个数)情况,并将本服务器的域名和负载等信息定时更新(写入)到缓存中,终端设备101连接acs时,由acs选择负载最小的stun服务器,并将其域名等信息返回给终端设备101,从而使终端设备101连接到最优的stun服务器上,实现了各个stun服务器的负载均衡。
上述技术方案可以用多个域名分摊一个域名的压力,以软件实现的方式代替负载均衡器,即,以软件方式实现stun服务器的负载均衡,因此可以在增加服务器时通过增加域名方式实现动态扩容,提高stun服务器的稳定性、可靠性、性能及响应速度,进而优化用户体验,为云端集中管理海量的终端设备101提供更好的解决方案。同时,上述技术方案能降低使用传统的负载均衡器带来的风险,降低成本,易实施,具有一定的自学习能力。若存在stun服务器重启、新增等情况,导致stun服务器负载不均衡,此时,新的设备连接请求会连接到新的服务器上,当服务器运行一段时间之后,各个stun服务器可重新达到负载均衡的状态。
另外,上述技术方案成本低,风险小,能动态扩容,实现了各个stun服务器之间的动态负载均衡。在终端设备101请求stun服务器时,stun服务器能简单、高效、准确的给出应答,从而实现低成本、低风险、易部署、易扩展的解决stun服务器的集群。
本发明提供的服务器负载均衡方法和装置、负载信息处理方法和装置可以通过硬件实现,如图8所示,该硬件可以包括处理器802、存储器801、通信电路803等的任意组合,其中,存储器801、通信电路803均与处理器802电性连接。上述处理器802、存储器801、通信电路803等的任意组合用于实现本发明提供的服务器负载均衡方法和装置、负载信息处理方法和装置的功能、步骤。
其中,该处理器802可例如为:cpu(centralprocessingunit,中央处理器)、gpu、npu(neuralprocessingunit,神经网络处理单元)、其他通用处理器、数字信号处理器(dsp,digitalsignalprocessor)、专用集成电路(asic,applicationspecificintegratedcircuit)、现场可编程门阵列(fpga,field-programmablegatearray)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,通用处理器可以是微处理器或者是任何常规的处理器等。
该存储器801可以包括只读存储器和随机存取存储器,用于向处理器提供程序代码和数据。存储器还可以包括非易失性随机存取存储器。该存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-onlymemory,rom)、可编程只读存储器(programmablerom,prom)、可擦除可编程只读存储器(erasableprom,eprom)、电可擦除可编程只读存储器(electricallyeprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(randomaccessmemory,ram),其用作外部高速缓存。
本发明提供的服务器负载均衡方法和装置、负载信息处理方法和装置也可以通过软件实现,此时,本发明提供的服务器负载均衡方法和装置、负载信息处理方法和装置及其各个模块也可以为软件模块。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品(其载体可例如为本发明的计算机可读存储介质)的形式实现。
本发明提供的服务器负载均衡方法和装置、负载信息处理方法和装置还可以通过软件、硬件的组合来实现。
本发明提供的服务器负载均衡方法和装置、负载信息处理方法和装置可对应于执行本发明中描述的方法,并且所述服务器负载均衡方法和装置、负载信息处理方法和装置中的各个模块的上述和其它操作和/或功能用于实现本发明提供的服务器负载均衡方法、负载信息处理方法的相应流程。
本发明提供的计算机包括处理器和存储器,其中,处理器、存储器通过总线进行通信。所述存储器用于存储程序代码,所述计算机运行时,所述处理器执行所述程序代码,以执行本发明提供的服务器负载均衡方法、负载信息处理方法。例如,该程序代码可以执行如下步骤:
接收终端设备发送的服务器分配请求信息;根据所述服务器分配请求信息读取与服务器群组中的服务器连接的外部设备的数量信息,其中,每个所述服务器均配置有互联网协议地址和/或域名;根据所述数量信息将与所述外部设备连接的数量最少的所述服务器的互联网协议地址和/或域名发送至所述终端设备,以使所述终端设备通过所述互联网协议地址和/或域名与所述服务器建立连接。
接收终端设备根据所述互联网协议地址和/或所述域名发送的连接请求信息;根据所述连接请求信息与所述终端设备建立连接;将所述终端设备的信息更新到服务器群组的第一存储空间中。
本发明的计算机可读存储介质存储有程序代码,所述程序代码用于使得计算机执行本发明提供的服务器负载均衡方法、负载信息处理方法。例如,该程序代码可以执行如下步骤:
接收终端设备发送的服务器分配请求信息;根据所述服务器分配请求信息读取与服务器群组中的服务器连接的外部设备的数量信息,其中,每个所述服务器均配置有互联网协议地址和/或域名;根据所述数量信息将与所述外部设备连接的数量最少的所述服务器的互联网协议地址和/或域名发送至所述终端设备,以使所述终端设备通过所述互联网协议地址和/或域名与所述服务器建立连接。
接收终端设备根据所述互联网协议地址和/或所述域名发送的连接请求信息;根据所述连接请求信息与所述终端设备建立连接;将所述终端设备的信息更新到服务器群组的第一存储空间中。
所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质。半导体介质可以是固态硬盘(solidstatedrive,ssd)。
所述程序代码的指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述程序代码的指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl,digitalsubscriberline))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能。
综上所述,虽然本发明已以优选实施例揭露如上,但上述优选实施例并非用以限制本发明,本领域的普通技术人员,在不脱离本发明的精神和范围内,均可作各种更动与润饰,因此本发明的保护范围以权利要求界定的范围为准。
1.一种服务器负载均衡方法,其特征在于,所述服务器负载均衡方法包括以下步骤:
接收终端设备发送的服务器分配请求信息;
根据所述服务器分配请求信息读取与服务器群组中的服务器连接的外部设备的数量信息,其中,每个所述服务器均配置有互联网协议地址和/或域名;
根据所述数量信息将与所述外部设备连接的数量最少的所述服务器的互联网协议地址和/或域名发送至所述终端设备,以使所述终端设备通过所述互联网协议地址和/或域名与所述服务器建立连接。
2.根据权利要求1所述的服务器负载均衡方法,其特征在于,在所述根据所述数量信息将与所述外部设备连接的数量最少的所述服务器的互联网协议地址和/或域名发送至所述终端设备,以使所述终端设备通过所述互联网协议地址和/或域名与所述服务器建立连接之前,所述服务器负载均衡方法还包括以下步骤:
记录与每个所述服务器连接的所述外部设备的数量信息。
3.根据权利要求1所述的服务器负载均衡方法,其特征在于,在所述根据所述服务器分配请求信息读取与服务器群组中的服务器连接的外部设备的数量信息之后,以及在所述根据所述数量信息将与所述外部设备连接的数量最少的所述服务器的互联网协议地址和/或域名发送至所述终端设备,以使所述终端设备通过所述互联网协议地址和/或域名与所述服务器建立连接之前,所述服务器负载均衡方法还包括以下步骤:
根据所述数量信息判断所述服务器群组中是否存在与所述外部设备连接的数量最少的所述服务器;
所述根据所述数量信息将与所述外部设备连接的数量最少的所述服务器的互联网协议地址和/或域名发送至所述终端设备,以使所述终端设备通过所述互联网协议地址和/或域名与所述服务器建立连接,包括:
在所述服务器群组中存在与最少的所述外部设备连接的所述服务器时,根据所述数量信息将与所述外部设备连接的数量最少的所述服务器的互联网协议地址和/或域名发送至所述终端设备,以使所述终端设备通过所述互联网协议地址和/或域名与所述服务器建立连接;
所述服务器负载均衡方法还包括以下步骤:
在所述服务器群组中不存在与最少的所述外部设备连接的所述服务器时,从所述服务器群组中的选择预设服务器;
将所述预设服务器的互联网协议地址和/或域名发送至所述终端设备,以使所述终端设备通过所述互联网协议地址和/或域名与所述预设服务器建立连接。
4.一种服务器负载均衡装置,其特征在于,所述服务器负载均衡装置包括:
第一接收模块,用于接收终端设备发送的服务器分配请求信息;
读取模块,用于根据所述服务器分配请求信息读取与服务器群组中的服务器连接的外部设备的数量信息,其中,每个所述服务器均配置有互联网协议地址和/或域名;
第一发送模块,用于根据所述数量信息将与所述外部设备连接的数量最少的所述服务器的互联网协议地址和/或域名发送至所述终端设备,以使所述终端设备通过所述互联网协议地址和/或域名与所述服务器建立连接。
5.一种负载信息处理方法,其特征在于,所述负载信息处理方法包括:
接收终端设备根据所述互联网协议地址和/或所述域名发送的连接请求信息;
根据所述连接请求信息与所述终端设备建立连接;
将所述终端设备的信息更新到服务器群组的第一存储空间中。
6.根据权利要求5所述的负载信息处理方法,其特征在于,在所述根据所述连接请求信息与所述终端设备建立连接之后,以及在所述将所述终端设备的信息更新到服务器群组的第一存储空间中之前,所述负载信息处理方法还包括以下步骤:
将所述终端设备的信息记录到第二存储空间中;
所述将所述终端设备的信息更新到服务器群组的第一存储空间中包括:
将所述第二存储空间所记录的所述终端设备的信息更新到所述第一存储空间中。
7.根据权利要求5所述的负载信息处理方法,其特征在于,所述负载信息处理方法还包括以下步骤:
接收终端设备根据所述互联网协议地址和/或所述域名发送的保活数据包;
在所述保活数据包的触发下,判断所述终端设备与服务器是否处于连接状态;
在所述终端设备与所述服务器处于断开状态的情况下,将所述终端设备设置成与所述服务器连接的状态;
在所述终端设备与所述服务器处于连接状态的情况下,将接收到所述连接请求信息的时间记录到第二存储空间中。
8.一种负载信息处理装置,其特征在于,所述负载信息处理装置包括:
第二接收模块,用于接收终端设备根据所述互联网协议地址和/或所述域名发送的连接请求信息;
连接模块,用于根据所述连接请求信息与所述终端设备建立连接;
更新模块,用于将所述终端设备的信息更新到服务器群组的第一存储空间中。
9.一种计算机,其特征在于,所述计算机包括处理器和存储器,所述存储器用于存储程序代码,所述计算机运行时,所述处理器用于执行所述程序代码,以执行权利要求1至3中任意一项所述的服务器负载均衡方法或权利要求5至7中任意一项所述的负载信息处理方法。
10.一种存储有程序代码的计算机可读存储介质,其特征在于,所述程序代码用于使得计算机执行权利要求1至3中任意一项所述的服务器负载均衡方法或权利要求5至7中任意一项所述的负载信息处理方法。
技术总结