在设计架构时,一个不得不考虑的问题就是架构的伸缩性。随着越来越多的系统可以在网络上提供服务,伸缩性变得越来越重要。在网络的世界里,可能有几百万人访问你的站点,也可能寥寥无几,甚至可能在几分钟之内从一种状态变为另一种状态。为了避免资源短缺与资源浪费的现象,架构的伸缩性显得尤为重要。
首先,系统的架构必须适应环境,利用该架构创建的工件存在于该环境中。这个环境包括使用该架构的应用程序,使用该架构的程序员,以及由此受到的系统约束。在开始创建架构之时,需要能从很小的系统开始,随着用户的增长增强处理能力,随着用户的下降降低处理能力,既避免了资源的浪费,又保证了系统运行的可行性,这就是伸缩性的魅力所在。总体架构是一个分布式系统。
这样的构架背景为我们确立了构架的首要目标。由伸缩性的需求可得,系统应该是分布的,并发的,但我们需要为游戏开发者提供简单得多的游戏模型。Darkstar项目要求的一般变成模式是反应式的,在这种模式中,的游戏的服务器端写成了事件监听器,用以监听生成的事件,当检测到事件时,游戏服务器就生成一项任务并与最初生成事件的客户端或其他客户端进行通信。这种编程模型非常适合游戏和虚拟世界,而这种环境与经典企业环境恰恰相反,经典企业环境的服务器将保护客户端的绝大部分信息,客户端内存不多,是服务器的显示设备,真正的工作在服务器上完成。
延迟是敌人。在企业环境中,目标是管理业务,在处理中有一点延迟是可以接受的;然而在MMO和虚拟世界的环境中,目标是开心,而延迟是开心的敌人。面对数量巨大的用户,实现伸缩性的办法大致可以分为两类:第一类是基于地理位置实现的,游戏设计成包含一组不同的区域,它可能是虚拟世界的一个岛或一个房间,一个小镇或山谷,每个区域运行在一个服务器上。游戏设计让每个区域无关,这样服务器不会由于太多用户进入该区域而拥阻。第二种方法叫做分区。一个分区是该区域的一份副本,运行在它自己的服务器上,独立于其他分区,代表了游戏中相同的部分,允许成倍的玩家进入该区域。但缺点在于不同分区的玩家,不能进行交互。
“分而治之”是设计所有大型计算机系统的基本方法。每种服务器都可以由一个接口来描述,这让使用该服务的程序不会受到底层实现变更的影响,同时也支持这些实现可以独立完成。对一个实现的完成并不影响另一个实现的完成。
架构的伸缩性对虚拟世界拥有重要的影响,在设计架构时,要充分注意到这一点,避免资源的浪费与服务器的拥塞。