博客 / 詳情

返回

LeanCloud 2019 回顧

在過去的一年裏,數萬新用户選擇了 LeanCloud,開發者在我們的平台上創建了數萬新應用。儘管在 6 月遇到了一些因外部因素帶來的困難,2019 年仍然是 LeanCloud 實現整體盈利的第一年。這離不開用户的長期支持,同時健康的財務對於為用户提供持續、穩定、不斷改進的服務也是至關重要的。

在過去一年裏我們正式推出了 LeanCloud 國際版,全面支持域名綁定,併為對穩定性、可控性、靈活性有更高要求的用户開發了全新的獨立部署方案。多人對戰 Client Engine 正式上線,同時為規模較大的遊戲提供了獨立部署選項。雲引擎新增了雲隊列和 MySQL 支持。其他服務和 SDK 也有大量改進和優化。

國際版正式運行

為了適應用户的需求變化以及產品下一步的發展,讓 LeanCloud 正式成為國際化的產品,我們推出了 LeanCloud 國際版。 國際版使用獨立的頂級域名 leancloud.app 和賬户體系,由 LeanCloud 的境外公司作為主體運營,費用使用美元結算。 我們已經初步完成了網站、控制枱、文檔的國際化,也提供英語技術支持,讓英文環境的開發者也可以使用 LeanCloud。

全面支持域名綁定

為了確保能長期穩定為開發者提供服務,按照相關法律法規和有關部門的要求,我們推動了使用 LeanCloud 服務的應用綁定自有域名。 綁定自有域名也有利於從域名層面做好應用隔離,確保業務穩定。 為了保證安全性,API 域名必須啓用 SSL(雲引擎域名、文件域名推薦啓用 SSL),我們也推出了自動管理功能,支持 SSL 證書的自動申請和自動續期。

存儲服務

全新獨立部署方案

為了滿足眾多企業客户對平台穩定性、後端可控性以及功能多樣性方面的要求,我們推出了新的獨立部署方案,希望減少使用中的限制,給開發者更大的靈活性,同時也提供一個更加穩定可靠的完整後端,滿足業務系統的更高要求。

新的獨立部署方案裏,我們會使用「獨立的存儲集羣 + 獨立的 API 集羣 + 獨立的擴展服務集羣」的模式來構建一個完整的、物理隔離的公有云系統,供單個用户和應用獨享使用。 這裏的「擴展服務」是指基於存儲到雲端的結構化數據,解決特定業務需求的垂直服務,例如並行計算(原離線分析功能)、全文檢索(原應用內搜索功能)等。

新的 API Server 是完全重新開發的,我們針對單應用獨立部署的使用場景進行了功能裁剪和架構優化,取消了共享集羣方式下的一些請求限制(例如數據導入導出、併發線程上限等),增加了更多數據處理接口(例如提供了索引操作和聚合查詢的 REST API),同時還有更好的併發處理性能和彈性伸縮能力。

雲引擎

雲隊列

我們推出了雲隊列服務。雲隊列提供了一種在雲引擎之外調度雲函數的能力,它基於雲引擎已有的「雲函數」這個概念實現了重試、去重、結果查詢、延時任務、定時任務等功能,是對雲函數功能的一個補充。尚未運行的任務會以一種可靠的方式暫存在雲隊列,即使你的雲引擎因部署、過載、崩潰而重啓,任務也不會丟失,雲隊列會等待你的雲引擎實例恢復正常後繼續運行它們。我們也基於雲隊列重新實現了定時任務,它兼容之前的絕大部分用法,並支持以 JSON 形式向雲函數傳遞自定義的參數,以及配置在超時情況下的行為(重試或放棄)。對了,我們還移除了定時任務的個數限制。

MySQL

我們在華北節點推出了高可用、高性價比的 MySQL 數據庫託管方案。
開發者可以在雲引擎中使用通用的 MySQL 客户端類庫,訪問完整的 MySQL 功能。

其他

雲引擎統計結果展示也進行了優化,現在開發者可以在控制枱按照總覽、網站託管請求以及單個雲函數來分別查看請求數(按分鐘聚合)和響應時間的變化趨勢,還可以看到整體的 CPU、內存以及流量消耗,希望在程序運行狀況和代碼優化上給大家提供更多參考信息。

雲引擎命令行工具也發佈了 0.21.0 版,修復了一些 bug,也支持指定 --prod 參數直接部署到生產環境,以及本地調試靜態網站項目。

雲引擎 Java 環境支持指定 Java 版本,開發者可以選用 Java 8、11、12、13、14 來開發項目。

雲引擎 Node.js 環境新增了 internal 選項,用來禁止在客户端調用雲函數。
我們還推出了一個常用功能和示例彙總代碼倉庫,其中包括推薦的最佳實踐和常用的代碼片段,每個文件中都有較為詳細的註釋,適合雲引擎的開發者閲讀、參考,也可以將代碼片段複製到你的項目中使用。

推送和即時通訊

Android 混合推送現已支持 vivo、oppo、小米推送國際版,可以覆蓋更多終端用户。

