[英]Websocket app into stateless microservice?
我想按照所有常規做法將我創建的應用程序轉換為適當的微服務。
但是我無法理解如何實現無狀態和水平擴展。 這個特定的應用程序簡而言之執行以下操作。
用戶 A 啟動共享室並連接到 websocket
用戶 B 加入共享室並連接到 websocket
當第三個服務通過 tcp 將一些二進制數據流式傳輸到此服務時,兩個用戶都通過 websockets 獲取數據
把它想象成一群人的視頻流
我試圖了解我將如何管理強制用戶連接到同一個實例,共享室存在於 memory 中,以及這如何可能變得無狀態。
我的一個問題是,當用戶 B 提出加入這個房間的請求時,我怎么知道哪個實例在 memory 中持有這個?
謝謝
您可能需要考慮一個“路由服務”——它將在房間和這些房間所在的服務器之間保持映射。
或者,您可以考慮解耦 websocket 連接處理程序和房間。 所以你有一個服務器 websockers 的服務。 另一項服務負責客房服務。 還有一個 map 用戶使用 websockets。
因此,當用戶加入房間時,會發生兩件事:websocket 將在連接服務中處理,用戶將獲得其 ID 和連接服務實例之間的映射(這不必是特定實例,因為這會泄漏服務實現詳細信息;更多內容見下文)。 此外,Rooms 服務會將用戶注冊到房間。
現在有信息要傳遞給所有人; 每個用戶 ID 都可以解析為一個連接處理程序,並將消息發送到那里。
連接服務可能有 API,例如:傳遞(地址,消息)。 地址對連接服務有意義; 例如 web 服務器的編碼地址,也許還有 websocket id。 這個 api 很好,它減少了連接服務的 scope - 服務只知道如何傳遞消息; 服務對用戶或房間一無所知。
長話短說,您可以定義管理連接、管理房間和管理用戶的服務——並讓他們通過 API 進行交流。 主要目標是將每個服務的 scope 減少到其核心目標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.