自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Jason Pearlman談《Draw Something》后臺(tái)技術(shù)發(fā)展

系統(tǒng)
最初《Draw Something》的后臺(tái)被設(shè)計(jì)為擁有版本控制的簡(jiǎn)單key/value儲(chǔ)存模式。我們將服務(wù)嵌入現(xiàn)有的ruby API(使用merb框架以及thin網(wǎng)絡(luò)服務(wù)器)。我們的最初理念是將之前所創(chuàng)造的所有內(nèi)容用于現(xiàn)有的API中,并為《Draw Something》編寫一些新的key/value內(nèi)容。

來源:http://gamerboom.com/archives/51668

作者:Jason Pearlman

我至今已在OMGPOP工作了將近4年,見證著它從最初的約會(huì)網(wǎng)站轉(zhuǎn)變?yōu)橛螒蚬?,并最終扎根于手機(jī)游戲的整個(gè)發(fā)展過程。而在這期間我們也經(jīng)歷了各種挑戰(zhàn),并嘗試了各種不同的技術(shù)和運(yùn)營計(jì)劃。

我一直覺得我們是個(gè)小型團(tuán)隊(duì),可以利用快速原型,敏捷開發(fā)以及其它最新技術(shù)以獲得優(yōu)勢(shì)。同時(shí),身處于游戲領(lǐng)域我們還需要盡可能地嘗試各種不同的理念,以判斷哪些才真正合適。在這幾年時(shí)間里,我創(chuàng)造了虛擬角色系統(tǒng),文本冒險(xiǎn)游戲引擎,全功能的共享數(shù)據(jù)庫系統(tǒng),基于我們的javascript游戲引擎的多人即時(shí)平臺(tái)游戲,AIM bot系統(tǒng),以及基于我們所創(chuàng)造的bot框架而創(chuàng)造起來的具有各種聊天功能的游戲等。

但是所有這些游戲的后臺(tái)系統(tǒng)卻是由一個(gè)很小的系統(tǒng)團(tuán)隊(duì)所支撐,這個(gè)團(tuán)隊(duì)中只有三名成員,包括Christopher Holt,Manchul Park以及我自己。我們都是白手起家地創(chuàng)造所有內(nèi)容,并始終堅(jiān)信我們能夠有效地創(chuàng)建并靈活調(diào)整游戲的后臺(tái)系統(tǒng)。直到《Draw Something》的出現(xiàn)。

[[68182]]

draw_something(from idownloadblog.com)

回顧之前

早在4年前我們便在自己的網(wǎng)站OMGPOP.com(游戲邦注:后來改為iminlikewithyou.com)上推出了《Draw Something》的雛形,那時(shí)候叫做《Draw My Thing》,是一款即時(shí)繪畫游戲。這是一款有趣的游戲,并且擁有較多的玩家基礎(chǔ)(主要是受益于我們網(wǎng)站當(dāng)時(shí)不錯(cuò)的發(fā)展)。我們同時(shí)也創(chuàng)造了這款游戲的Facebook版本,并吸引了許多忠實(shí)玩家。

去年,我們決定創(chuàng)建這款游戲的手機(jī)版本。但是與此同時(shí),OMGPOP也仍然在不斷探索著最適合自己的發(fā)展方向。我們一直致力于創(chuàng)造出一款真正熱門的游戲。并且與大多數(shù)開發(fā)者一樣,這就意味著我們需要盡可能創(chuàng)造出更多游戲。即使是面對(duì)《Draw Something》也不例外。我們知道這是一款具有潛力的游戲,但是卻沒人能夠預(yù)見它最終的發(fā)展。從技術(shù)角度來看,我們并未區(qū)別對(duì)待這款游戲。所以我們的后臺(tái)團(tuán)隊(duì)始終致力于快速而高效地為這些游戲提供技術(shù)支持。

我們已經(jīng)學(xué)會(huì)了如何簡(jiǎn)單做事。最初《Draw Something》的后臺(tái)被設(shè)計(jì)為擁有版本控制的簡(jiǎn)單key/value儲(chǔ)存模式。我們將服務(wù)嵌入現(xiàn)有的ruby API(使用merb框架以及thin網(wǎng)絡(luò)服務(wù)器)。我們的最初理念是將之前所創(chuàng)造的所有內(nèi)容用于現(xiàn)有的API中,并為《Draw Something》編寫一些新的key/value內(nèi)容。因?yàn)槲覀兪歉鶕?jù)比例進(jìn)行設(shè)計(jì),所以我們一開始便選擇Amazon S3作為我們所有key/value數(shù)據(jù)的儲(chǔ)存庫。而采取這一做法的初衷便是放棄一些等待時(shí)間并獲得無限量的可擴(kuò)展性和儲(chǔ)存空間。