我們還對即時通訊和推送服務做了一些其他改進和優化,以便為開發者提供更穩定的服務、更靈活的功能:

  • 即時通訊新增了客户端上下線 hook 支持,在客户端登錄成功、登出成功、意外下線後調用。
  • 通過 SDK 新建對話默認啓用 unique 參數,更貼合大多數應用的使用場景。
  • 通過 REST API 發送消息現在也支持提醒用户(mention_allmention_client_ids 參數)了。
  • 即時通訊的離線推送記錄現在也加入到推送歷史記錄裏面,可以在控制枱一併查看。
  • 推送服務現在支持直接指定設備 ID 進行推送,比通過查詢條件推送更快,延遲更低。
  • 開發者現在能對推送時間和推送速度(flow_control 參數)進行更精細的控制。

遊戲解決方案

為了更好服務較大規模的遊戲開發者,我們推出了多人對戰 GameServer 的獨立部署版本。獨立部署的後端服務節點(集羣),讓業務完全獨享所有的物理資源,以便給開發者帶來更好的穩定性和靈活度。

相比於共享集羣模式,獨立部署的 GameServer 有如下優勢:

  • 支持通過 hook 函數 的方式來編寫服務端邏輯,業務擴展代碼與 GameServer 在同一個進程內運行,與 Client Engine 方式相比在實時性上有顯著提升。
  • 取消了部分使用限制,例如房間最大人數、最大消息下發頻率、消息體大小限制等,在硬件能力許可範圍內儘可能滿足業務需求。
  • 對資源獨佔使用,支持自動擴容。

此外,遊戲解決方案迎來了以下改進:

  • Client Engine 在完善底層架構、使用框架、文檔之後,發佈了正式版。
  • 排行榜增強了防作弊的策略,只放行可信環境的數據更新請求,避免被惡意刷榜。
  • 優化了遊戲 SDK,簡化了進入遊戲大廳的邏輯,並且將消息序列化協議全部切換到 Protocol Buffers,進一步降低客户端的網絡流量和傳輸延時。

控制枱和官網

我們對控制枱進行了改版,目前存儲服務部分已經完成並上線。新版本的控制枱,我們將存儲相關的功能(如 LiveQuery、離線分析和應用內搜索)合併到了一起,對普通的結構化數據存儲、文件、用户系統進行了拆分,並且將數據展示與權限設置、索引和性能優化等內容集中起來,希望控制枱邏輯更清晰,可以給開發者帶來便利。上文提到的雲引擎統計結果展示界面的改進,就是基於新版控制枱重新實現的。

此外,控制枱新增了激活歸檔應用和註銷賬號功能,個人實名認證也切換到了基於支付寶客户端的方案。我們也重新設計了官網的價格頁面,更加清晰、全面地展示各項服務的價格方案。

SDK

2019 年各 SDK 也發佈了不少新版本,除了跟進上文提到的各服務的新功能外,主要還有以下改進:

Java

新推出的統一的 Java SDK 正式取代舊版的 Java SDK 和 Android SDK。
新版的 SDK 全面採用了 Reactive 編程風格,同時也兼容老的 Callback 方式。在 Android 平台上,新版 SDK 切換到了 AndroidX。

對於開發者擔心的 Android 應用在客户端暴露 appKey 可能帶來的潛在風險,我們現在允許應用程序只通過 appId 來完成 LeanCloud 服務初始化,從而避免了暴露應用核心配置信息的風險。

有些只使用推送服務的客户希望優化產品移動端體驗,我們為此專門推出了精簡版推送 SDK,顯著優化了安裝包大小(1.2 MB -> 180 KB)和啓動時間(59 ms -> 5 ms)。

Swift & Objective C

Swift SDK 增加了對即時通訊、推送、雲函數調用的支持,並完善了結構化存儲方面的功能,在功能上基本對齊了 Android、Web 平台的 SDK。
有許多 iOS 平台的開發者已經從 Objective C SDK 遷移到 Swift SDK, 還有一些新應用直接基於 Swift SDK 開發。

Swift 語言的演進十分迅捷(swift),Swift SDK 同樣如此,現已支持 Swift 5 和 Swift Package Manager。

Objective C SDK 也增加了一些功能,修復了許多 bug。

另外,為了精簡代碼和集中資源,Swift SDK 不再支持 iOS 10 之前的系統,Objective C SDK 不再支持 iOS 8 之前的系統。

JavaScript

JavaScript SDK 的主要改進有:

  • 小程序用户系統增加了 UnionId 支持。
  • 增加了手動啓用、停用調試模式的開關:debug.enable()debug.disable()
  • AV.File#save 方法增加了 keepFileName 參數允許保留文件的文件名。
  • 增加了 AV.Object#revert 方法撤銷部分或全部修改了但未保存(save)的改動。
  • MESSAGE_UPDATEMESSAGE_RECALL 事件現在會額外返回一個 reason 參數來指示修改、撤回的原因(如果有的話)。
  • 修復和完善了大量 TypeScript 定義。

C Sharp

C# SDK 的主要改進有:

  • 簡化、統一 portable 和 Unity 初始化方式,現在只需要在代碼中初始化,不需要在 Unity Editor 拖拽和設置。
  • 增加消息撤回/修改功能。

結語

在這一年裏,許多用户通過工單、論壇、郵件等各種渠道向我們反饋問題和意見,也有用户向我們開源的 SDK 提交代碼。上面提到的很多新功能、改進、優化都源於用户的反饋。感謝大家的幫助和信賴,我們期待在新的一年裏為用户提供更好的產品和服務。

本文參與了 SegmentFault思否徵文「2019 總結」,歡迎正在閲讀的你也加入。
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.