支持海量长连接的软负载均衡方法及***
技术领域
本发明属于互联网软件领域,特别涉及一种支持海量长连接的软负载均衡方法及***。
背景技术
对于互联网应用,业务发展的越红火,那么使用业务的活跃用户就越多,而服务器承受的压力就越大。当负载压力达到单台服务器即使升级硬件也满足不了负载需求的时候,负载均衡技术就应运而生了。负载均衡技术是一种互联网业务部署常用的技术,它把多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。通过负载均衡技术,用户的访问压力被均分到多台服务器之上,对于任一单台服务器而言,承受的负载压力只是集合中的负载压力的1/N(N为服务器台数)。这样的话,业务的继续发展也能顺利得以支撑。
常规的负载均衡技术是采用负载均衡器硬件(比如F5)或者是采用软负载均衡工具(比如Nginx、HAProxy)来实现。对于前者,必须采购负载均衡器硬件和相关的网络设备,统一部署,方案的实施成本较高。而对于后者,为了保证业务***的高可用性,通常会部署两台及以上专门的服务器(比如Nginx服务器)来承担负载均衡的功能,这种方案虽然实施成本地前者低一些,仍然不够经济,而且性能也有瓶颈,为了提升性能就必须添加更多的负载均衡服务器节点,这意味着成本更高。
发明内容
【要解决的技术问题】
本发明的目的是提供一种支持海量长连接的软负载均衡方法及***,以至少解决以上技术问题之一。
【技术方案】
本发明是通过以下技术方案实现的。
本发明首先涉及一种支持海量长连接的软负载均衡***,包括客户端、服务端身份认证***、Erlang集群。
所述客户端被配置成:使用凭据向服务端身份认证***发起认证HTTP请求;接收到令牌Token和服务器节点的公网IP地址信息后,使用令牌向公网IP地址对应的节点发起建立长连接的请求,该节点验证令牌,如果令牌合法,则节点根据双方预先约定的长连接协议与客户端建立长连接。
所述服务端身份认证***被配置成:接收到客户端发送的认证HTTP请求后,验证凭据,如果凭据合法,则生成一个令牌Token并通过HTTP请求把令牌Token发送至Erlang集群,如果凭据不合法,则返回认证失败的信息;等待Erlang集群的响应信息,当接收到Erlang的响应信息后,再响应客户端的HTTP请求,将令牌Token和长连接数最少的服务器节点的公网IP地址发送至客户端。
所述Erlang集群被配置成:响应服务端身份认证***的请求,并根据集群的负载情况将长连接数最少的服务器节点的公网IP地址返回给服务端身份认证***。
作为一种优选的实施方式,所述凭据为设备信息和/或用户信息。
作为另一种优选的实施方式,所述设备信息为设备SN号、设备Mac地址、设备二维码或设备串号中的一种或多种,所述用户信息为用户账户名、账户密码、邮箱或手机号中的一种或多种。
作为另一种优选的实施方式,所述Erlang集群包括实时动态表,所述实时动态表至少包括Erlang服务节点名和端口、客户端IP地址和端口、客户端识别信息、建立长连接的初始时间,所述实时动态表获得实时更新且在整个Erlang集群中被所有节点共享。
作为另一种优选的实施方式,所述长连接协议为MQTT协议、XMPP协议、WebSocket协议、AMQP协议、STOMP协议、OpenWire协议、JMS协议或NMS协议。
本发明还涉及一种支持海量长连接的软负载均衡方法,包括以下步骤:
A、客户端使用凭据向服务端身份认证***发起认证HTTP请求;
B、服务端身份认证***验证凭据,如果凭据合法,则生成一个令牌Token并通过HTTP请求把令牌Token发送至Erlang集群;如果凭据不合法,则返回认证失败的信息;
C、Erlang集群响应服务端身份认证***的请求,并根据集群的负载情况将长连接数最少的服务器节点的公网IP地址返回给服务端身份认证***;
D、服务端身份认证***响应客户端的HTTP请求,将令牌Token和长连接数最少的服务器节点的公网IP地址发送至客户端;
E、客户端接收到令牌Token和服务器节点的公网IP地址信息后,使用令牌向公网IP地址对应的节点发起建立长连接的请求,该节点验证令牌,如果令牌合法,则节点根据双方预先约定的长连接协议与客户端建立长连接。
作为一种优选的实施方式,所述凭据为设备信息和/或用户信息。
作为另一种优选的实施方式,所述设备信息为设备SN号、设备Mac地址、设备二维码或设备串号中的一种或多种,所述用户信息为用户账户名、账户密码、邮箱或手机号中的一种或多种。
作为另一种优选的实施方式,所述Erlang集群的负载的连接情况通过Erlang集群的实时动态表获得,所述实时动态表至少包括Erlang服务节点名和端口、客户端IP地址和端口、客户端识别信息、建立长连接的初始时间,所述实时动态表实时更新且在整个Erlang集群中被所有节点共享。
作为另一种优选的实施方式,所述步骤E中的长连接协议为MQTT协议、XMPP协议、WebSocket协议、AMQP协议、STOMP协议、OpenWire协议、JMS协议或NMS协议。
【有益效果】
本发明提出的技术方案具有以下有益效果:
本发明无需采用负载均衡器和软负载均衡服务器,因此降低了***的硬件成本,降低了整个***的复杂度,提升了整个***的可靠性;而且,本发明中的长连接在Erlang集群节点间得到了均匀分布,***可以很容易的进行横向扩展,因此可以方便的实现海量长连接。
附图说明
图1为本发明的实施例一提供的支持海量长连接的软负载均衡***的原理框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的具体实施方式进行清楚、完整的描述。
实施例一
图1为本发明实施例一提供的支持海量长连接的软负载均衡***的原理框图。如图1所示,该***包括客户端1、服务端身份认证***2、Erlang集群3。
客户端1被配置成:使用凭据向服务端身份认证***2发起认证HTTP请求;接收到令牌Token和服务器节点的公网IP地址信息后,使用令牌向公网IP地址对应的节点发起建立长连接的请求,该节点验证令牌,如果令牌合法,则节点根据双方预先约定的长连接协议与客户端建立长连接。其中,凭据为设备信息和/或用户信息,设备信息为设备SN号、设备Mac地址、设备二维码或设备串号中的一种或多种,用户信息为用户账户名、账户密码、邮箱或手机号中的一种或多种。另外,长连接协议为MQTT协议、XMPP协议、WebSocket协议、AMQP协议、STOMP协议、OpenWire协议、JMS协议或NMS协议。另外,令牌Token是身份认证***根据访问信息和凭据,使用算法生成的一串随机字符串数据。Erlang集群是指采用Erlang编程语言开发的支持长连接服务的服务器的集群,Erlang语言开发的应用或服务,天然就支持集群,这是Erlang语言的本质所决定的。Erlang的集群在默认情况下是全联通的,也就是当一个节点加入集群的时候,介绍人(节点)会推荐集群里面所有的节点主动来和新加入的节点建立联系。具体地,本实施例中,Erlang集群包括实时动态表,实时动态表包括Erlang服务节点名和端口、客户端IP地址和端口、客户端识别信息、建立长连接的初始时间,实时动态表实时更新且在整个Erlang集群中被所有节点共享。
服务端身份认证***2被配置成:接收到客户端1发送的认证HTTP请求后,验证凭据,如果凭据合法,则生成一个令牌Token并通过HTTP请求把令牌Token发送至Erlang集群3,如果凭据不合法,则返回认证失败的信息;响应客户端的HTTP请求,将令牌Token和长连接数最少的服务器节点的公网IP地址发送至客户端1。
Erlang集群3被配置成:响应服务端身份认证***2的请求,并根据集群的负载情况将长连接数最少的服务器节点的公网IP地址返回给服务端身份认证***2。
采用实施例一中的***实现的支持海量长连接的软负载均衡方法可以参考下述具体方法实施例。
实施例二
实施例二为一种支持海量长连接的软负载均衡方法,该包括以下步骤:
(1)、客户端使用凭据向服务端身份认证***发起认证HTTP请求。
(2)、服务端身份认证***验证凭据,如果凭据合法,则生成一个令牌Token并通过HTTP请求把令牌Token发送至Erlang集群;如果凭据不合法,则返回认证失败的信息。另外,该步骤中的凭据为设备信息和/或用户信息,设备信息为设备SN号、设备Mac地址、设备二维码或设备串号中的一种或多种,用户信息为用户账户名、账户密码、邮箱或手机号中的一种或多种。另外,令牌Token是身份认证***根据访问信息和凭据,使用算法生成的一串随机字符串数据。Erlang集群是指采用Erlang编程语言开发的支持长连接服务的服务器的集群,Erlang语言开发的应用或服务,天然就支持集群,这是Erlang语言的本质所决定的。Erlang的集群在默认情况下是全联通的,也就是当一个节点加入集群的时候,介绍人(节点)会推荐集群里面所有的节点主动来和新加入的节点建立联系。具体地,本实施例中,Erlang集群包括实时动态表,实时动态表包括Erlang服务节点名和端口、客户端IP地址和端口、客户端识别信息、建立长连接的初始时间,实时动态表实时更新且在整个Erlang集群中被所有节点共享,即每一个Erlang节点都能访问到实时动态表的信息。。
(3)、Erlang集群响应服务端身份认证***的请求,并根据集群的负载情况将长连接数最少的服务器节点的公网IP地址返回给服务端身份认证***。
(4)、服务端身份认证***响应客户端的HTTP请求,将令牌Token和长连接数最少的服务器节点的公网IP地址发送至客户端。步骤(1)和步骤(2)结合起来就是一个完整的HTTP请求和响应的过程。需要说明,请求的类型可以是同步请求,也可以是异步请求,如果为异步请求,相则应的响应为异步响应。
(5)、客户端接收到令牌Token和服务器节点的公网IP地址信息后,使用令牌向公网IP地址对应的节点发起建立长连接的请求,该节点验证令牌,如果令牌合法,则节点根据双方预先约定的长连接协议与客户端建立长连接。其中,凭据为设备信息和/或用户信息,设备信息为设备SN号、设备Mac地址、设备二维码或设备串号中的一种或多种,用户信息为用户账户名、账户密码、邮箱或手机号中的一种或多种。另外,长连接是指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,长连接协议为MQTT协议、XMPP协议、WebSocket协议、AMQP协议、STOMP协议、OpenWire协议、JMS协议或NMS协议。
从以上实施例可以看出,本发明实施例无需采用负载均衡器(例如F5)和软负载均衡服务器(例如Nginx服务器、HAProxy服务器等),因此降低了***的硬件成本,降低了整个***的复杂度,提升了整个***的可靠性;而且,本发明中的长连接在Erlang集群节点间得到了均匀分布,因此***可以很容易的进行横向扩展,进一步可以方便的实现海量长连接。
需要说明,上述描述的实施例是本发明的一部分实施例,而不是全部实施例,也不是对本发明的限制。基于本发明的实施例,本领域普通技术人员在不付出创造性劳动前提下所获得的所有其他实施例,都属于本发明的保护范围。