架构之美阅读笔记三

  《架构之美》第三章主要讲了伸缩性架构设计 ,利用游戏软件开发作为例子,向我们展示了在设计一些系统架构时,确保系统的伸缩性的重要性。在网络世界里,一个站点可以在几分钟内从其中一种状态变成另一种状态。尤其是将系统连接到网络上,“大型多人在线游戏”(MMO)更是要考虑系统的伸缩性,用户与系统的交互,用户之间的交互,结果是这种系统并行程度非常高,但只有少数的交互是互相依赖的。在线游戏和虚拟世界的兴起,多个用户通过网络在服务器上交互时,由于一个玩家的以外动作而导致服务器的崩溃将影响许多其他玩家。而对于这个不断膨胀的用户和需求变动,伸缩的能力就成为了任何架构的首要需求。

  书中以Darkstar项目作为例子,讲述了它的架构。Darkstar项目由Sun公司实验室一个研究小组承担,它是一堂实践课,说明了不同的需求如何改变构建系统的方式。两种环境中最大的不同要追溯到用户所做的事情的不同,在企业环境中,目标是管理业务,如果总吞吐量得到改进,在处理中有一点延迟是可以接受的。在MMO和虚拟世界的环境中,目标是开心,而延迟是开心的敌人。所以MMO和虚拟世界的技术设施需要围绕着尽可能限定延迟的需求来设计,即便以吞吐量为代价也在所不惜。 

  目前有两种方法实现伸缩性,以应对数量巨大的用户。第一类实质上是基于地理位置来实现的。游戏设计成包含一组不同的区域,每个区域运行在一台服务器上。这些区域是独立的,限定地理区域的大小,这样服务器不会因太多用户进入这个区域而拥塞,这样的区域实现自我限制,当服务器拥塞时,游戏响应会变慢,趣味性下降,玩家会转向更有趣的区域,这是拥塞区域减少,响应时间得到改进。 第二种处理游戏或虚拟世界中用色区域的方法是分区。一个分区是该区域的一份副本,运行在自己的服务器上,独立于其他分区,代表游戏中相同的部分。分区的缺点是它们不允许处于不同分区的玩家彼此之间进行交互。随着游戏和虚拟世界社交的体验的需要,这种分区阻碍了这个目标的实现Darkstar架构就是克服以上缺点,支持随时伸缩,同时又不要求游戏逻辑受到伸缩影响。支持动态响应负载,而不是放在游戏设计中完成。  

  DarkStar是由一组服务组成。每个服务定义为一个小的编程接口。这些接口很像经典操作系统的服务,支持对服务端的访问持久存储、调度并执行任务、与游戏的客户端进行通信。这些服务的程序不会受低层实现变更的影响,因为每个服务由一个接口来描述。当接口不变时,一个服务的变更,不会影响其他服务的实现。这是一个"分治"的过程。另外,将基础设施设计为一组服务,可以将这些服务在不同场景下进行不同的组合,更加灵活,复用性强。一组服务可以组成一个Darkstar栈,Darkstar栈中具体包含哪些服务可以由一个配置文件来设置。DarkStar架构利用一些创新的方法解决了,伸缩性,延迟和通信的要求,这种架构在之后是非常可以借鉴的。

原文地址:https://www.cnblogs.com/hyluckydog/p/6413454.html