集群式游戏服务器架构方案设计开发(2)

时间:2009-11-20   来源:   网友评论:0   人气: 1307 作者: 胡章优 吉林大学机械学院


  3:如何保证当系统的瓶颈凸显时候,简单的添加一组服务器,就可以达到分压目的?
  4:系统的灾难部分出现的时候,如何保证系统依然可以完整运行?
第一个问题是如何划分系统中的功能。在软件开发中,我们追求的是每个函数功能尽量简单,易学里面的道理叫做大道至简。软件开发中同样适用,在服务器开发中,同样适用。如何将整个系统中的需求抽象为功能,并如何更好的划分功能,将极大减少系统开发的难度,并能够使得系统的可扩展性非常强。
第二个问题是瓶颈问题。从物理上面来分析,性能在硬盘,内存,CPU是三个决定因素的地方。而从软件的角度就包含了数据库系统,操作系统,服务器软件系统三个方面,更细节方面拿游戏服务器来说,Conn Server 的压力,Logic Server的压力,还是DB Server的压力了。
第三个问题还体现在分组方面。比如当Conn Server出现压力的时候,如何简单的添加一个Conn Server就达到分压目的。当Logic Server出现压力,或者DB Server出现压力。另外就是如果服务器设计以组的方式出现,应该如何管理组以达到分压目的。
第四个问题是灾难恢复。在重要的系统中,由于涉及到的系统、硬件、软件非常多,很容易某个系统出现故障,这个时候,系统应该具有很好的伸缩性,故障出现后,系统必须依然运行顺利。
  所以在设计服务器时候,应该考虑上面的因素。下面我提出在集群服务器开发中的两种可行的方案。
game2.jpg 

[图二:基于功能划分的集群GameServer架构]

game3.jpg 


[图三:组划分的集群服务器架构]

在图二中,系统按照功能方式划分系统,当压力增加的时候,按照功能方式添加某服务器,可以简单的达到分压的目的。在Conn Server中保存所有有效Hall Server的连接,以及当前该Hall Server的当前连接数。代码示意如下:

  1. class THallServer     
  2. {   
  3. public:   
  4.   THallServer();   
  5.   virtual ~THallServer();   
  6.   THallServer(int port);   
  7.   
  8. public:   
  9.   SOCKET _hallServer; //保持同HallServer连接的Socket对象   
  10.   int _maxConn; //该HallServer的最大连接数量   
  11.   int _currentConn; //当前连接数量   
  12.   int GetCurrentConn();   
  13.   char _hallServerAddr[32];   
  14.   int _hallServerPort;   
  15.   
  16. };   


 

  1. class THallServerList     
  2. {   
  3. public:   
  4.   THallServerList();   
  5.   virtual ~THallServerList();   
  6.      
  7. public:   
  8.   list<THallServer *> pHallServerList;   


 

文章评论