并且我們之后所添加的各種內(nèi)容都是以標(biāo)準(zhǔn)化模式進(jìn)行。任何想要建造一個(gè)可擴(kuò)展系統(tǒng)的人都必須想辦法讓每個(gè)系統(tǒng)規(guī)模的層面能夠獨(dú)立于其它層面。我們將NGINX網(wǎng)絡(luò)服務(wù)器(它指向HAProxy軟件負(fù)載均衡器)作為前臺(tái)網(wǎng)絡(luò),它隨后將打開我們運(yùn)行于thin網(wǎng)絡(luò)服務(wù)器中的ruby API。而MySQL便是我們此時(shí)的主要數(shù)據(jù)儲(chǔ)存處。我們將大量使用緩存系統(tǒng)以及redis進(jìn)行異步排列,并使用ruby庫存調(diào)用resque。

飛速發(fā)展

在《Draw Something》發(fā)行后幾天我們開始注意到一個(gè)非常奇特的現(xiàn)象。這款游戲正在快速發(fā)展著。發(fā)布當(dāng)天它便取得了3萬次的下載量;而在發(fā)布10天后,其下載量更是飆升至七位數(shù)。

各種名人開始在twitter上談?wù)撨@款游戲——包括John Mayer(游戲邦注:美國創(chuàng)作歌手)和Pauly D,更是為我們的游戲創(chuàng)造了更多的流量。之前的玩家也未離開游戲,他們深深陷入游戲的樂趣中,游戲的總體使用率甚至遠(yuǎn)遠(yuǎn)高于它每天的下載量。

大多數(shù)工程師都是根據(jù)比例去開發(fā)軟件,但是要知道,在任何復(fù)雜的系統(tǒng)中即使你嘗試著為其設(shè)下基準(zhǔn)并進(jìn)行測(cè)試,你也很難判斷哪些內(nèi)容會(huì)以何種方式遭遇失敗,以及你需要在何時(shí)修改何種系統(tǒng)等。

解決問題

我們所遇到的第一個(gè)問題便是我們平常所使用的API速度過快,這就意味著我們只能以平常的方法(即單線程,一次只執(zhí)行一次請(qǐng)求)去使用thin網(wǎng)絡(luò)服務(wù)器,而對(duì)于公共云服務(wù),我們卻不知道有多少時(shí)間能夠用于內(nèi)容備份。

雖然我們看到一些內(nèi)容開始備份,但是這一方法卻并非長久有效。同時(shí)我們也通過不斷地創(chuàng)造出更多服務(wù)器而節(jié)約時(shí)間。幸運(yùn)的是,我們以此設(shè)計(jì)出了DrawSomething API,并且將其區(qū)別于我們主要的API以及框架。我們總是對(duì)一些新技術(shù)充滿好奇,就像此時(shí)的我們正研究著Ruby 1.9極其纖程(fiber)以及Event Machine + synchrony。并且為了能夠更快解決問題,我們選擇了Goliath——來自PostRank的一款非阻塞型ruby應(yīng)用服務(wù)器。在接下來的24小時(shí)內(nèi)我得把key/value代碼以及其它支持庫存移植到了這個(gè)服務(wù)器上,并編寫一些測(cè)試然后激活這一服務(wù)。結(jié)果正如預(yù)想的那樣,我們成功地將6個(gè)服務(wù)器中的115個(gè)應(yīng)用實(shí)例分解為只剩下15個(gè)應(yīng)用實(shí)例。

但是這種一帆風(fēng)順的局面卻是短暫的。一些問題開始慢慢浮出水面。這時(shí)候我們真的是晝夜不停地工作著,并且在某天的凌晨1點(diǎn)發(fā)現(xiàn)了主要問題所在,即我們的云數(shù)據(jù)儲(chǔ)存在這時(shí)候發(fā)生了90%的請(qǐng)求錯(cuò)誤。這之后,我們立刻接收到了來自運(yùn)營商的郵件,告知我們因?yàn)榉?wù)器運(yùn)行達(dá)到極限才導(dǎo)致這一問題出現(xiàn),所以他們不得不開始限制游戲的運(yùn)行速度。

