簡體   English   中英

實時Web應用程序的體系結構

[英]Architecture of real-time web applications

這將是一個相當理論上的問題。 我目前正在研究我的學士論文,其中包括創建一個基於Web的實時對象同步框架,就像Firebase一樣,但是本地(即不是基於雲的)。
我需要從實時中區分“常規”Web應用程序(有更好的術語嗎?),尤其是在體系結構方面。 到目前為止我的想法:

  • 常規Web應用程序基於客戶端 - 服務器模型,即“客戶端和服務器以請求 - 響應消息傳遞模式交換消息:客戶端發送請求,服務器返回響應”。
  • 實時Web應用程序維護客戶端和服務器之間的持久連接。 兩者都可以通過該連接同時並且彼此獨立地發送和接收消息(全雙工)。
  • 我的顧問(來自應用軟件工程主席)表示,上述觀點已經證明了對等體系結構的申請資格,盡管他不太確定。 我還不確信,因為a)同行不是同質的,b)服務器仍然是一個集中系統,c)我們仍然使用術語“服務器”和“客戶端”。
  • 服務器不直接向特定客戶端發送消息,而是使用發布 - 訂閱消息傳遞模式,即客戶端連接到消息通道,並在服務器在相應通道中發布消息時接收消息。 因此服務器實際上並不知道它的客戶端,盡管他可以知道。
  • 主要用例如下:客戶端向服務器發送消息(例如,當創建新的待辦事項項時),服務器處理它(例如將新的待辦事項項目寫入數據庫)並最終將消息發送給所有其他用戶訂閱的客戶。 我想到了中介模式 ,雖然它是一種行為模式,而不是一種建築模式。
  • 但還有另一個用例:服務器向訂閱的客戶端發送自己的消息(例如,它識別超出todo項目的到期日期並刪除它)。 因此,溝通並不總是必須從客戶端開始。

對不起,它比預期的要長。 簡而言之,我看到了基於Web的實時應用程序架構的三種可能性:

  1. 點對點(具有異構對等體)
  2. 具有pub-sub消息傳遞模式和中介的客戶端服務器(如果后者對於體系結構很重要)
  3. 你用一些完全不同的東西讓我感到驚訝;-)

不確定它是否具有重要性,但我在后端使用Rails (帶有基於JMS的消息傳遞服務,提供WebSocket -support),在前端使用AngularJS

“實時”操作或應用程序或系統具有及時性和可預測性限制。

原則上,這與系統架構無關 - 實際上,架構必須適合您需要的實時屬性。

發布/訂閱機制具有基於從可發布事件發生到事件在所有運營訂戶中顯現的延遲的實時度量 - 簡化,實時=真實快速(想想自動化金融交易)。 但實時性與時效性可預測性同樣重要。 在P / S案例中,感興趣的可預測性是延遲 - 在幅度和可變性方面(“抖動”是一種特殊情況)。 在研究和從業者社區中有很多文獻 - 在你的情況下,我建議閱讀RTI網站上的一些優秀文件(盡管IMHO RTI並沒有盡可能徹底地處理可預測性,但它們做得很好產品)。

非P / S系統(包括但不限於客戶端/服務器系統)具有不同的實時風格。 有許多爭用共享資源的時間約束(比方說)任務(例如處理器,同步器,網絡等)。 必須通過以滿足及時性和可預測性最優性標准的順序調度或調度來解決競爭訪問請求。 每個人都熟悉一個非常簡單的特殊情況,即請求有截止日期,最優標准是滿足所有截止日期。 請注意,“符合期限”及時性標准已與可預測性標准“始終滿足所有”一起表達。

在絕大多數現實世界的實時案例(不僅限於計算機)中,標准要復雜得多 - 例如,實時系統通常要求均值(或者,最大值)延遲要么最小化要么不超過某個值。 依賴性添加了額外的復雜性,例如優先約束。 這種實時方式對架構及其系統軟件的某些屬性有重大影響。 為簡潔起見,上述所有內容都已大大簡化。

我可以通過以下方式之一閱讀您的問題:

a)哪個Peer-to-Peer,Client-Server或其他術語最好地描述了該應用程序?

b)應用程序應使用哪種架構作為其設計的基礎?

在我看來,你的問題很好地描述了應用程序的體系結構,無論你是想將它稱為Peer-to-Peer還是Client-Server或其他東西,這都是無關緊要的。

也就是說,設計的實時方面並沒有因為你提到的原因而成為Peer-to-Peer。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM