【 玩轉(zhuǎn) LeanCloud 】開(kāi)發(fā)者經(jīng)驗(yàn)分享:
作者:趙天澤
作為一個(gè)通過(guò) LeanCloud 入門后端開(kāi)發(fā)的小白系冗,一年多的開(kāi)發(fā)歷程讓我收獲滿滿纪挎。多個(gè)項(xiàng)目也在 LeanCloud 可靠的服務(wù)支撐下取得了不錯(cuò)的發(fā)展玻募,其中用戶量最大的項(xiàng)目的云引擎每分鐘請(qǐng)求量在1.2W 次左右熄云,每日調(diào)用存儲(chǔ)服務(wù) API 在 300W+ 次葫录。在此過(guò)程中剧董,我不僅得到了 LeanCloud 各路技術(shù)大俠的指點(diǎn)兔仰,得以提高數(shù)據(jù)可靠性并優(yōu)化了邏輯執(zhí)行效率茫负,而且 LeanCloud 的高可用性和對(duì)突發(fā)異常處理的高效也讓我對(duì)運(yùn)維工作和服務(wù)穩(wěn)定性沒(méi)有絲毫的顧慮;再加上簡(jiǎn)潔好用斋陪、響應(yīng)及時(shí)的工單系統(tǒng)朽褪,可以這么說(shuō),我的工作由此變得美好愜意无虚。
海外節(jié)點(diǎn)和高效的技術(shù)支持是 LeanCloud 最大的優(yōu)勢(shì)
其實(shí)使用 LeanCloud 之前缔赠,我一直在做 iOS 應(yīng)用和手游客戶端開(kāi)發(fā),沒(méi)有半點(diǎn)后端開(kāi)發(fā)的經(jīng)驗(yàn)友题,也未曾碰過(guò) JavaScript嗤堰,直到后來(lái)參與過(guò)幾款網(wǎng)游的開(kāi)發(fā),才對(duì)游戲后端大概的架構(gòu)和接口設(shè)計(jì)有所了解。接著我們的項(xiàng)目需要為單機(jī)游戲增加網(wǎng)絡(luò)存檔和每日任務(wù)分發(fā)功能踢匣,可我們一位后端程序員也沒(méi)有告匠,而且也不具備從頭搭建和部署一套可靠的后臺(tái)服務(wù)的能力,所以可行的方案就是找到一套現(xiàn)成的第三方服務(wù)离唬。當(dāng)時(shí)國(guó)內(nèi)國(guó)外也有不少的后端服務(wù)提供商后专,最終敲定 LeanCloud 主要是考慮到:
成熟穩(wěn)定的海外節(jié)點(diǎn)和配套服務(wù)。我們的游戲主要是在海外推廣输莺,雖然海外有不少專門針對(duì)游戲的后端云服務(wù)戚哎,但是實(shí)際使用下來(lái)發(fā)現(xiàn)它們的開(kāi)發(fā)自由度并不高,達(dá)不到我們的標(biāo)準(zhǔn)嫂用。
與技術(shù)支持人員的溝通效率型凳。大多的海外服務(wù)商只能通過(guò)郵件或者論壇溝通,效率十分低下嘱函,真要是遇到了問(wèn)題遲遲不能解決就會(huì)非常麻煩甘畅。而 LeanCloud 技術(shù)支持的響應(yīng)非常之快,即使最初大家只在 QQ 群里溝通還沒(méi)有使用工單系統(tǒng)往弓,所有回復(fù)都不拖沓疏唾,使用者當(dāng)然高興啦。
清晰詳實(shí)的技術(shù)文檔函似。LeanCloud 提供的文檔相比其他服務(wù)商也更加詳實(shí)荸实,分類比較清晰,非常適合入門學(xué)習(xí)缴淋。
另外,我們還特地調(diào)研了 LeanCloud 的云引擎服務(wù)泄朴,因?yàn)槠涮峁┩暾?jiǎn)便的后臺(tái)部署途徑和工具重抖,實(shí)現(xiàn)線上環(huán)境的一鍵部署,又能讓我們基于 express 任性地開(kāi)發(fā)后臺(tái)邏輯祖灰,所以我們確信 LeanCloud 是最最棒的選擇钟沛。
REST API + 云函數(shù)是萬(wàn)金油
為實(shí)現(xiàn)用戶游戲數(shù)據(jù)存儲(chǔ)和每日任務(wù)分發(fā),我們最先用了存儲(chǔ)服務(wù)和云引擎局扶。不過(guò)我們并沒(méi)有用 LeanCloud 提供的 SDK 來(lái)直接調(diào)用存儲(chǔ)服務(wù)恨统,而是選擇用 LeanCloud REST API 調(diào)用云引擎里面的云函數(shù),然后通過(guò)云函數(shù)調(diào)用存儲(chǔ)服務(wù)來(lái)實(shí)現(xiàn)相應(yīng)的邏輯三妈。這樣做的原因是我們的游戲主要是使用 lua + C++ 開(kāi)發(fā)畜埋,LeanCloud 的 C++ SDK 沒(méi)有持續(xù)維護(hù),使用起來(lái)會(huì)有潛在風(fēng)險(xiǎn)畴蒲;而如果使用 iOS 和 Android SDK悠鞍,又得把需要使用的接口暴露給腳本層,這就多了一道不必要的程序模燥】Ъ溃基于以往開(kāi)發(fā)網(wǎng)游的經(jīng)驗(yàn)掩宜,我們更傾向于按功能模塊向前端提供相關(guān)的 API,讓前端通過(guò) HTTP 協(xié)議將數(shù)據(jù) post 給服務(wù)器么翰,服務(wù)器處理完后返回前端需要更新的那部分?jǐn)?shù)據(jù)就好牺汤。
實(shí)踐下來(lái)我們發(fā)現(xiàn)這樣做的確有優(yōu)勢(shì),把數(shù)據(jù)查詢浩嫌、處理和存儲(chǔ)的邏輯放在后端進(jìn)行檐迟,這樣業(yè)務(wù)的調(diào)整可以變得非常靈活。比如在用戶量起來(lái)之后固该,發(fā)現(xiàn)每日任務(wù)表會(huì)有大量的讀寫(xiě)操作锅减,根據(jù) LeanCloud 技術(shù)支持的建議,我們將一些熱數(shù)據(jù)放到云引擎的緩存服務(wù) LeanCache 中使用伐坏,也就是先去緩存里面查數(shù)據(jù)怔匣,沒(méi)有的話再去存儲(chǔ)服務(wù)里面查,這樣就有效地降低了查詢的時(shí)間桦沉,提高了業(yè)務(wù)處理的效率每瞒,而前端代碼啥都不用變。
云緩存速度快得沒(méi)商量
要單獨(dú)說(shuō)一下云緩存 LeanCache纯露。它實(shí)質(zhì)上就是 Redis剿骨,對(duì)于改善和提升我們項(xiàng)目性能功不可沒(méi)。當(dāng)初我們需要做一個(gè)全區(qū)排行榜埠褪,正好 LeanCache 的官方 Demo 中提供了排行榜的示例代碼(幫我補(bǔ)上了什么是原子性這一課浓利,必須膜拜),于是我們?cè)诖嘶A(chǔ)上實(shí)現(xiàn)了自己的排行榜功能钞速,并把它放在 npm 上方便大家取用「leaderboard-promise」贷掖。接著我們還陸續(xù)在云緩存中實(shí)現(xiàn)了熱數(shù)據(jù)緩存、訂單系統(tǒng)渴语、token 驗(yàn)證系統(tǒng)等等功能苹威,充分去利用 Redis 的優(yōu)勢(shì)來(lái)解決業(yè)務(wù)中可能引起性能瓶頸的情況。
跨時(shí)區(qū)定時(shí)推送通知
我們的用戶來(lái)自全球各地驾凶,有不同的時(shí)區(qū)牙甫,我們需要讓所有用戶在當(dāng)?shù)貢r(shí)間的下午 7 點(diǎn)收到一條通知。通過(guò)云引擎和消息推送服務(wù)调违,我們只需要在每個(gè) installation 對(duì)象下新增一個(gè)用戶的時(shí)區(qū)數(shù)據(jù)窟哺,然后在云引擎中設(shè)置一個(gè)每個(gè)整點(diǎn)觸發(fā)的定時(shí)任務(wù),當(dāng)任務(wù)觸發(fā)時(shí)在推送條件里面設(shè)置對(duì)應(yīng)的時(shí)區(qū)信息翰萨,這樣就達(dá)到了我們的目的脏答。另外通過(guò)云引擎實(shí)現(xiàn)向特定用戶群推送也非常方便。
實(shí)時(shí)對(duì)戰(zhàn)玩法 500 行代碼搞定
最近我們的新項(xiàng)目希望能夠盡快實(shí)現(xiàn)可靠的房間制實(shí)時(shí)對(duì)戰(zhàn)玩法,以便能夠快速投放到市場(chǎng)去驗(yàn)證玩法是否受到玩家歡迎殖告。如果在用戶認(rèn)可之前就耗時(shí)耗力去開(kāi)發(fā)一套實(shí)時(shí)對(duì)戰(zhàn)框架顯然不太明智阿蝶。于是我們向 LeanCloud 求助,竟然很快地得到了一套基于實(shí)時(shí)通信模塊的開(kāi)發(fā)建議黄绩,這樣通過(guò)云引擎搭配實(shí)時(shí)通信模塊羡洁,用了不到 500 行代碼就把一套房間匹配制的實(shí)時(shí)對(duì)戰(zhàn)框架搭建完畢,后續(xù)只需要集合項(xiàng)目中游戲的實(shí)際玩法就可以很快部署上線了爽丹。原以為要洪荒之力筑煮,卻只費(fèi)了吹灰之力,幸福感那是瞬間爆棚粤蝎。
技術(shù)課程直播大長(zhǎng)見(jiàn)識(shí)
我們要特別贊美一下 LeanCloud 一直堅(jiān)持在做的直播課程系列真仲。所有課程不僅涉及到了 LeanCloud 各個(gè)功能的基本使用介紹,還講解了后端開(kāi)發(fā)中常常需要去面對(duì)的問(wèn)題初澎,像如何對(duì)壓力評(píng)估和優(yōu)化秸应、如何設(shè)計(jì)業(yè)務(wù)流程來(lái)保證數(shù)據(jù)的一致性、如何通過(guò)權(quán)限控制保障數(shù)據(jù)的安全碑宴。這些內(nèi)容對(duì)于即使不使用 LeanCloud 服務(wù)的后端開(kāi)發(fā)人員都是十分有用的软啼。
最后,我想把 LeanCloud 推薦給兩類人:
想學(xué)習(xí)后端開(kāi)發(fā)延柠,但是卻被復(fù)雜的云服務(wù)器采購(gòu)祸挪、架設(shè)和配置嚇住的同學(xué)。 LeanCloud 有非常高效的開(kāi)發(fā)配套工具贞间,可以快速在本地和云端實(shí)現(xiàn)需要的業(yè)務(wù)邏輯贿条。看著自己的項(xiàng)目上線運(yùn)轉(zhuǎn)起來(lái)的成就感一定會(huì)激勵(lì)你繼續(xù)深入的學(xué)習(xí)增热,以 LeanCloud 為起點(diǎn)闪唆,慢慢的完善的后端開(kāi)發(fā)知識(shí)體系。
另外一種就是雖然有足夠的后端開(kāi)發(fā)經(jīng)驗(yàn)钓葫、但目前著手于初創(chuàng)項(xiàng)目并沒(méi)有完善的運(yùn)維團(tuán)隊(duì)支持的同學(xué)。眾所周知票顾,要建立起一套完善的運(yùn)維保障體系是一件需要投入不少資源的事情础浮,初創(chuàng)項(xiàng)目應(yīng)該把更多的精力投入到實(shí)際的業(yè)務(wù)邏輯開(kāi)發(fā)上面,運(yùn)維這樣的麻煩事兒就完全可以交給 LeanCloud 吧奠骄。