如何為產(chǎn)品添加實時功能并構(gòu)建實時API


鏡像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,PusherAbly

用于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ù)源輻射到邊緣。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,711評論 19 139
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,329評論 2 89
  • 紫藤花的牽掛閱讀 230評論 0 0
  • 昨天,我們開始了我們班一學(xué)期一度的童話劇人物競選。上上個學(xué)期我們演的童話劇是綠野仙蹤,我競選的是鐵皮人...
    胡啟炎閱讀 323評論 1 1
  • 隨筆,昨天沒有動筆,奈何不過一個字:懶
    Elephant向陽花閱讀 178評論 0 0

友情鏈接更多精彩內(nèi)容