总体设计思路
集群是多个服务器同时去做一个事情,相比于单个的服务器,集群可同时处理更多的业务,但是集群的设计上也必须要处理好各个服务器之间的关系,首先要考虑的就是服务器的负载均衡、数据的备份、多个服务器之间的数据的同步的问题,要根据服务器实现的业务来确定服务器采用什么样的同步的方式才能使得同步的效率更高。
在本次的项目中,采用一个负载均衡器,负责根据服务器的当前的负载的情况向客户端分发一个负载相对较小的服务器,然后负载均衡器断开与客户端的连接,客户端拿到服务器的地址后,直接与服务器连接,中间的数据不经过负载均衡器。
这样做的原因,因为本系统是文件传输系统客户端与服务器的交互大多是上传下载,逻辑判断的部分不是主要消耗资源的部分,如果每条消息都经过负载均衡器,所有的客户端的连接都集中在负载均衡器上,这样就丧失了集群的优点。
负载均衡器除了要负责向客户端分发服务器以外,还要处理服务器的数据同步的问题,如果有一台新上线的服务器,新的服务器要先向负载均衡器发送信息同步的请求,这时候,负载均衡器分配一个服务器向新上线的服务器发送同步的数据。
这样每台服务器既需要于客户端进行交互,又需要与其他的服务器进行交互,如果只通过一个端口进行数据的收发,对服务器来说就需要进行的消息来源的判断。这样在服务器端的编程的难度会加大,逻辑也不容易理清,所以,这里我才用一台服务器监听两个端口的数据,一个端口负责与客户端的通信,另一个端口负责与其他的服务器的交互。着这样两个端口的信息的通信并不影响,采用并发的方式的需要也不容易出错。
对于数据同步问题的处理,这个问题我分了两种情况