每周回顾:每逢节日必加班

快到节假日的时候,总有那么一群人在苦逼加班中度过。运气好点的,节假日也可以顺顺利利地过了,运气差点的,节假日也别想过的安生。当很多人国庆节在外面旅游晒照的时候,我等却在担惊受怕地听候差遣。也真是奇了怪了,现在这个节日还真多,互联网行业莫名其妙弄出个双十一,后面又出来个双十二。每次遇到这两个互联网购物狂欢节的时候。你或是在电脑旁边守候到零点疯狂抢购,抱怨网络太卡,网银无法支付的时候,咒骂这该死的某宝或某东的时候,我却想到的是这些服务后台那些苦逼的程序猿和运维的同学,目不转睛地盯着屏幕,心中在默默祈祷不要出问题。哎,又该是一个不眠之夜了。

我们做游戏后台的也好不到那里去,节日总是要开发点线上活动,拉拉收益的,何况是这些购物狂欢节呢。这不,国庆刚休假结束,有些同学还没缓过神来,又是一大波需求来袭,需要在短短两周内开发完成,说是什么周年庆。好吧,看来下面几个月都别想有好日子过了,加班是逃不掉的了。周年庆、双十一、双十二、圣诞节、元旦、春节。My Fucking God,怎么这么多节日啊!

大家节日欢乐无限,我等码农只能唏嘘不已,默默跪拜图灵大神。

###【工作篇】

降低外挂对正常玩家的影响

外挂是网游永远的痛,只要有利益就有工作室外挂的存在,它们在游戏中创建大量的角色,收集游戏中产生的可交易的货币,然后以RMB的形式低价转卖给其他玩家。而这些工作室,往往可以利用脱机外挂同时登陆大量的用户,从而对服务器造成较大的性能问题,影响正常玩家的游戏体验,这种有点类似拒绝服务攻击(DDOS)的感觉。

而脱机外挂存在的根本原因是:游戏客户端和游戏服务没有一条安全的通信链路,脱机外挂的制作者可以对客户端进行反汇编、动态调试,找到通信的KEY或者KEY的生成方式,轻易地实现了一个不需要游戏客户端就可以直接和游戏服务器连接的程序,这就是脱机外挂。

有道是,“道高一尺,魔高一丈”,客户端可执行文件加壳不就可以防止被反汇编了吗,不,破解者有脱壳工具,只要你代码能执行,就有办法利用一些工具如OllyDGB进行动态追踪,追踪可执行文件的执行机器指令,然后分析出KEY的位置或者生成KEY的算法。总之,无论你用到什么算法,什么工具,只要的你的执行文件可以执行,破解者都可以攻破,只是时间长与短罢了。

于是我们提出了一种KEY的生成算法,根据用户ID和一个种子利用十几种算法生成KEY,那么对于外挂破解者来说,需要攻破我们的KEY就必须动态调试十几种算法才可以畅通无阻地利用脱机挂访问游戏服务器了。或许,攻破这些算法需要几天时间,那我们不断调整算法,或许可以恶心到破解者。想象总是美好的,而破解者总是有大神存在,事实证明,他们仅用了一天多的时间,就破解了十几种KEY的生成算法,不得不佩服这些大神的调试技能和逆向工程能力,真想把他们招致麾下,知己知彼方才百战不殆。

有人说那你们动态修改指令的编号不就行了吗?同学,你又天真了,几年前就已证实不可行了。这些破解大神通过抓包分析你正常的消息,分分钟就知道正确的消息编号了。

对于这些工作室外挂,想要彻底消灭,就需要让它无利可图,但这又是矛盾的,为了吸引用户,必须给用户免费的利益。一旦砍掉这些利益,那正常用户是要流失的了。

防止脱机外挂,一方面加强客户端安全不被破解;一方面也需要服务器做下处理,比如按照同IP用户的数量超过指定的数量,对其做一些处理,比如限制登录、外挂的消息处理优先级低于正常用户等,当然脱机外挂跑在不同的虚拟机里面,那就真没辙了。

外挂,永远的痛。无法根除,特别是以道具收费模式的MMORPG游戏来说,这是一场厂商与工作室的较量,往往以游戏厂商失败而告终。

PS. 没怎么玩过Windows下的开发,更别提反汇编、动态追踪等逆向工程了。我觉得要加强客户端的安全,首先自己要先成为破解大神才可以。

高可用的数据库集群解决方案

写了一篇《高可用的数据库集群解决方案》,总结了一下自己的理解和一些现成的数据库集群解决方案。有它用,暂时不贴出来了,只说下大概内容:

该文试图以一篇完整的理论加实践性的文字来介绍如何在优秀的开源操作系统Linux下创建低成本、高性能、高可用的数据服务集群系统。理论部分主要介绍负载均衡集群、高可用集群和可扩展数据库集群的基础知识和常见用法。这是所有搭建高可用数据库集群的基础,数据库产品名目众多,万变不离其宗,知道是什么,如何去做的知识比熟练掌握某一个数据库产品显得更重要。实践部分主要介绍两种比较有代表性的数据,关系型的MySQL和NoSQL的MongoDB,搭建一个高性能、高可用、高扩展性的数据库集群,以满足比较高QPS(每秒查询次数)和扩展需求。

功能开发、BUG修改

4-5W行的功能代码,要在里面做优化,这是件非常痛苦的事情。好在有位测试同学这个功能更玩的比较溜,搭建过N次这个功能的服务,在他的帮助下,吭哧吭哧总算是码完了策划需要的修改。尚未开动测试,估计下周加班修BUG是逃不掉了,据说搭一个测试环境都要折腾个几个小时。

离职的同学留下来的坑,经过一年之久的BUG,今日竟然才浮出水面,代码质量堪忧啊。

【总结篇】

  • 国庆长假正常的第一周,为了迎接周年庆,茫茫多的需求需要开发,本周几乎都在忙工作。

  • 作为一个技术小领导,需要抽一些时间多给大家分享,技术氛围很重要。实在是精力有限,该坚持的却没坚持下来,再加上团队不稳定,离职率比较高,这个心劲给耗没了。

  • 一晃乐宝宝都六个月了,爸爸却一直把大把的时间奉献给了公司。不过小家伙很给力,晚上都不怎么哭闹,六个月都可以爬了。

David++