類INSTAGRAM服務(wù)的技術(shù)架構(gòu)思考
當下移動互聯(lián)網(wǎng)照片分享及輕博客類服務(wù)極度紅火。類Instagram的照片分享服務(wù),國外的服務(wù)包括Instagram、Color、Path、Picplz、Foodspotting等;國內(nèi)的類Instagram包括推圖、圖釘、隨拍、丁仔、樂么樂么、冒泡拍拍等。而國外的輕博客類服務(wù)包括Tumblr、Zpad、Posterous等,國內(nèi)的輕薄博客服務(wù)包括點點、推他等。
除了對這些服務(wù)的產(chǎn)品及業(yè)務(wù)模式感興趣外,對后端的技術(shù)架構(gòu)也很感興趣。只不過即使像highscalability.com這樣專注架構(gòu)的網(wǎng)站對于此類新服務(wù)的技術(shù)架構(gòu)似乎沒有太多的描述,沒有太多可以參考的。
此類服務(wù)在技術(shù)上主要涉及海量照片處理、客戶端與服務(wù)器端通信、與其他服務(wù)同步等,簡單畫個系統(tǒng)部署架構(gòu)圖。
從技術(shù)架構(gòu)角度來看,這些服務(wù)需要處理如下一些典型技術(shù)挑戰(zhàn):
1、與其他SNS社區(qū)服務(wù)同步是采用客戶端同步還是服務(wù)器端同步?
由于現(xiàn)在Basic認證接口逐漸被淘汰掉,像Twitter、新浪微博等大部分服務(wù)基本都采用oAuth接口,需要客戶端主動發(fā)起授權(quán)操作,不能由服務(wù)器端發(fā)起。
除oAuth接口之外的接口如果采用客戶端同步的一些問題:
1)、如果要同步的SNS社區(qū)多,則客戶端要針對不同的SNS社區(qū)同步,效率不高,尤其是要占用較大的帶寬流量
2)、如果SNS社區(qū)的接口稍有變動,需要客戶端升級,很麻煩
3)、對Twitter這樣被G.F.W封鎖的賬戶,客戶端需要翻墻才能夠同步
結(jié)論:不采用客戶端同步方式??蛻舳藢⑾嚓P(guān)請求傳遞給服務(wù)器,由服務(wù)器端來完成同步操作。
2、由于類Instagram服務(wù),圖片是主要內(nèi)容形式。因此需要重點考慮圖片服務(wù)器的架構(gòu),尤其是海量圖片的情況。比較現(xiàn)實的方案可以參考圖片服務(wù)器選型方案 ,理想的方案可以參考借鑒Facebook的haystack 。
另外由于涉及大量的縮略圖處理,可以采用Gearman分布式計算框架+GraphicsMagick來做縮略圖的處理。
3、由于涉及與相關(guān)SNS社區(qū)接口服務(wù)的同步,為保證系統(tǒng)的性能,應(yīng)當將同步服務(wù)與核心服務(wù)分離開,核心服務(wù)在接收到客戶端請求后,將需要同步的數(shù)據(jù)通過消息隊列方式傳遞給同步服務(wù)器,由同步服務(wù)器異步完成相關(guān)接口服務(wù)的同步。
4、由于是內(nèi)容導(dǎo)向的服務(wù),因此可以采用Redis等NOSQL來存放oAuth Access Token、微博、用戶注冊信息等需要持久化的數(shù)據(jù)
5、翻墻問題
由于這些服務(wù)一般都提供與現(xiàn)有各種SNS社區(qū)服務(wù)同步的功能。在技術(shù)上相對容易,只需要一個一個搞定各服務(wù)提供商所提供的接口,即使現(xiàn)成的接口不完善,也可以通過抓接口報文模擬搞定。
但如果需要將用戶上傳的圖片與Twitter、Facebook等國外服務(wù)的賬號同步,由于這些服務(wù)被墻掉了,如果服務(wù)器本身放在國內(nèi),可以在國外放一臺同步代理服務(wù)器來與國內(nèi)服務(wù)器同步,然后由這臺服務(wù)器完成與國外服務(wù)的同步。如果服務(wù)器放在國外,倒是相對省心,但也要考慮在服務(wù)有點知名度后,服務(wù)本身被墻掉的可能性。
6、客戶端與服務(wù)器端間通信相關(guān)技術(shù)實現(xiàn)
客戶端與服務(wù)器端的通信協(xié)議數(shù)據(jù)壓縮傳輸;
客戶端對諸如照片預(yù)處理(例如適當降低分辨率)、多線程并發(fā)分片傳輸、斷點續(xù)傳處理;
客戶端本地存儲、緩存,對離線狀態(tài)下編輯數(shù)據(jù)與服務(wù)器端同步處理問題;
客戶端并發(fā)請求圖片服務(wù)器、業(yè)務(wù)服務(wù)器(不同域名),提高并發(fā)處理效率
7、搜索引擎服務(wù)除了要對文本內(nèi)容搜索外,還涉及地理位置信息的搜索、實時搜索問題,而Lucene和Solr對此支持相對于Sphinx等搜索引擎更好,因此采用Solr或Lucene。
服務(wù)本身如果要對外提供接口服務(wù),倒是可以考慮PubSubHubBub協(xié)議。
來源:http://www.yeeach.com
- 目前還沒評論,等你發(fā)揮!