服务器端的算法
以下是dlbDNS中的算法。如果一个服务器的请求是DNAME类型,那么,服务器就会进行如下的一些动作:
1、确定在这个服务中参与的服务器的集合。
2、通过和每个服务器建立一个同步的非连接性的连接获取每个参与的服务器的排名值。
3、根据返回的排名值,确定最佳服务器。
4、处理错误信息。
排名服务算法
一个排名服务运行在参与到动态负载平衡的每个服务器上,以下是算法:
1、从dlbDNS接收排名请求。
2、每一分钟都对主机的排名进行计算,而不是在得到请求的时候才进行计算。因为回应时非常重要的一个因素。
3、确认主机排名是每分钟都进行更新的。
4、处理错误情况,比如说dlbDNS在未等待主机回应的情况下关闭了UDP接口。
(如图)
模型
如图所示的是dlbDNS的功能。由C所标明的路线指出了通过排名服务更新服务器排名的过程。由B所标明的路线指出了通过dlbDNS和排名服务所确定最佳服务器的通讯。由A所标明的路径指出了用户请求的路径。在图中,因为HOST 1比另外两台服务器有更好的一个排名,所以请求被定向到了HOST 1上。
dlbDNS的好处
这个就不需要多说了,除了可以充分地利用资源之外,因为我们通过DNS来实现负载平衡,这样FTP和TELNET之类的程序也可以使用dlbDNS。
发展方向
目前,在通过BIND的代码中,gethostbyname系统将不能正常工作,这个问题可以通过一个主机和IP地址的列表的配置文件来解决。当然,我们希望由一个更好的解决方法。
第二,排名算法还不完善,算法还不能考虑处理器的数目,对CPU和内存的考虑会使得算法更加有效。
第三,在Linux服务器上,排名算法使用的是/proc文件结构中的文件,这样只能说是动态平衡配置,应该还需要一个更加强大的设计。
备注:dlbDNS的源代码可以从http://www.cs.twsu.edu/~hcvillia/acads/project/获得