這時(shí)候,服務(wù)對(duì)我們來說就猶如黑盒子一樣,而我們需要努力獲得更多控制權(quán)。此于我們每秒鐘大約可以接收到30幅畫,而這對(duì)于當(dāng)時(shí)的我們來說真的是個(gè)大數(shù)目了。所以我們便需要一個(gè)全新的后臺(tái)以規(guī)劃并處理我們現(xiàn)在的流量。我們?cè)?jīng)在一些小系統(tǒng)中使用過Membase,并認(rèn)為它能夠有效地應(yīng)用于這款游戲中,所以我們便決定采取這種行動(dòng)。

我們開始使用Membase(也就是Couchbase)的一個(gè)小cluster并重新編寫了整款應(yīng)用,并在當(dāng)天凌晨3點(diǎn)時(shí)激活它。我們的云數(shù)據(jù)儲(chǔ)存問題立刻得到了緩解——盡管我們?nèi)匀辉谑褂盟鼘?shù)據(jù)到移植新的Couchbase中。通過這種優(yōu)化,我們的游戲便能夠持續(xù)有效地向前發(fā)展了。

接下來一周對(duì)于我們來說也是困難重重,因?yàn)槠渌恍╇S機(jī)的數(shù)據(jù)儲(chǔ)存問題也不斷涌現(xiàn),而與此同時(shí)我們還需要去規(guī)劃其它基礎(chǔ)設(shè)施部分。這時(shí)候,我們需要更加勤奮地投入研究中,并咨詢其他能夠幫助我們處理這種爆炸式發(fā)展的人士。

我曾經(jīng)與10多個(gè)非常聰明且出色的人士進(jìn)行交談,包括來自Hunch的Tom Pinckney及其優(yōu)秀的團(tuán)隊(duì),SocialFlow的Frank Speiser及其團(tuán)隊(duì),Tumblr的Fredrik Nylander,F(xiàn)astly的Artur Bergman,以及之前在Twitter上遇到的Michael Abbot等。有趣的是盡管我提出了相同的問題,即他們會(huì)如何處理這類型的挑戰(zhàn),他們卻給予了我各種不同的答案。從而讓我們意識(shí)到其實(shí)我們自己的答案與那些我們所尊敬的團(tuán)隊(duì)的答案同樣都是有效的。所以我們便繼續(xù)朝著一開始所設(shè)定好的道路前進(jìn),并不斷思考我們?cè)撨x擇何種技術(shù)以及如何執(zhí)行它們。

盡管使用Couchbase為我們帶來了一系列問題,但是我們都認(rèn)為從當(dāng)前的基礎(chǔ)設(shè)施徹底轉(zhuǎn)移到完全不同的平臺(tái)風(fēng)險(xiǎn)更大。而此時(shí)的《Draw Something》每天能夠吸引300萬至400萬玩家。我們聯(lián)系了Couchbase并獲得了一些建議,也就是擴(kuò)展我們的cluster,利用SSD硬盤驅(qū)動(dòng)器和大量的RAM強(qiáng)化我們的服務(wù)器。我們的確這么做了,也就是創(chuàng)造出更多cluster,并基于可擴(kuò)展內(nèi)容而進(jìn)一步分解它們。并且隨著流量的不斷攀升,我們也持續(xù)完善并規(guī)劃著游戲的后臺(tái)服務(wù)器?,F(xiàn)在我們平均每秒鐘可以接收上百張畫了。

隨著游戲的迅速發(fā)展,我們的玩家每天也在迅速翻倍增長。而這時(shí)候我們需要面對(duì)的情況便是如果用戶每天成倍增長著,我們的服務(wù)器也必須每天翻倍發(fā)展。幸好我們的系統(tǒng)高度自動(dòng)化,而我們也不斷創(chuàng)造出更多服務(wù)器,使服務(wù)器最終能夠趕上游戲的發(fā)展速度,讓游戲能夠在100個(gè)服務(wù)器之間有序地運(yùn)行著。但是這個(gè)問題解決了,前面又出現(xiàn)了另一個(gè)瓶頸。

