鏡像API驅(qū)動的應(yīng)用程序的興起,實時正在成為現(xiàn)代應(yīng)用程序開發(fā)中一種新興的,無所不在的力量。它為即時消息,實時體育源,地理定位,大數(shù)據(jù)和社交饋送提供動力。但是,什么是實時,它究竟意味著什么?什么類型的軟件和技術(shù)為這個行業(yè)提供動力?讓我們深入研究它。
什么是實時的?
實時可以在更相對的時間意義上定義。這可能意味著A的變化與B的變化同步?;蛘?,它可能意味著A的變化會立即觸發(fā)B的變化?;蛘?.....這可能意味著A告訴B某些事情發(fā)生了變化,但B沒有做任何事情。或者......這是否意味著A告訴每個人一些變化,但不關(guān)心誰在聽?
讓我們深入挖掘一下。實時并不一定意味著某些東西會立即更新(事實上,“瞬間”沒有單一的定義)。所以,我們不要關(guān)注效果,而應(yīng)關(guān)注機制。實時是關(guān)于盡可能快地推送數(shù)據(jù) - 它是端點之間的自動,同步和雙向通信,速度在幾百毫秒之內(nèi)。
同步意味著兩個端點可以同時訪問數(shù)據(jù)。
雙向意味著可以向任一方向發(fā)送數(shù)據(jù)。
端點是數(shù)據(jù)的發(fā)送者或接收者(電話,平板電腦,服務(wù)器)。
幾百毫秒是一個有點隨意的指標(biāo),因為數(shù)據(jù)不能立即傳遞,但它最接近人類認(rèn)為的實時(羅伯特米勒在1986年證明了這一點)。
考慮到這個定義及其注意事項,讓我們探討推送數(shù)據(jù)的概念。
數(shù)據(jù)推送
我們首先將數(shù)據(jù)推送與“請求 - 響應(yīng)”進(jìn)行對比。請求 - 響應(yīng)是計算機系統(tǒng)通信的最基本方式。計算機A?從計算機B?發(fā)送請求,計算機B?響應(yīng)答復(fù)。換句話說,您可以打開瀏覽器并輸入“reddit.com”。瀏覽器向Reddit的服務(wù)器發(fā)送請求,然后他們回復(fù)網(wǎng)頁。
在數(shù)據(jù)推送模型中,數(shù)據(jù)被推送到用戶的設(shè)備而不是由用戶拉出(請求)。例如,現(xiàn)代推送電子郵件允許用戶無需手動檢查即可接收電子郵件。同樣,我們可以更連續(xù)地檢查數(shù)據(jù)推送,從而持續(xù)廣播數(shù)據(jù)。有權(quán)訪問特定頻道或頻率的任何人都可以接收該數(shù)據(jù)并決定如何處理該數(shù)據(jù)。
此外,目前有幾種方法可以實現(xiàn)數(shù)據(jù)推送/流式傳輸:
HTTP流媒體
HTTP流式傳輸為即時和連續(xù)數(shù)據(jù)推送提供了長期連接。您可以熟悉HTTP與WebSockets的性能。客戶端向服務(wù)器發(fā)送請求,服務(wù)器將響應(yīng)打開無限長度。此連接將保持打開狀態(tài),直到客戶端關(guān)閉它或發(fā)生服務(wù)器端方事件。如果沒有要推送的新數(shù)據(jù),應(yīng)用程序?qū)l(fā)送一系列保持活動的滴答,以便連接不會關(guān)閉。
WebSockets
WebSockets提供了一個長期連接,用于在客戶端和服務(wù)器之間交換消息。消息可以在任一方向上流動以進(jìn)行全雙工通信。這種雙向連接是通過WebSocket握手建立的。就像在HTTP Streaming和HTTP Long-Polling中一樣,客戶端首先向服務(wù)器發(fā)送常規(guī)HTTP請求。如果服務(wù)器同意連接,則HTTP連接將替換為WebSocket連接。
網(wǎng)絡(luò)掛接
Webhooks是在服務(wù)器之間發(fā)送數(shù)據(jù)的簡單方法。不需要長期連接。當(dāng)有數(shù)據(jù)要推送時,發(fā)送方向接收方發(fā)出HTTP請求。WebHook注冊或“掛鉤”回調(diào)URL,并在事件發(fā)生時隨時通知您。您事先注冊此URL,并且當(dāng)事件發(fā)生時,服務(wù)器將帶有事件對象的HTTP POST請求發(fā)送到回調(diào)URL。此事件對象包含將推送到回調(diào)URL的新數(shù)據(jù)。如果要接收有關(guān)某些主題的通知,可以使用WebHook。它還可用于在用戶更改或更新其個人資料時通知您。
HTTP長輪詢
HTTP長輪詢為即時數(shù)據(jù)推送提供了長期連接。它是最簡單的消費機制,也是最容易使用的機制。該技術(shù)為即時數(shù)據(jù)推送提供了長期連接。服務(wù)器保持請求打開,直到出現(xiàn)新數(shù)據(jù)或超時。大多數(shù)在30到120秒后發(fā)送超時,這取決于API的設(shè)置方式。在客戶端收到響應(yīng)(無論是來自新數(shù)據(jù)還是超時)后,客戶端將發(fā)送另一個請求,并且會不斷重復(fù)此請求。
推動數(shù)據(jù)難嗎?是的,特別是在規(guī)模上(例如,同時推動對數(shù)百萬部手機的更新)。為了滿足這種需求,出現(xiàn)了一個完整的實時行業(yè),我們將其定義為實時基礎(chǔ)架構(gòu)即服務(wù)(Realtime IaaS)。
實時圖書館
以下是可供開發(fā)人員根據(jù)特定語言/框架構(gòu)建實時應(yīng)用程序的資源匯編:
.NET / C#
使用Javascript
的Ruby / Rails
Node.js的
PHP
走
蟒蛇
Java的
iOS版
Android的
實時基礎(chǔ)架構(gòu)即服務(wù)
根據(jù)Gartner的說法,“基礎(chǔ)架構(gòu)即服務(wù)(IaaS)是一種標(biāo)準(zhǔn)化,高度自動化的產(chǎn)品,其中計算資源由存儲和網(wǎng)絡(luò)功能補充,由服務(wù)提供商擁有和托管,并按需提供給客戶。客戶可以使用基于Web的圖形用戶界面自行配置此基礎(chǔ)架構(gòu),該界面可用作整個環(huán)境的IT操作管理控制臺。對基礎(chǔ)設(shè)施的API訪問也可作為選項提供。“
我們經(jīng)常在這里使用PaaS(平臺即服務(wù))和SaaS(軟件即服務(wù)),那么它們與IaaS有何不同?
基礎(chǔ)架構(gòu)即服務(wù)(IaaS):硬件由外部提供商提供并為您管理。
平臺即服務(wù)(PaaS):為您管理硬件和操作系統(tǒng)層。
軟件即服務(wù)(SaaS):為平臺和基礎(chǔ)架構(gòu)(為您管理)提供應(yīng)用程序?qū)印?/span>
為了實時提供動力,應(yīng)用程序需要經(jīng)過精心設(shè)計的服務(wù)器,API,負(fù)載平衡器等系統(tǒng)。而不是在內(nèi)部構(gòu)建這些系統(tǒng),組織發(fā)現(xiàn)購買大部分系統(tǒng)基礎(chǔ)設(shè)施更具成本效益和資源效率,然后在內(nèi)部開車。因此,這些系統(tǒng)不僅僅是IaaS,而且通常提供平臺和軟件層來幫助管理。從根本上講,它們的核心優(yōu)勢在于它們提供實時基礎(chǔ)架構(gòu),無論您是在內(nèi)部托管還是依賴托管實例
這一切都?xì)w結(jié)為一個簡單的事實,實時是很難的原因有很多:
客戶正常運行時間需求??- 依賴于實時更新的客戶將立即注意到您的網(wǎng)絡(luò)性能不佳。
水平可擴展性??- 您必須能夠處理系統(tǒng)上的易失性和大量負(fù)載,否則可能會導(dǎo)致停機。這通常通過巧妙的水平可擴展性和能夠管理數(shù)百萬個同時連接的系統(tǒng)來實現(xiàn)。
架構(gòu)復(fù)雜性??- 維護(hù)高性能的實時系統(tǒng)不僅復(fù)雜,而且需要豐富的經(jīng)驗和專業(yè)知識。購買起來很昂貴,尤其是在當(dāng)今高需求的工程市場。
意外情況??- 不可避免地,無論是由于預(yù)期的負(fù)載峰值還是新發(fā)布的功能,您的系統(tǒng)都會遇到一些停機時間。因此,如果主要實時機制無法執(zhí)行,則必須具有多個正常運行時間,以確保系統(tǒng)知道該怎么做。
排隊??- 當(dāng)您發(fā)送大量數(shù)據(jù)時,您可能需要一個中間排隊機制,以確保您的后端進(jìn)程不會因增加的消息負(fù)載而負(fù)擔(dān)過重。
實時應(yīng)用程序IaaS
實時應(yīng)用基礎(chǔ)架構(gòu)將數(shù)據(jù)發(fā)送到瀏覽器和客戶端。它通常使用發(fā)布/訂閱消息,webhook和/或websockets - 并且與應(yīng)用程序或服務(wù)的主API分開。這些解決方案最適合那些尋求實時消息傳遞而無需構(gòu)建自己的實時API的組織。
這些系統(tǒng)還在其基礎(chǔ)架構(gòu)產(chǎn)品之上提供了更加精心構(gòu)建的平臺/軟件管理工具。例如,領(lǐng)先的提供商具有內(nèi)置配置工具,如訪問控制,事件委托,調(diào)試工具和通道配置。
Realtime App IaaS的優(yōu)點
速度 - 通常明確設(shè)計用于向最終用戶設(shè)備(包括智能手機,平板電腦,瀏覽器和筆記本電腦)提供低延遲的數(shù)據(jù)。
多個SDK,便于集成。
使用全球分布的實時數(shù)據(jù)傳輸平臺。
多協(xié)議適配器。
在生產(chǎn)環(huán)境中經(jīng)過良好測試。
將內(nèi)部配置保持在最低限度。
用例
雖然有些平臺的功能不同,但以下是一些最典型的用例:
實時聊天??- 在微服務(wù)環(huán)境中,實時API代理可以輕松地從其他微服務(wù)中偵聽即時更新,而無需集中式消息代理。每個微服務(wù)都有自己的代理實例,微服務(wù)通過組織自己的API契約而不是供應(yīng)商特定的機制相互通信。
物聯(lián)網(wǎng)設(shè)備控制??- 在連接互聯(lián)網(wǎng)的設(shè)備之間安全地監(jiān)控,控制,配置和傳輸數(shù)據(jù)。
地理跟蹤/映射實時更新??- 與(谷歌地圖)等其他實時API集成,以構(gòu)建豐富的實時更新。
多人游戲同步??- 在多個同時玩家之間同步通信以保持游戲流暢。
解決方案
以下是一些實時應(yīng)用程序IaaS提供程序(托管),以便進(jìn)一步學(xué)習(xí):PubNub,Pusher和Ably。
用于API開發(fā)的實時API IaaS
實時API基礎(chǔ)架構(gòu)專門允許開發(fā)人員將實時數(shù)據(jù)推送到其現(xiàn)有API中。通常,您不需要修改現(xiàn)有的API合同,因為流服務(wù)器將充當(dāng)代理。代理設(shè)計允許這些服務(wù)很好地適應(yīng)API堆棧。這意味著它可以從REST API繼承其他工具,例如身份驗證,日志記錄,限制等,因此,它可以輕松地與API管理系統(tǒng)結(jié)合使用。在WebSocket消息被代理為HTTP請求的情況下,消息可以由后端無狀態(tài)地處理。來自單個連接的消息甚至可以在一組后端實例中進(jìn)行負(fù)載平衡。
總而言之,實時API IaaS用于API開發(fā),專門針對需要構(gòu)建高性能實時API(如Slack,Instagram,Google等)的組織。所有這些組織都在內(nèi)部構(gòu)建和管理其基礎(chǔ)架構(gòu),因此IaaS產(chǎn)品可以被認(rèn)為是將這些功能擴展到缺乏從頭開始構(gòu)建實時API的資源和技術(shù)專業(yè)知識的組織的一種方法。
Realtime API IaaS的優(yōu)點
自定義構(gòu)建內(nèi)部API。
適用于現(xiàn)有的API管理系統(tǒng)。
不會將您鎖定在特定的技術(shù)堆棧中。
提供整個堆棧的實時功能。
通常基于代理,具有發(fā)布/訂閱或輪詢。
無論后端語言或數(shù)據(jù)庫是什么,都可以將實時添加到任何API。
云或自托管API基礎(chǔ)架構(gòu)。
它可以繼承REST API中的工具,例如身份驗證,日志記錄,限制。
用例
雖然有些平臺的功能不同,但以下是一些最典型的用例:
API開發(fā)??- 正如我們所討論的,您可以在現(xiàn)有API基礎(chǔ)架構(gòu)之上構(gòu)建自定義實時API。
微服務(wù)??-在微服務(wù)環(huán)境,實時API代理可以方便地監(jiān)聽來自其他微服務(wù)的即時更新,而不需要一個集中的消息代理。每個微服務(wù)都有自己的代理實例,微服務(wù)通過組織自己的API契約而不是供應(yīng)商特定的機制相互通信。
消息隊列??- 如果要推送大量數(shù)據(jù),則可能需要引入中間消息隊列。這樣,后端進(jìn)程可以將數(shù)據(jù)一次發(fā)布到消息隊列,并且隊列可以通過適配器將數(shù)據(jù)中繼到一個或多個代理實例。實時代理能夠?qū)⒂嗛喰畔⑥D(zhuǎn)發(fā)到這樣的適配器,以便消息只能發(fā)送到具有給定通道訂戶的代理實例。
API管理??- 可以將API管理系統(tǒng)與實時代理相結(jié)合。大多數(shù)API管理系統(tǒng)也用作代理服務(wù)器,這意味著您需要做的就是將代理鏈接在一起。將實時代理放在前面,這樣API管理系統(tǒng)就不會受到長期連接的影響。此外,實時代理通??梢詫ebSocket協(xié)議轉(zhuǎn)換為HTTP,從而允許API管理系統(tǒng)對轉(zhuǎn)換的數(shù)據(jù)進(jìn)行操作。
大規(guī)模CDN性能??- 由于實時代理實例不會相互通信,并且消息傳遞可以分層,這意味著實時代理實例可以在地理上分布以創(chuàng)建實時推送CDN。客戶端可以連接到最近的區(qū)域邊緣服務(wù)器,事件可以從數(shù)據(jù)源輻射到邊緣。