第55章 如果企鹅要做

重生不当牛马,我定规则 作者:佚名

      张老师继续画:“加连接池。提前建好一批连接,谁要用就借一个,用完还回去。这样不会每次请求都新建连接。做到这一步,能扛到三千人。”他又標了一个数字。
    “给常用查询栏位加索引,能到四千。”往上又標了一个。
    叶明问:“那文本文件那块呢?还有优化的空间吗?”
    张老师看了他一眼:“你那个文本文件,现在多大?”
    “八百条事件。上线先用五百条,后面內容团队会继续写,很快能到三千条。”
    张老师点头:“三千条事件,纯文本几百kb。就算以后到一万条,也就一两mb。你那台伺服器內存至少1g,这点量完全不是问题。”
    叶明追问:“那除了把文件加载进內存,还有別的优化可以做吗?”
    张老师想了想:“事件多了以后,你得考虑『热点』的问题。不是所有事件被触发的频率都一样。
    有的事件可能一天触发几万次,有的可能几天才触发一次。
    那些高频事件,你可以把计算结果缓存起来,不用每次都重新算一遍。”
    他在白板上又画了一个框,標上“计算结果缓存”:“这叫『热点事件结果缓存』。跟你那个文本文件加载,一个解决的是io问题,一个解决的是cpu计算问题。两个层面的东西。”
    叶明把这些都记下来:“那怎么判断哪些是热点事件?”
    张老师笑了:“上线跑起来就知道了。看日誌,哪些事件触发次数最多,哪些事件让伺服器cpu飆得最高。数据会告诉你答案。做技术的人,不能靠猜,得靠数据说话。”
    叶明点头,又问:“那排行榜呢?排行榜的压力怎么解决?”
    张老师继续画:“把排行榜做成静態页面,五分钟更新一次。用户访问的时候直接读静態文件,不用查资料库。这样排行榜的访问压力就没了。”
    叶明追问:“五分钟会不会太慢?用户看到的数据不是实时的。”
    张老师看了他一眼:“你这个游戏,需要实时排名吗?
    (请记住 101 看书网解无聊,????????????.??????超靠谱 网站,观看最快的章节更新)
    玩家在乎的是自己排在第几名,还是在乎『我比昨天进步了』?
    想清楚这个问题,你就知道五分钟够不够用了。
    很多时候,用户要的不是绝对实时,是『看起来实时』。”
    叶明愣了一下,把这句话也记下来。
    叶明又问:“那排行榜的静態页面放在哪里?放在自己伺服器上就行吗?”
    张老师点头:“放你自己伺服器上就行。用户访问的时候直接读静態文件,压力小很多。”
    叶明追问:“那如果流量再大呢?静態页面也扛不住的时候怎么办?”
    张老师笑了,在白板上又画了几个框,连成一张图:“做负载均衡。
    前面加一个分发器,后面掛多台伺服器。
    用户的请求先到分发器,分发器决定交给哪台伺服器处理。
    这样每台伺服器的压力都变小了,整体能扛的流量就上去了。”
    叶明盯著白板看了一会儿:“那用户的数据怎么办?比如用户登录了,下次请求被分到另一台伺服器,不就丟了?”
    张老师笑了:“问到点子上了。所以得把用户会话单独拎出来,放redis里。
    redis是一种內存资料库,读写速度极快。
    所有伺服器共享一份会话数据,用户不管被分到哪台机器,都能读到自己的登录状態。”
    叶明追问:“redis也是存在內存里的?那和mysql有什么区別?”
    张老师在白板上又画了一个框,標上redis:“mysql是硬碟资料库,数据存在硬碟上,读写慢,但容量大、持久化。
    redis是內存资料库,数据存在內存里,读写快几十倍,但容量小、断电就丟。
    所以各司其职。mysql存持久化数据,redis存临时会话和缓存。”
    叶明把这些都记下来,又问:“那事件库呢?多台伺服器共享,每台都得有一份?”
    张老师点头:“对。事件库是文本文件,每台伺服器都得放一份。更新的时候要同步,麻烦一点,但也不是不能做。”
    叶明追问:“那资料库呢?多台伺服器共享一个mysql?”
    张老师摇头:“mysql扛不住的时候,也得拆。做读写分离,主库负责写,从库负责读。
    主库的数据实时同步到从库,写的压力集中在一台机器上,读的压力分散到多台机器上。
    这样读的流量再大也能扛住。”
    叶明把这些都记下来,又问:“那主库和从库是分不同的伺服器吗?”
    张老师点头:“当然。主库一台,从库可以掛好几台。主库掛了,从库还能顶上。这叫高可用。”
    叶明把这些都记下来,又问:“那cdn呢?和负载均衡有什么区別?”
    张老师笑了:“cdn解决的是带宽和延迟问题。你把静態文件丟给cdn服务商,网宿、蓝汛这些公司,他们帮你分发到全国各地的节点上。
    用户访问的时候,就近取数据,不用绕到你那台单核至强上。
    负载均衡解决的是伺服器压力问题,cdn解决的是网络传输问题。两个层面的东西。”
    他顿了顿,又补了一句:“不过这些都是以后的事。你现在,先把那台单核至强跑明白。”
    叶明把这些都记下来,又问:“张老师,那按照这个思路,我这台伺服器到底能扛多少?”
    张老师想了想:“连接池加上,索引加上,热点缓存加上,排行榜静態化,你这台单核至强,同时在线扛到八千到一万,问题不大。加上cdn,能到两万到三万。再往上,就得做负载均衡、读写分离了。纯文字游戏,同时在线两万到三万,换算成日活,大概四十万以上。”
    叶明把这些数字都记在本子上。
    张老师讲完,放下笔,转过身看著他:“你现在得想一个问题。”
    叶明抬头。
    “你这个游戏,如果企鹅要做,你怎么办?”
    叶明沉默了几秒。
    “张老师,这个问题我一直在想。”他顿了顿,“现在有些想法,但还不成熟。等我再琢磨琢磨,到时候再来找您请教。”
    张老师看了他一眼,点了点头:“行,那你想清楚了再来。”
    他拍了拍叶明的肩膀:“回去把这些消化一下。有问题隨时来。”
    叶明把笔记本和u盘收好,站起来:“张老师,谢谢您。”
    张老师送他到门口:“你身上有这个劲,別丟了。”
    叶明点头,走出办公室。阳光从走廊尽头的窗户照进来,落在地板上。
    他走得很慢,脑子里还在转张老师最后那句话。
    如果企鹅要做,你怎么办?
    他又想起刚才屏幕上那条事件,想起那天晚上。
    他得为那条事件做一个隱藏成就。
    不是为了玩家,是为了她。
    他不知道的是,此刻许薇还坐在计协机房里,有些心不在焉地写著事件,偶尔瞥一眼他的空位。

- 肉肉屋 https://www.po18cg.com