qq游戏传奇霸业白屏复古传奇设计师是什么东西

从QQ游戏分布式架构设计看“分而治之”等原则
IT168网站原创
 作者: 胡协刚 编辑:
&&& 【IT168 技术文章】&&& 腾讯QQGame游戏同时在线的玩家数量极其庞大,为了方便组织玩家组队游戏,腾讯设置了大量游戏室(房间),玩家可以选择进入属意的房间,并在此房间内找到可以加入的游戏组(牌桌、棋盘等)。玩家选择进入某个房间时,必须确保此房间当前人数未满(通常上限为400),否则进入步骤将会失败。玩家在登入QQGame后,会从服务器端获取某类游戏下所有房间的当前人数数据,玩家可以据此找到未满的房间以便进入。&&& 如上篇所述的原因,如果待进入房间的人数接近上限时,玩家的进入请求可能失败,这是因为服务器在收到此进入请求之前可能有若干其他玩家也请求进入这个房间,造成房间人数达到上限。这一问题是无法通过上篇所述调整协作分配的方法来解决的,这是因为:要进入的房间是由玩家来指定的,无法在服务器端完成此项工作,游戏软件必须将服务器端所维护的所有房间人数数据复制到玩家的客户端,并让玩家在界面上看到这些数据,以便进行选择。这样,上篇所述的客户端与服务器端协作分配原则(谁掌握数据,谁干活),还得加上一些限制条件,并让位于另一个所谓&用户驱动客户端行为&原则--如果某个功能的执行是由用户来推动的,则这个功能的实现应当放在客户端(或者至少由客户端来控制整个协作),并且客户端必须持有此功能所依赖相关数据的副本,这个副本应当尽量与服务器端的源保持同步。&&&& (图B)&进入房间&失败示意&&& QQGame还存在一个明显的不足,就是:玩家如果在游戏一段时间后,离开了某个房间,并且想进入其它房间,这时QQGame并不会刷新所有房间的当前人数,造成玩家据此信息所选的待进入房间往往实际上人数已满,使得进入步骤失败。笔者碰到的最糟情形是重复3、4次以上,才最后成功进入另外某个房间。此缺陷其实质是完全放弃了客户端数据副本与服务器端的源保持同步的原则。&&& 实际上,QQGame的开发者有非常充分的理由来为此缺陷的存在进行辩护:QQGame同时在线的用户数超过百万甚至千万数量级,如果所有客户端要实时(所谓实时,就玩家的体验容忍度而言,可以定为不超过1秒的延迟)地从服务器端获取更新数据,那么最终只有一个结果--系统彻底崩溃。设想一下每秒千万次请求的吞吐量,以普通服务器每秒上百个请求的处理能力(这个数据是根据服务请求处理过程可能涉及到I/O操作来估值的,纯内存处理的情形可能提高若干数量级),需要成千上万台服务器组成集群方能承受(高可用性挑战);而随着玩家不断地进入或退出游戏房间,相关数据一直在快速变化中,正向来看,假设有一台中心服务器持有这些数据,那么需要让成千上万台服务器与中心保持这些动态数据的实时同步(数据一致性挑战);相对应的,逆向来看,玩家进入房间等请求被分配给不同的服务器来处理,一旦玩家进入房间成功则对应服务器内的相关数据被改变,那么假定中的中心服务器就需要实时汇集所有工作服务器内发生的数据变动(数据完整性挑战)。同时处理上万台服务器的数据同步,这需要什么样的中心服务器呢?即使有这样的超级服务器存在,那么Internet网较大的(而且不稳定的)网络通讯延迟又怎么解决呢?&&& 对于软件缺陷而言,可以在不同的层面来加以解决--从设计、到需求、甚至是直接在业务层面来解决(例如,08年北京奥运会网上购票系统,为了解决订票请求拥塞而至系统崩溃的缺陷,最后放弃了原先&先到先得&的购票业务流程,改为:用户先向系统发订票申请,系统只是记录下来而不进行处理,而到了空闲时,在后台随机抽选幸运者,为他们一一完成订票业务)。当然解决方案所处的层面越高,可能就越让人不满意。就上述进入房间可能遭遇失败的缺陷而言,最简便的解决方案就是:在需求层面调整系统的操作方式,即增加一个类似上篇所述&自动快速加入游戏&的功能--&自动进入房间&功能。系统在服务器端为玩家找到一个人数较多又未满的房间,并尝试进入(注意,软件需求是由用户的操作目标所驱动的,玩家在此的目标就是尽快加入一个满意的游戏组,因此由系统来替代玩家选择目标房间同样符合相关目标)。而为了方便玩家手工选择要进入的房间,则应当增加一个&刷新当前各房间人数&的功能。另外,还可以调整房间的组织模式,例如以地域为单位来划分房间,像深圳(长城宽带)区房间1、四川(电信)房间3、北美区房间1等,在深圳上网的玩家将被系统引导而优先进入深圳区的房间。&&& 不管怎样,解决软件缺陷的王道还是在设计层面。要解决上述缺陷,架构设计师就必须同时面对高可用、数据一致性、完整性等方面的严峻挑战。&&& 在思考相关解决方案时,我们将应用若干与高性能服务器集群架构设计相关的一些重要原则。首先是&分而治之&原则,即将大量客户端发出的服务请求进行适当的划分(例如,所有从深圳长城宽带上网的玩家所发出的服务请求分为一组),分别分配给不同的服务器(例如,将前述服务请求分组分配给放置于深圳数据中心的服务器)来加以处理。对于QQGame千万级的并发服务请求数而言,采用Scale Up向上扩展,即升级单个服务器处理能力的方式基本上不予考虑(没有常规的主机能处理每秒上千万的请求)。唯一可行的,只有Scale Out向外扩展,即利用大量服务器集群做负载均衡的方式,这实质上就是&分而治之&原则的具体应用。&&&& (图四)&分而治之&下的QQGame游戏服务集群部署&&& 然而,要应用&分而治之&原则进行Scale Out向外扩展,还依赖于其它的条件。如果各服务器在处理被分配的服务请求时,其行为与其它服务器的行为结果产生交叉(循环)依赖,换句话讲就是共享了某些数据(例如,服务器A处理客户端a发来的进入房间#n请求,而同时,服务器B也在处理客户端b发来的进入房间#n请求,此时服务器A与B的行为存在循环依赖--因为两者要同时访问房间#n的数据,这一共享数据会造成两者间的循环依赖),则各服务器之间必须确保这些共享数据的一致完整性,否则就可能发生逻辑错误(例如,假定房间#n的人数差一个就满了,服务器A与B在独自处理的情况下,将同时让客户端a与b的进入请求成功,于是房间#n的最终人数将超出上限)。而要做到此点,各服务器的处理进程之间就必须保持同步(实际上就是排队按先后顺序访问共享数据,例如服务器A先处理,让客户端a进入房间成功,此时房间#n满员;此后服务器B更新到房间#n满的数据,于是客户端b的进入请求处理结果失败),这样,原来将海量请求做负载均衡的意图就彻底失败了,多台服务器的并发处理能力在此与一台实质上并没有区别。由此,我们导出了另外一个所谓&处理自治&(或称&行为独立&)的原则,即所有参与负载均衡的服务器,其处理对应服务请求的行为应当不循环依赖于其它服务器,换句话讲,就是各服务器的行为相对独立(注意,在这里,非循环依赖是允许的,下文中我们来分析为什么)。&&& 由此可见,简单的负载均衡策略对于QQGame而言是解决不了问题的。我们必须找到一种途径,使得在使用大量服务器进行&分而治之&的同时,同时有确保各个服务器&处理自治&。此间的关键就在于&分而治之&的&分&字上。前述将某个地域网段内上网的玩家所发出的服务请求分到一组,并分配给同一服务器的做法,其目的不外乎是尽可能地减少网络通讯延迟带来的负面影响。但它不能满足&处理自治&的要求,为了确保自治,应当让同一台服务器所处理的请求本身是&自治&(准确的说法是&自闭包&Closure)的。同一台服务器所处理的所有请求组成一个服务请求集合,这个集合如果与其它任何与其无交集的(请求)集合(包含此集合的父集合除外)不循环依赖,则此服务请求集合是&自闭包&的,而处理此请求集合的服务器,其&行为独立&。我们可以将针对同一房间的进入请求划分到同一服务请求分组,这些请求相互之间当然是存在循环依赖的,但与其它分组中的请求却不存在循环依赖(本房间内人数的变化不会影响到其它房间),而将它们都分配给同一服务器(不妨命名为&房间管理服务器&,简称&房间服务器&)后,那个服务器将是&处理自治&的。&&&& (图五)满足&处理自治&条件的QQ游戏区域&房间管理&服务部署&&& 那么接下来要解决的问题,就是玩家所关注的某个游戏区内,所有房间当前人数数据的实时更新问题。其解决途径与上述的方法类似,我们还是将所有获取同一区内房间数据的服务请求归为一组,并交给同一服务器处理。与上文所述场景不同的是,这个服务器需要实时汇集本区内所有房间服务器的房间人数数据。我们可以让每个房间服务器一旦发生数据变更时,就向此服务器(不妨命名为&游戏区域管理服务器&,简称&区服务器&)推送一个变更数据记录,而推送的数据只需包含房间Id和所有进入的玩家Id(房间服务器还包含其它细节数据,例如牌桌占位数据)便可。&&& 另外,由于一个区内的玩家数可能是上十万数量级,一个服务器根本承担不了此种负荷,那么怎么解决这一矛盾呢?如果深入分析,我们会发现,更新区内房间数据的请求是一种数据只读类请求,它不会对服务器状态造成变更影响,因此这些请求相互间不存在依赖关系;这样,我们可以将它们再任意划分为更小的分组,而同时这些分组仍然保持&自闭包&特性,然后分配给不同的区服务器。多台区服务器来负责同一区的数据更新请求,负载瓶颈被解决。当然,此前,还需将这些区服务器分为1台主区服务器和n台从属区服务器;主区服务器负责汇集本区内所有房间服务器的房间人数数据,从属区服务器则从主区服务器实时同步区房间数据副本。更好的做法,则是如『图五』所示,由房间服务器来充当从属区服务器的角色,玩家进入某个房间后,在玩家进入另外一个房间之前,其客户端都将从此房间对应的房间服务器来更新区内房间数据。要注意的是,图中房间服务器的数据更新利用了所谓的&分布式对象缓存服务&。&&& 玩家进入某个房间后,还要加入某个游戏组才能玩游戏。上篇所述的方案,是让第一个加入某个牌桌的用户,其主机自动充当本牌桌的游戏服务器;而其它玩家要加入此牌桌,其加入请求应当发往第一个加入的用户主机;此后开始游戏,其对弈过程将由第一个加入用户的主机来主导执行。&&& 那么此途径是否同样也符合上述的前两个设计原则呢?游戏在执行的过程中,根据输赢结果,玩家要加分或减分,同时还要记录胜负场数。这些数据必须被持久化(比如在数据库中保存下来),因此游戏服务器(『图六』中的设计,是由4个部署于QQ客户端的&升级&游戏前台逻辑执行服务,加上1个&升级&游戏后台逻辑执行服务,共同组成一个牌桌的&升级&游戏服务)在处理相关游戏执行请求时,将依赖于玩家游戏账户数据服务(『图六』中的所谓&QQGame会话服务&);不过这种依赖是非循环的,即玩家游戏账户数据服务器的行为反过来并不依赖于游戏服务器。上文中曾提到,&处理自治&原则中非循环依赖是允许的。这里游戏服务器在处理游戏收盘请求时,要调用玩家游戏账户数据服务器来更新相关数据;因为不同玩家的游戏账户数据是相互独立的,此游戏服务器在调用游戏账户数据服务器时,逻辑上不受其它游戏服务器调用游戏账户数据服务器的影响,不存在同步等待问题;所以,游戏服务器在此能够达成负载均衡的意图。&&&& (图六) 存在&非循环依赖&的QQ游戏客户端P2P服务与交互逻辑部署&&& 不过,在上述场景中,虽然不存在同步依赖,但是性能依赖还是存在的,游戏账户数据服务器的处理性能不够时,会造成游戏服务器长时间等待。为此,我们可以应用分布式数据库表水平分割的技术,将QQ玩家用户以其登记的行政区来加以分组,并部署于对应区域的数据库中(例如,深圳的玩家数据都在深圳的游戏账户数据库中)。&&&& (图七)满足&自闭包&条件的QQ分布式数据库(集群)部署&&& 实际上,我们由此还可以推论出一个数据库表水平分割的原则--任何数据库表水平分割的方式,必须确保同一数据库实例中的数据记录是&自闭包&的,即不同数据库实例中的数据记录相互间不存在循环依赖。&&& 总之,初步满足QQGame之苛刻性能要求的分布式架构现在已经是初具雏形了,但仍然有很多涉及性能方面的细节问题有待解决。例如,Internet网络通讯延迟的问题、服务器之间协作产生的性能瓶颈问题等等。笔者将在下篇中继续深入探讨这些话题。&
大学生分期购物销量榜
已有条评论
IT168企业级
正在努力加载文档,请稍等…[推广]逆战恶搞穿越合集:设计师你太调皮了
角色等级达到100级,在僵尸猎场中达到了20级天赋的你,认为自己已经真正了解《逆战》了吗?如果你对此持有任何一丝的怀疑或者不服气,那就不妨慢慢看过来,看看《逆战》里,究竟有哪些一直被你忽略的“亮点”吧――(当然,在开始这样一段极为特殊的《逆战》穿越之旅前,不得不先提醒一句:《逆战》的设计师们实在是太调皮,所以,吐槽星人们,请睁大你的眼睛,以及足够的吐槽能量吧!)中国味儿十足的年兽关卡众所周知,《逆战》是一款腾讯自研游戏,作为地地道道的国产游戏,《逆战》固然因为题材、玩法的需要,以及FPS游戏所固有的特性,而在地图场景的设计上不可避免地具备了一些较为国际化的元素(例如各场景中的英文标识,以及各种异域风情的地图场景等等),不过,相比起海外引进作品来说,游戏里的中国元素仍然是不少的。远的不说,仅仅是不久前随着春节活动诞生的僵尸猎场特殊关卡“年兽关”,以及僵尸猎场中早已存在的“中国僵尸”等内容,就已经足以说明一切。不过,真正的中国本土元素,可不是设计几个中国风格的关卡就能代表的,就如同好莱坞电影中的中国城市街头,假如没有了“办证”这样醒目的字眼,谁又知道那不是在某个唐人街取景的呢?炼油厂-工地标语于是,上图中的工地标语,就是更好的佐证。显然,这才是现实世界里的中国嘛。“奉献优质工程,构建和谐工地”,在房价飞涨,大江南北遍布楼盘工地的这年月实在是让人太熟悉了。不过,如果你认为一切仅仅是这样而已,那可就大错特错了!不信?看看这里――标语――“等我做好了功课再去玩儿逆战”浓郁的上世纪七八十年代宣传画风格,却配以如此恶搞的广告语。如果这个还嫌不够,那么,再看看这里――标语――“看我爆头一击”同样熟悉的怀旧风格,假如没有下方的文字,相信熟悉那个年代宣传画风格的人一定能够读懂,这大概是两位社会主义未来接班人在心中默念口号,在憧憬着自己长大后如何与帝国主义豺狼虎豹作斗争吧……(不熟悉这类风格的90后,不妨借此机会补补课,了解一下曾经的历史,也好知道如今的幸福生活是来得多么不容易,作为社会主义接班人的自己是有多么的责任重大)以上恶搞,都出自经典地图“工业园”,只是不知在“工业园”地图中战斗过无数次的你,是否留意到了它们的存在?看过了怀旧经典风格,接下来,也该换换口味了――《逆战》查“π”银行vs现实版“渣打银行” 乍一看像是渣打银行,仔细一看,原来是“查π银行”……再来看看下一个――睁大眼睛,真的是星巴克么?唔,熟悉的绿色,熟悉的LOGO,熟悉的味道……不就是星巴克么?喝不起难道还没在路过店门口的时候偷偷闻闻味道……啊不,是看到过人家的招牌么?可是,你真地看清了吗?下面这个,才是正宗的星巴克!正牌星巴克“STARBUCKS”看出差别了么?游戏里你看到的可是Scukbucks,而非Starbucks!当然,这点差别对于中国人来说,就好比“佘设荼”与“余没茶”一样,难免有些傻傻分不清楚了。于是,接下来,是一个你绝对分得清楚的!“俏江西”就像正牌的“俏江南”与江南并无关系一样,这个恶搞版的“俏江西”似乎也和江西扯不上什么关系。不过,接下来倒是有一个与“江南”有些关系的!这就是凭借一曲《江南Style》火遍全球的“鸟叔”――惊现鸟叔不得不说鸟叔实在是火得一塌糊涂,连《逆战》的游戏设计师们都不敢忽略了他。不过,这几年席卷大江南北的可不止有鸟叔,还有……这个!温馨提示――“流感凶猛”禽流感的确凶猛,所以,假如身在疫区,恰逢流感发作,还是谨遵专家的嘱咐,远离活鸡活鸭为好。不过,活鸡活鸭固然是危险因素,下面这只小鸭子,却绝对是人见人爱了――大黄鸭-迷你版也许因为授权的原因,《逆战》里的大黄鸭较之原版仍然有些区别,不过,这一举动,大概也可以看作是游戏设计师向弗洛伦泰因?霍夫曼先生的作品致敬了。不过,既然是致敬,自然不能只有一个,前面的这只看上去实在是有些娇小了,所以,这里还有放大版――大黄鸭-放大版嗯,似乎够大了,不过比起原版来,似乎气势上还略有不足呢……但是别担心,游戏设计师们岂能犯“不知道原版大黄鸭到底有多大所以弄错了”的这种低级错误?所以,还有这个――大黄鸭-终极版没错,是的!《逆战》的游戏设计师们永远都是这样“充(Sang)满(Xin)激(Bing)情(Kuang)”!这不禁让人想到了一部同样充满激情的电影――《中国合伙人》。还记得电影里那条件恶劣、外观寒碜的补习班吗?但不知在《逆战》里,你是否注意到了这个――“高考培训班”以及这个――“新梦想英语培训”值得一提的是,上图中的这个“新梦想英语培训”可是《逆战》里的知名品牌,它可是存在于多张地图中的,你是否都留意到了?什么?你忽略了?嗯……好吧,的确,因为大部分情况下,它们都太小、太不引人注意了。可是下图中的这位,就实在是不应该被忽略了――看到亮点了吗?什么?没看清?你怀疑自己的眼睛了?那好吧,上正面高清无码大图――亮瞎眼的金馆长这,这……人民群众喜闻乐见的金馆长,这一定是走错片场了!此时此刻,大概只有下面这样的姿势才能表达内心激(Wu)动(Li)万(Tu)分(Cao)的情绪了吧――此时此刻的心情――败给你了+五体投地毫无悬念的五体投地啊!《逆战》的游戏设计师们,真是败给你们了……
快速便捷入口开1.76复古传奇到底需要多少钱?
  1,游戏的版本,现在无数的网络版,想是要找到一个你喜欢的版本很容易(这是我第一次从论坛上下载的,感觉很好。)。所有在这个问题,我建议的第一个版本,开放的服务去网上找免费版本,不要被一些人说买版(当然也有真的很好的版本,但价格很贵,2000元以下的版本不考虑)。我买了一个所谓的复古版本,它带来了一堆的错误,然后我去网上找了下,发现在线版本,可以发现,所有的钱都白白给别人.
  2,登陆器,继续免费使用,我个人认为,自由的使用也很好。所谓的VIP登陆器配置我没用过,可以阻止——但我认为,从第一或自由开始,熟悉它的。
  3,服务器,这是非常重要的,涉及到你的游戏是平滑的,和现在的服务器租用是压倒性的,你应该选择一个好的!
  4,域名空间,我强烈建议你去淘宝直接购买的域名记录,这是因为房间,如果你想把站点,都需要记录的域名。当然,你也可以租一间单独的网站,但速度可能很难接受,我租一个月100元的空间,日志设备总是提示连接失败,有时没有连接起来,很不稳定。后来买了一个记录的域名,直接建立一个网站的服务器上,保证了速度,而且还节省100元的月租费(在非常高的安全的朋友空间)。不是绝对的空间稳定性,单独租快。我在淘宝上买的70元一个域名,一年。
  5,广告,个人金融资源,推荐了一些方法,QQ游戏论坛(质量,一般效果好),然后是花在广告上的钱(一般1000元以内几乎同时),现在发布站用牛毛,推荐的比较。
  6,广告量力而为!
我的更多文章:
( 19:21:03)( 01:30:13)( 00:48:30)( 00:28:17)( 13:16:28)( 10:05:19)( 10:05:11)( 08:38:09)( 17:39:25)( 17:39:15)
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 qq游戏英雄传奇辅助 的文章

 

随机推荐