我們做好了要連續(xù)大干60多個(gè)小時(shí)的準(zhǔn)備,并且在此期間都不打算離開電腦了。我們必須使用DNS負(fù)載均衡器擴(kuò)展網(wǎng)絡(luò)服務(wù)器,我們必須完成獲得更多HAProxies等急迫任務(wù),并且通常都要在深夜落實(shí)行動(dòng)。

非常幸運(yùn)的是我們的大多數(shù)層面都是可擴(kuò)展的并且不需要做出過多的修改。我們的定制服務(wù)器監(jiān)控工具一直在幫助追蹤游戲的加載,儲(chǔ)存甚至是游戲的即時(shí)用戶屬性,以幫助我們更好地進(jìn)行容量規(guī)劃。最終,我們輕松地推出了應(yīng)用的cluster,并包含了NGINX,HAProxy以及Goliath服務(wù)器(相互獨(dú)立),并且在上線后它們能夠以一種恒速幫助我們提高容量。現(xiàn)在,我們每秒鐘便能夠接收上千張畫了,而一周前看似巨大的流量換做現(xiàn)在也已經(jīng)變得非常渺小了。

draw something elvi(from gamasutra)

draw something elvi(from gamasutra)

展望未來

OMGPOP所有員工都非常支持我們現(xiàn)在的工作,并且也清楚我們現(xiàn)在所做的事情對(duì)于公司發(fā)展的重要性。也就是我們得到了公司內(nèi)部的絕對(duì)認(rèn)可。

難得有游戲能夠在如此短的時(shí)間內(nèi)便創(chuàng)造出如此顯赫的成績,也難得有人會(huì)為游戲的發(fā)展付出如此高的代價(jià)。直至今日,《Draw Something》在50天內(nèi)便創(chuàng)造出了超過5000萬次下載量。在最高峰時(shí)游戲服務(wù)器甚至每秒能夠收到大約3千幅畫。看到游戲取得的巨大成功,我們能夠自豪地說,雖然還存在一些粗糙的修補(bǔ)程序,但是我們有信心保持這款游戲的有效運(yùn)行。如果這款游戲失敗了,我們也不可能迎來如此巨大的發(fā)展。

本周我們?cè)凇禗raw Something》中又添加了一些新的功能,如評(píng)論和保存功能——這也是玩家所希望的。

現(xiàn)在,我們已經(jīng)成為Zynga中的一份子(也就是Zynga Mobile New York),我們能夠更加專注于《Draw Something》的完善——而我們也仍然保持著OMGPOP的企業(yè)文化?,F(xiàn)在,我們甚至計(jì)劃將該游戲轉(zhuǎn)移到Zynga的zCloud基礎(chǔ)設(shè)施(游戲邦注:能夠有效地協(xié)調(diào)并處理社交游戲中的工作負(fù)荷)。

回首過去幾周的發(fā)展,我們真的很難想象自己可以從一家原本只有幾個(gè)員工的小公司而成為Zynga的一份字,并接觸到更多專業(yè)人士和技術(shù)。

可以說,我們終于實(shí)現(xiàn)了目標(biāo)而創(chuàng)造出一款真正熱門的游戲。盡管我們?cè)獾搅烁鞣N挫折,并且也有所延遲,但是我們最終還是創(chuàng)造出一個(gè)真正有效的后臺(tái)去發(fā)展我們的這款游戲。

 

責(zé)任編輯:yangsai 來源: gamerboom
相關(guān)推薦

2009-11-05 14:10:42

IT技術(shù)

2012-05-07 14:28:55

2012-03-20 21:21:59

開發(fā)

2012-04-08 20:58:48

APP

2016-12-13 12:11:37

2011-08-31 12:24:26

投影儀技術(shù)

2012-07-02 14:32:22

HTML5

2009-04-30 15:22:25

JDBCODBCAPI

2009-11-18 15:58:05

PHP技術(shù)

2018-03-21 06:47:02

移動(dòng)通信5G互聯(lián)網(wǎng)

2009-11-06 11:03:02

EPON接入技術(shù)

2009-02-26 16:05:23

Java手機(jī)終端J2ME

2009-11-03 10:53:25

光纖接入技術(shù)

2019-08-01 13:34:44

容器趨勢(shì)Kubernetes

2016-12-23 14:43:37

2012-03-28 22:12:00

游戲

2015-10-29 10:08:58

2009-11-03 13:35:31

NGN接入技術(shù)

2009-10-26 12:56:11

寬帶無線接入技術(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)