【玩轉(zhuǎn) LeanCloud 】活動開發(fā)經(jīng)驗(yàn)分享:
作者:黃濤
大家好,我是 htoooth讹蘑,在一家電商公司做 Node.js 開發(fā)末盔,愛折騰,喜歡追新語言座慰,像 golang陨舱、elixir、clojure版仔、人工智能和 python 都在我的關(guān)注之列游盲。我有一個創(chuàng)業(yè)項(xiàng)目叫視網(wǎng)么,是個做 AR 的互動營銷平臺蛮粮,客戶使用我們的產(chǎn)品可以很方便地將 AR 技術(shù)集成到自己的業(yè)務(wù)中去益缎。我們的產(chǎn)品覆蓋了 iOS、Android 和 Web然想,目前項(xiàng)目全都架在 LeanCloud 的云引擎之上链峭。
LeanCloud 更勝一籌
邂逅 LeanCloud 是在 2014 年。那時我們幾個創(chuàng)始人正打算啟動項(xiàng)目又沾,但缺后端人員,恰好我從博客中了解到了 AVOSCloud(后改名為 LeanCloud)熙卡,了解下來感覺靠譜杖刷,就把它定為候選方案。當(dāng)時像這樣的 BaaS 平臺還是挺多的驳癌,我們跟另外幾家對比后發(fā)現(xiàn) LeanCloud 無論是功能滑燃、文檔,還是 demo 都比較滿足我們的需求颓鲜,于是就決定選它表窘。四年來我們開發(fā)了不少項(xiàng)目,雖然也經(jīng)歷過 LeanCloud 服務(wù)不穩(wěn)定的問題甜滨,但綜合評價(jià)下來乐严,LeanCloud 還是比其他平臺更勝一籌,所以也一直沒換衣摩。最近一年來昂验,我們的產(chǎn)品也有了客戶,對后臺業(yè)務(wù)要求系統(tǒng)穩(wěn)定和技術(shù)支持,于是我們在 2016 年下半年購買了 LeanCloud 付費(fèi)版既琴。順便提下占婉,我覺得 AVOSCloud 改名為 LeanCloud 很贊,更符合他們的產(chǎn)品定位甫恩。
由于項(xiàng)目需要逆济,我們幾乎把 LeanCloud 各種功能和服務(wù)都用了個遍,比如云引擎磺箕、云函數(shù)奖慌、云緩存、云存儲滞磺、實(shí)時通信升薯、統(tǒng)計(jì)分析、REST API击困、JavaScript / iOS / Android SDK 等等涎劈。每次他們推出新功能我們都會關(guān)注一下,說不定什么時候就能派上用場阅茶。下面我來聊聊具體的使用情況吧蛛枚。
填補(bǔ)后端人員空缺,開發(fā)超省力
項(xiàng)目啟動時我們沒有后端開發(fā)人員脸哀,整個團(tuán)隊(duì)只有三個全職外加三個實(shí)習(xí)生蹦浦,開發(fā)能力有限, 只能照顧到 Android 平臺撞蜂。項(xiàng)目的方向是具備 LBS 地理定位功能的社交軟件盲镶,正好 LeanCloud 對聊天和地理定位支持得非常好;而且它還支持第三方登錄蝌诡、密碼和短信多種登錄方式溉贿,這讓我們開發(fā)帳戶系統(tǒng)方便了好多,我們能省出更多時間專注在業(yè)務(wù)本身的邏輯和代碼上浦旱,然后數(shù)據(jù)都往云端一存宇色,在沒寫任何后端代碼的情況下就把產(chǎn)品功能給完成了,當(dāng)時覺得開發(fā)真是太方便了有沒有~颁湖。
云引擎實(shí)現(xiàn)多端共用一套代碼
Android 平臺搞定后宣蠕,我們又來做 iOS 平臺,于是就遇到了如下問題:
- 因?yàn)樗械臉I(yè)務(wù)都在 Android 中甥捺,iOS 必須要再寫一遍業(yè)務(wù)代碼;
- 新功能新需求來了之后抢蚀,要分別在 Android 和 iOS 上實(shí)現(xiàn);
- 關(guān)鍵是業(yè)務(wù)出現(xiàn)了 bug镰禾,客戶端上不好修改思币。
我們的方案是把業(yè)務(wù)代碼從 Android 中抽出來了鹿响,做成了移動端 API,這樣業(yè)務(wù)能在 Android 和 iOS 中共用谷饿,移動端 API 是基于 LeanCloud 的云引擎 Node.js 環(huán)境下開發(fā)的惶我。除此以外,我們的后臺管理系統(tǒng)使用了 Angular.js + LeanCloud JavaScript SDK博投,這樣也實(shí)現(xiàn)了對業(yè)務(wù)級的代碼復(fù)用绸贡。在這個過程中,云引擎和 Node.js 都發(fā)揮了重要作用毅哗。
應(yīng)用資源按需調(diào)配听怕,搭建微服務(wù)架構(gòu)
又過了一段時間,我們對產(chǎn)品和業(yè)務(wù)做了調(diào)整:
- 我們的產(chǎn)品線增加了 sdk虑绵,需要嵌入到客戶的應(yīng)用中尿瞭,接口與我們自己的 app 保持獨(dú)立,并且有自己的用戶系統(tǒng)翅睛;
- app 集成自己的 SDK声搁,用戶系統(tǒng)使用獨(dú)立的用戶系統(tǒng),跟 sdk 的用戶系統(tǒng)不一樣捕发;
- 官網(wǎng) web 從原來的純靜態(tài)頁面變成了動態(tài)網(wǎng)頁疏旨,新增了多個欄目和博客,需要從數(shù)據(jù)庫中讀數(shù)據(jù)扎酷;
- 后臺管理系統(tǒng) cms 變?yōu)?Vue.js + LeanCloud JavaScript SDK 的 SPA 應(yīng)用檐涝,新增了素材管理等多個功能。
可以看出我們對 sdk法挨、app谁榜、cms 和 web 的業(yè)務(wù)需求都不一樣,對資源的需求也不一樣凡纳,于是我們需要再一次調(diào)整我們的項(xiàng)目架構(gòu)——我們不再將每個應(yīng)用看作是一個獨(dú)立的整體惰爬,而是當(dāng)成一個計(jì)算單元和一個存儲單元的組合,這種分割意味著我們既可以單獨(dú)使用計(jì)算單元惫企,也可以單獨(dú)使用存儲單元,或者兩者都使用陵叽,設(shè)計(jì)架構(gòu)也就變得更加靈活了狞尔,這樣做的好處是我們可以按項(xiàng)目劃分出哪些需要計(jì)算,哪些需要存儲巩掺,哪些二者都需要偏序,資源分配比較明確,壞處是應(yīng)用的數(shù)量增加了胖替。
下圖是我們調(diào)整后的功能架構(gòu):
我們整個的應(yīng)用體系使用了 4 個 LeanCloud 應(yīng)用研儒,如上圖所示豫缨,cell1、cell2端朵、cell3 和 cell4好芭。它們各有各的功能側(cè)重點(diǎn):
- cell1,是我們整個應(yīng)用的核心冲呢, 上面部暑了cms舍败、cms API、mobile API敬拓,它的計(jì)算和存儲都至關(guān)重要邻薯;
- cell2,給 app 用的乘凸,只儲存用戶信息厕诡。app 端集成了 LeanCloud SDK,只用了登錄营勤、注冊和第三方登錄的功能灵嫌,同時 app 端還需要調(diào)用 SDK API;
- cell3冀偶,web 服務(wù)器醒第,數(shù)據(jù)源來自 cell1。因?yàn)檫€要做 SEO 需求进鸠,所以沒有用 SPA 應(yīng)用稠曼,而是類似的前后端分離,cell1 提供數(shù)據(jù)接口客年,cell3 進(jìn)行模板渲染霞幅;
- cell4,用來做靜態(tài)資源服務(wù)器量瓜,存儲 css司恳、js、圖片或較大的視頻文件绍傲;
- cell3 和 cell4 給官網(wǎng)使用扔傅。
由于 cell1 承載功能較多,上面的數(shù)據(jù)也至關(guān)重要烫饼,所以我們買了收費(fèi)版本來保證穩(wěn)定性猎塞。cell2、cell3杠纵、cell4 均對穩(wěn)定性沒有要求荠耽,而且請求量也不是很大,所以還用的是開發(fā)版比藻。我們的開發(fā)铝量、測試和灰度環(huán)境也都是按照業(yè)務(wù)的重要性來做出選擇的倘屹。這樣算來,我們通過 8 個 LeanCloud 應(yīng)用的配合與協(xié)作來支撐我們項(xiàng)目的全部架構(gòu)慢叨,而且我們沒有做任何負(fù)載平衡的工作纽匙,全部都依靠 LeanCloud。
我們未來的計(jì)劃是等使用量上來之后插爹,會把 mobile API哄辣、cms API、cms 都分出去成為一個單獨(dú)的應(yīng)用赠尾,再做一個 ApiGateway 進(jìn)行接口的管理工作力穗,也就是未來可能我們的應(yīng)用數(shù)量會超過 10 個。這么多應(yīng)用气嫁,如果用傳統(tǒng)方式來管理至少要三四個人当窗,而用 LeanCloud 我們實(shí)際上只用一個兼職人員就能處理,真要感謝 LeanCloud 的幫助寸宵。
期待的新功能
1.SDK 增加更多語種崖面,如 golang;
2.開放如請求梯影、CPU 等數(shù)據(jù)監(jiān)控接口的巫员;
3.開放如新建應(yīng)用、加入應(yīng)用等運(yùn)維接口甲棍;
4.增加應(yīng)用集群組網(wǎng)的能力简识,如多個應(yīng)用變成一個集群;
5.開放更底層的功能感猛,如網(wǎng)絡(luò)四層 TCP/IP 功能七扰;
6.支持機(jī)器學(xué)習(xí)和人功智能,如 tensorflow陪白、gpu颈走;
7.提供更加高效的開發(fā)環(huán)境,如 IDE 的集成插件咱士、命令行等立由;
8.提供更好的打包開發(fā)部署環(huán)境,如 oschina 的 gitee序厉、LeanCloud锐膜、七牛9.整合一體化方案(這樣一來會方便好多)。
LeanCloud 在基礎(chǔ)平臺和基礎(chǔ)應(yīng)用上的功能點(diǎn)太多了脂矫,用一篇文章可說不完,總之對于一個創(chuàng)業(yè)團(tuán)隊(duì)來說霉晕,LeanCloud 為低成本開發(fā)提供了許多有利條件庭再,我覺得對得起「lean」這個稱號捞奕,最后祝愿 LeanCloud 發(fā)展得越來越好!