91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于一個 websocket 多節點分布式問題的面試題

發布時間:2020-07-27 20:38:25 來源:網絡 閱讀:953 作者:wx5d6cccb1cb158 欄目:編程語言

你來說說 websocket 有什么用

雙向通信,服務器端可以主動 push,給客戶端發送通知

那websocket多個節點有什么問題?

頭條面試官的提問讓我的回憶飄到了一個下午,想起了我兩個同事之間的對話

引子

咱有部分用戶收不到通知了

通知是由ws服務控制的,它最近是有啥改動么

也沒改啥,以前單個節點也沒有問題

想起來了,接上面通知,把服務都從單節點改成了多節點

對,說是為了什么 HA,兩位數用戶的服務需要折騰嗎

沒事,這樣出去了也有搭建高可用服務與 websocket 負載均衡的經驗了

說的倒也是!不過這樣確實會有 ws 分布式的問題

簡單,加個 reids 就好了

多節點問題

在開始思考分布式會有什么問題時,先來回答一個問題: 服務端如何與客戶端交流?

在 ws 服務端,當與客戶端連接成功后,會生成一個對象 connection ,ws 會維護一個與客戶端所有連接的 connections 。如果想要主動推送消息到客戶端,只需要調用API connection.sendText(message) 。

那如何給所有人廣播消息呢?

服務器只需要與它自身的所有連接 server.connections 挨個發消息就是廣播,所以它只是一個偽廣播:我要給群里所有人發消息,但我不能在群里發,只能挨個私發。

單節點

當單節點時所有用戶都能正常受到通知,流程如下
關于一個 websocket 多節點分布式問題的面試題

這時所有用戶都能收到消息通知

多節點

當多節點時,就會有部分用戶無法正常受到通知,從以下流程圖中可以很清楚地看到問題所在
關于一個 websocket 多節點分布式問題的面試題

負載到節點2的所有用戶都沒有收到消息通知

如何解決

多節點服務器就會有分布式問題,解決分布式問題就找一個大家都能找到的地,比如說 Redis,比如說 Kafka 等消息件

改進后流程圖如下

1.需要向所有用戶推送消息,請求 websocket 服務
2.負載均衡到某個節點
3.該節點向 redis/kafka 推送消息: 向所有用戶推送消息通知
4.所有節點在 redis/kafka 上訂閱消息
5.訂閱成功后所有節點向客戶端 push 消息

關于一個 websocket 多節點分布式問題的面試題

redis PUBSUB

其中有一個細節是 pub/sub 那里,redis 的 pubsub 較 Kafka 等消息中間件更為輕便, 最主要的是與ws集成的社區方案比較成熟,這點很重要 ,如 Node 中的以下兩個

graphql subscriptions - redis
socket.io-redis
pubsub 在 redis 中的命令如下

publish channel message
subscribe

如果我們要訂閱 eat 這個 channel 的話,圖示如下
關于一個 websocket 多節點分布式問題的面試題

小結

借用解決方案的圖作為小結
關于一個 websocket 多節點分布式問題的面試題

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吉木乃县| 紫阳县| 中阳县| 兴文县| 亚东县| 西乡县| 咸丰县| 海阳市| 广德县| 秀山| 漳平市| 五家渠市| 周宁县| 固原市| 科技| 嘉峪关市| 固安县| 政和县| 东丰县| 宁陵县| 西吉县| 德保县| 堆龙德庆县| 阿瓦提县| 大荔县| 剑阁县| 萨迦县| 宜章县| 西乌珠穆沁旗| 雷波县| 托克逊县| 清水县| 夏邑县| 双辽市| 湘乡市| 莱州市| 芷江| 丹棱县| 科技| 双峰县| 马尔康县|