手游開發如何選擇後端服務

【 玩轉 LeanCloud 】開發者經驗分享:

作者:趙天澤

作為一個通過 LeanCloud 入門後端開發的小白,一年多的開發歷程讓我收穫滿滿。多個項目也在 LeanCloud 可靠的服務支撐下取得了不錯的發展,其中用戶量最大的項目的雲引擎每分鐘請求量在1.2W 次左右,每日調用存儲服務 API 在 300W+ 次。在此過程中,我不僅得到了 LeanCloud 各路技術大俠的指點,得以提高數據可靠性並優化了邏輯執行效率,而且 LeanCloud 的高可用性和對突發異常處理的高效也讓我對運維工作和服務穩定性沒有絲毫的顧慮;再加上簡潔好用、響應及時的工單系統,可以這麼說,我的工作由此變得美好愜意。

海外節點和高效的技術支持是 LeanCloud 最大的優勢

其實使用 LeanCloud 之前,我一直在做 iOS 應用和手遊客戶端開發,沒有半點後端開發的經驗,也未曾碰過 JavaScript,直到後來參與過幾款網遊的開發,才對遊戲後端大概的架構和介面設計有所了解。接著我們的項目需要為單機遊戲增加網路存檔和每日任務分發功能,可我們一位後端程序員也沒有,而且也不具備從頭搭建和部署一套可靠的後台服務的能力,所以可行的方案就是找到一套現成的第三方服務。當時國內國外也有不少的後端服務提供商,最終敲定 LeanCloud 主要是考慮到:

  1. 成熟穩定的海外節點和配套服務。我們的遊戲主要是在海外推廣,雖然海外有不少專門針對遊戲的後端雲服務,但是實際使用下來發現它們的開發自由度並不高,達不到我們的標準。
  1. 與技術支持人員的溝通效率。大多的海外服務商只能通過郵件或者論壇溝通,效率十分低下,真要是遇到了問題遲遲不能解決就會非常麻煩。而 LeanCloud 技術支持的響應非常之快,即使最初大家只在 QQ 群里溝通還沒有使用工單系統,所有回復都不拖沓,使用者當然高興啦。
  1. 清晰詳實的技術文檔。LeanCloud 提供的文檔相比其他服務商也更加詳實,分類比較清晰,非常適合入門學習。

另外,我們還特地調研了 LeanCloud 的雲引擎服務,因為其提供完整簡便的後台部署途徑和工具,實現線上環境的一鍵部署,又能讓我們基於 express 任性地開發後台邏輯,所以我們確信 LeanCloud 是最最棒的選擇。

REST API + 雲函數是萬金油

為實現用戶遊戲數據存儲和每日任務分發,我們最先用了存儲服務和雲引擎。不過我們並沒有用 LeanCloud 提供的 SDK 來直接調用存儲服務,而是選擇用 LeanCloud REST API 調用雲引擎裡面的雲函數,然後通過雲函數調用存儲服務來實現相應的邏輯。這樣做的原因是我們的遊戲主要是使用 lua + C++ 開發,LeanCloud 的 C++ SDK 沒有持續維護,使用起來會有潛在風險;而如果使用 iOS 和 Android SDK,又得把需要使用的介面暴露給腳本層,這就多了一道不必要的程序。基於以往開發網遊的經驗,我們更傾向於按功能模塊向前端提供相關的 API,讓前端通過 HTTP 協議將數據 post 給伺服器,伺服器處理完後返回前端需要更新的那部分數據就好。

實踐下來我們發現這樣做的確有優勢,把數據查詢、處理和存儲的邏輯放在後端進行,這樣業務的調整可以變得非常靈活。比如在用戶量起來之後,發現每日任務表會有大量的讀寫操作,根據 LeanCloud 技術支持的建議,我們將一些熱數據放到雲引擎的緩存服務 LeanCache 中使用,也就是先去緩存裡面查數據,沒有的話再去存儲服務裡面查,這樣就有效地降低了查詢的時間,提高了業務處理的效率,而前端代碼啥都不用變。

雲緩存速度快得沒商量

要單獨說一下雲緩存 LeanCache。它實質上就是 Redis,對於改善和提升我們項目性能功不可沒。當初我們需要做一個全區排行榜,正好 LeanCache 的官方 Demo 中提供了排行榜的示例代碼(幫我補上了什麼是原子性這一課,必須膜拜),於是我們在此基礎上實現了自己的排行榜功能,並把它放在 npm 上方便大家取用「leaderboard-promise」。接著我們還陸續在雲緩存中實現了熱數據緩存、訂單系統、token 驗證系統等等功能,充分去利用 Redis 的優勢來解決業務中可能引起性能瓶頸的情況。

跨時區定時推送通知

我們的用戶來自全球各地,有不同的時區,我們需要讓所有用戶在當地時間的下午 7 點收到一條通知。通過雲引擎和消息推送服務,我們只需要在每個 installation 對象下新增一個用戶的時區數據,然後在雲引擎中設置一個每個整點觸發的定時任務,當任務觸發時在推送條件裡面設置對應的時區信息,這樣就達到了我們的目的。另外通過雲引擎實現向特定用戶群推送也非常方便。

實時對戰玩法 500 行代碼搞定

最近我們的新項目希望能夠儘快實現可靠的房間制實時對戰玩法,以便能夠快速投放到市場去驗證玩法是否受到玩家歡迎。如果在用戶認可之前就耗時耗力去開發一套實時對戰框架顯然不太明智。於是我們向 LeanCloud 求助,竟然很快地得到了一套基於實時通信模塊的開發建議,這樣通過雲引擎搭配實時通信模塊,用了不到 500 行代碼就把一套房間匹配製的實時對戰框架搭建完畢,後續只需要集合項目中遊戲的實際玩法就可以很快部署上線了。原以為要洪荒之力,卻只費了吹灰之力,幸福感那是瞬間爆棚。

技術課程直播大長見識

我們要特別讚美一下 LeanCloud 一直堅持在做的直播課程系列。所有課程不僅涉及到了 LeanCloud 各個功能的基本使用介紹,還講解了後端開發中常常需要去面對的問題,像如何對壓力評估和優化、如何設計業務流程來保證數據的一致性、如何通過許可權控制保障數據的安全。這些內容對於即使不使用 LeanCloud 服務的後端開發人員都是十分有用的。

最後,我想把 LeanCloud 推薦給兩類人:

  • 想學習後端開發,但是卻被複雜的雲伺服器採購、架設和配置嚇住的同學。 LeanCloud 有非常高效的開發配套工具,可以快速在本地和雲端實現需要的業務邏輯。看著自己的項目上線運轉起來的成就感一定會激勵你繼續深入的學習,以 LeanCloud 為起點,慢慢的完善的後端開發知識體系。
  • 另外一種就是雖然有足夠的後端開發經驗、但目前著手於初創項目並沒有完善的運維團隊支持的同學。眾所周知,要建立起一套完善的運維保障體系是一件需要投入不少資源的事情,初創項目應該把更多的精力投入到實際的業務邏輯開發上面,運維這樣的麻煩事兒就完全可以交給 LeanCloud 吧。

推薦閱讀:

新的lua-protobuf發布啦

TAG:API | 客戶端開發 | 手機遊戲開發 |