0
本文作者: 溫曉樺 | 2016-05-14 08:50 |
隨著互聯(lián)網(wǎng)科技的發(fā)展,互聯(lián)網(wǎng)行業(yè)的分工也會像其它行業(yè)一樣逐漸細化,后端服務也是這樣被抽象出來,即BaaS(后端即服務)。在移動后端服務系統(tǒng)(MBaaS)中,云服務公司為移動應用、智能設備開發(fā)者提供整合云后端的邊界服務,包括文件數(shù)據(jù)存儲、實時推送、即時通訊等實現(xiàn)難度較高的功能,以幫助開發(fā)者快速開發(fā)應用。
物聯(lián)網(wǎng)時代,在國外BaaS服務已經(jīng)受到巨頭的重視,F(xiàn)acebook收購Parse、蘋果發(fā)布了CloudKit、Google收購了Firebase:Parse、CloudKit、FIREBASE都是國外知名的BaaS類產(chǎn)品,巨頭們都希望通過BaaS服務來完善生態(tài)。在今年三月舉行的谷歌全球云用戶會議上,谷歌云服務高級副總裁黛安·格林(Diane Greene)表示,“這將是一個長期性、永久性業(yè)務”。
除了國外巨頭,國內(nèi)也有數(shù)家創(chuàng)業(yè)公司瞄準于后端服務市場。云巴就是這樣一種后端云服務產(chǎn)品,主要面向智能硬件提供跨平臺、跨設備的實時消息交換服務。
云巴CEO張虎表示,對于開發(fā)者而言,有了后端服務,他們只需專注于具體業(yè)務和邏輯的實現(xiàn),無需關(guān)心后端基礎設施構(gòu)建、運維、服務器托管、網(wǎng)絡、性能調(diào)優(yōu)等工作。對各巨頭來說,則各有各的布局:
對于Facebook來說,
在收購Parse后,F(xiàn)acebook希望結(jié)束應用之間的信息孤島狀態(tài),讓不同應用之間的內(nèi)容能夠互通和無縫跳轉(zhuǎn),于是就發(fā)布了一個名為AppLinks“協(xié)議”,但這個協(xié)議背后則需要Parse這樣的后端服務提供數(shù)據(jù)存儲、計算能力、Push通知等一系列技術(shù)支撐。
但很不幸的是,在激烈的云服務競爭中,Parse戰(zhàn)況不利,F(xiàn)acebook也于今年初關(guān)閉該服務。
而對于蘋果來說,
CloudKit可以提供完善且有彈性的后端解決方案,幫助開發(fā)者減輕編寫服務器代碼和維護服務器的需求。很明顯,蘋果此舉也是為了降低開發(fā)iOS應用的成本,維護iOS生態(tài)圈的繁榮。
除了收購Firebase,Google還在去年10月收購應用開發(fā)平臺Divshot,并將其整合至FIREBASE,使得應用開發(fā)變得更為簡單。
就像FIREBASE創(chuàng)始人James Tamplin在博客上說的那樣,F(xiàn)IREBASE和Google Cloud Platform可以很好的互補。也許像蘋果為iOS開發(fā)者提供了CloudKit那樣,Google也可以利用類似的服務來為Android生態(tài)圈的開發(fā)者們提供便利。
歸根結(jié)底,還是生態(tài)系統(tǒng)建設問題。
比如,做出一個視頻的彈幕應用也會困難到要找第三方嗎?
后端服務出現(xiàn)之前,應用、智能硬件的開發(fā)需要為其消息傳輸、數(shù)據(jù)統(tǒng)計、儲存、實時通訊等功能自行搭建服務器架構(gòu),包括搭建數(shù)據(jù)庫與服務器集群等等。但是,產(chǎn)品本身和互聯(lián)網(wǎng)基礎工作關(guān)系不大,這些工作屬于產(chǎn)品企業(yè)的非主流業(yè)務,不僅復雜繁重,消耗的經(jīng)歷和資源過多,并將拉長產(chǎn)品最終走向市場的開發(fā)周期。張虎透露,一個不熟悉后端服務的應用或智能硬件創(chuàng)業(yè)團隊,如果要自建后端服務,投入30人左右也需要耗時兩到三年才能完成,而且效果未必能夠?qū)I(yè),比如出現(xiàn)通訊延遲、消息發(fā)送成功率較低等。比如,某些通過藍牙傳輸?shù)闹悄苁直?,在實時顯示上存在大約兩秒的延遲。而這些投入——包括租用服務器等,甚至要耗費數(shù)千萬人民幣的成本,使得非主流業(yè)務成本還高于主產(chǎn)品。
所以,除了包辦后端搭建,后端服務更重要的是解決效率問題——雙向通信、數(shù)據(jù)采集和統(tǒng)計等過程的快速和穩(wěn)定。以實時通信功能為例,張虎解釋稱,在一個家庭的智能水網(wǎng)系統(tǒng)中,后端服務可以實時采集每個感應水流的傳感器的數(shù)據(jù),然后分析每一段管道的水流速、流量,來達到監(jiān)測水流是否泄漏的目的,同時可將結(jié)果發(fā)送到PC、手機端。如果發(fā)現(xiàn)水流速度和流量數(shù)據(jù)異常,那么系統(tǒng)可定位找出泄漏的部位。根據(jù)傳感器的密集程度,最高可定位到米級范圍。又比如說,智能兒童手表的對講功能,一端的用戶發(fā)出的音頻首先經(jīng)過服務器轉(zhuǎn)錄,再到達另一端設備接收,等等。
在這些場景下,信息傳輸?shù)乃俣群头€(wěn)定性成為了決定設備服務性能好壞的關(guān)鍵因素。張虎表示,如今智能硬件早已不限于手機、平板、可穿戴的范疇,也加入了機器人、智能家居等等,面對逐漸增長的場景和海量數(shù)據(jù),降低通訊延遲、保證推送穩(wěn)定等提高通訊效率的做法就成為了后端云服務的主要任務。目前,國外頂尖的水平是,PubNub公司創(chuàng)造的全球網(wǎng)絡范圍內(nèi)最大250毫秒的延遲,相對而言,云巴面對國內(nèi)網(wǎng)絡則做到了60毫秒以內(nèi)的延遲(注意是國內(nèi)網(wǎng)絡)。
以往,后端云服務主要針對于應用,張虎在創(chuàng)立云巴前,就主導創(chuàng)立了專注于為移動app提供后端服務的極光推送。而隨著物聯(lián)網(wǎng)和智能硬件的興起,屬于張虎第二次創(chuàng)業(yè)的云巴則針對智能硬件的實時通訊領(lǐng)域。
云巴CEO張虎表示,對比移動應用,智能設備開發(fā)對消息延遲更加敏感,對流量功耗上要求更高。在云巴的客戶中,主動申請付費服務的更多來自于智能硬件用戶。“移動應用的使用門檻較低,損失代價較少,消費者和開發(fā)者對其的期望較低。智能硬件不同,每一件產(chǎn)品都需要一定價格或成本來生產(chǎn)、買入,如果因為功能服務表現(xiàn)不佳,則更容易引來消費者的投訴,智能硬件商為了保證產(chǎn)品體驗,寧愿選擇付費。兩者的差異是互聯(lián)網(wǎng)的產(chǎn)品特點決定的?!边@些選擇付費的客戶,云巴會為其提供通信的獨享通道。
張虎表示,目前兩個終端之間的通訊需要經(jīng)過網(wǎng)關(guān)、路由等組成的二三十次跳數(shù),那么保證消息的準確發(fā)送、快速發(fā)送,就需要減少網(wǎng)關(guān)的跳數(shù),且突破單機限制。張虎表示,除了給付費用戶提供獨享通道這樣的普遍模式,云巴做得更多的是“細活”,從架構(gòu)上進行調(diào)整。
“也許我們都發(fā)現(xiàn)一個有趣的現(xiàn)象,一般游戲房間、聊天室等等一般最多容納300或500人,這個特別的數(shù)字主要來源于:對一臺服務器來說,300人的數(shù)據(jù)量是能夠維持較好體驗的水平?!睆埢⒈硎?,一個架構(gòu)的設計,即物理基因已經(jīng)決定服務器的最佳容量,“但我們可以想辦法突破這個單機限制,把數(shù)據(jù)分布到不同的服務器上,讓通訊終端突破300人的限制?!?/p>
“其實最理想的方式也是把通訊降低到一跳,即所有任務在一個服務器完成然后發(fā)送,但這樣有一個悖論:當把一個服務器做到強大時,一旦這個服務器出現(xiàn)問題,那么所有服務都將失效?!睘榇?,云巴把服務器按照業(yè)務邏輯分成若干集群,當一個集群由于壓力或者其他一些因素導致服務出現(xiàn)問題,那么另一個對等的集群就可以替代頂上,使服務穩(wěn)定下來。
據(jù)悉,云巴目前使用的Cache集群是Couchbase集群和Redis集群。其中Couchbase可以讓數(shù)據(jù)自動在多個節(jié)點備份,單節(jié)點失效不會影響業(yè)務,而且支持業(yè)務自動分片(autosharing)。所謂自動分片,就是把同類型的業(yè)務自動分配到不同的機器上。
每一個優(yōu)秀的產(chǎn)品除了技術(shù)上的完善,還需要根據(jù)業(yè)務場景的打磨細節(jié),根據(jù)細節(jié)做出一些取舍。比如,語言方面,云巴選擇了非常冷門的Erlang語言。
Erlang是一種面向并發(fā)和消息的函數(shù)式編程語言。Erlang設定的是競爭式的協(xié)程,在Erlang編程語言中,Erlang進程是并發(fā)并且獨立執(zhí)行的,輕量并且有自己的堆??臻g。也就是說,每一個Erlang進程完全是私有的,兩個Erlang進程之間的堆??臻g不會被共享。這就好比高架橋和并行的車道,相互是獨立的,不能竄道,這樣很大程度提高了運輸?shù)男屎退俣取?/p>
對比C++、Java,Erlang只在一個小圈子內(nèi)流行,但是,將線程放在用戶空間內(nèi)自行調(diào)度(協(xié)程)是為了獲得盡可能大規(guī)模的并發(fā)能力,與Go\Nodejs的協(xié)作式不同,競爭式的決策則為大規(guī)模的多人開發(fā)提供了保證,避免某個協(xié)程的死循環(huán)或過量運算影響其他任務的進行。同時,Erlang維護和開發(fā)了一整套中間層工具OTP,而這些工具、框架也正是被用來開發(fā)諸如分布式服務器、錯誤處理、數(shù)據(jù)庫等應用的利器。Erlang不提倡防御式編程,它認為程序既然遇到錯誤就應該讓它崩潰,這樣一旦出現(xiàn)錯誤就可以第一時間被發(fā)現(xiàn),加以補救措施,可以將損失降到最小。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。