
Q: 什么是Parse?
A: Parse是一個基于云端的后端管理平臺。對于開發(fā)者而言,Parse提供后端的一站式和一攬子服務(wù):服務(wù)器配置、數(shù)據(jù)庫管理、API、影音文件存儲,實時消息推送、客戶數(shù)據(jù)分析統(tǒng)計、等等。這樣,開發(fā)者只需要處理好前端/客戶端/手機端的開發(fā),將后端放心的交給Parse即可。目前Parse支持超過50萬個App。
Q: Parse 跟臉書是什么關(guān)系?
A: 臉書(Facebook)于2013年以8500萬美金收購Parse。之后Parse的功能不斷推陳出新。平臺越來越強大的同時,越來越多的開發(fā)者也將App的后臺工作完全交給Parse。但是由于臉書的云戰(zhàn)略一直不是其主要方向,且Parse難以整合進臉書的其他產(chǎn)品,臉書決定于2017年1月28日徹底關(guān)閉Parse。
Q: Parse 有哪些狂拽酷炫的功能/優(yōu)點?
A: Parse 有很多優(yōu)點:支持功能多、API設(shè)計條理清晰、用戶界面簡單易用等等。筆者個人覺得,最深入人心的優(yōu)點為以下兩點:
- 簡單易用。很多對后臺完全沒概念的開發(fā)者也可以快速上手。Parse的界面非常簡潔明了,鼠標點幾下就可以輕松管理后臺。Parse的官網(wǎng)上還有很多的開發(fā)教程和示范,大大降低了理解和運用的難度。門檻很低、擴展空間大,無論是新手還是老手都可以開發(fā)得如魚得水。
- 多平臺支持。Parse在手機端方面支持:iOS,Android, Windows;網(wǎng)頁端支持:Javascript, PHP, .Net;其他還支持:OS X,Cloud,Embedded C,Unity。平臺上的API支持的功能應(yīng)有盡有,幾乎涵蓋開發(fā)的方方面面。
Q: Parse 的缺點有哪些?
A: 在每期的Ask Parse Anything里面,都有開發(fā)者提出各種各樣的問題 - 其中大多數(shù)是由于Parse的文檔不清楚導(dǎo)致的。筆者在這里稍微舉幾個:
- 有限制的API請求,但是Parse的Doc里面并沒有說明
- 數(shù)據(jù)庫不支持大文件,有時候圖片文件稍微大一點就存不進去了
- 通知推送有時候會有延時
- 多線程的支持有限,支持最多同時2個線程,不支持mutex/lock/semaphore
- 對數(shù)據(jù)庫的Join操作非常爛,原因是Parse使用的是MongoDB NoSQL數(shù)據(jù)庫
Q: Parse的內(nèi)部架構(gòu)/運行原理是怎樣的?
A: 首先,Parse SDK的內(nèi)部API傳輸數(shù)據(jù)都是異步且多線程處理的,API主要是基于任務(wù)機制。Parse團隊在服務(wù)器上保持了一個ParseObject的依賴鏈,以此來拼接各種異步操作。他們還為此專門搞出來一個Bolts框架,詳情請參考 Let's Bolt!

其次,Parse采取了典型的解耦架構(gòu)。解耦架構(gòu)就是組成架構(gòu)的不同控件之間互相交流,而又不相互依賴的一種架構(gòu)。比如網(wǎng)站開發(fā),UI前端部分和后端部分是一起構(gòu)成網(wǎng)站整體的。但是他們之間又可以互相獨立開發(fā):UI可以使用模擬數(shù)據(jù)開發(fā),無需等待后端架設(shè)完成。這就是解耦架構(gòu)。
Parse 將整個架構(gòu)分成Parse邏輯網(wǎng)絡(luò),控制器,對象實例三個部分:
- 對象實例通過set和get方法更新數(shù)據(jù)。因為是解耦架構(gòu),所以不用擔(dān)心底層重構(gòu)或者添加新功能的影響;
- 控制器是SDK和對象實例的橋梁。對象實例通過狀態(tài)與控制器交流,狀態(tài)定義了兩者之間的交流的接口,當兩者交流完成后,相應(yīng)的狀態(tài)也會變化。
- 控制器通過REST格式傳給Parse內(nèi)部邏輯網(wǎng)絡(luò),這樣防止不必要的序列化和反序列化。這樣做同時也方便測試。
Q: Parse 有什么很酷的開源項目/工具嗎?
A: 因為Parse馬上要關(guān)閉了,所以他基本上已經(jīng)完全開源了平臺。下面是Parse幾個重要項目的github鏈接:
Q: 與Parse類似的產(chǎn)品?
A: LeanCloud。功能全面,架構(gòu)穩(wěn)定,進步很快。Uber、知乎等App都使用的后端服務(wù)平臺。團隊陣容也十分強大。國產(chǎn)的技術(shù)產(chǎn)品能走向世界的不多,筆者很看好。
參考文獻
What are the advantages and disadvantages of using Parse as a mobile app backend?