日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

SpringBoot生產級WebSocket集群實踐,支持10萬連接!

來源: 責編: 時間:2024-02-02 09:21:52 215觀看
導讀1、問題背景智慧門診系統旨在從一定程度上解決患者面臨的三長一短(掛號、看病、取藥時間長,醫生問診時間短)的問題。實現“診前、診中、診后”實時智能一體化,整合完善醫院工作流程。圍繞門診看病的各個環節,讓患者全程手

1、問題背景

智慧門診系統旨在從一定程度上解決患者面臨的三長一短(掛號、看病、取藥時間長,醫生問診時間短)的問題。實現“診前、診中、診后”實時智能一體化,整合完善醫院工作流程。圍繞門診看病的各個環節,讓患者全程手機有提醒,讓患者少排隊、少跑腿、看病更簡單,獲得全流程的陪伴服務從而有效提升就醫體驗。wGn28資訊網——每日最新資訊28at.com

系統通過接收醫院第三方系統推送的門診數據,再結合業務服務處理后主動推送到前端,從而實時的將數據同步給患者手機。之所以沒有采用傳統的前端輪訓方案,主要是在當前業務場景下存在時效性不足,資源浪費等問題。但與此同時也有代價的,相比于Http的無狀態通信,服務端主動推送是有狀態協議的,客戶端連接服務器時只和集群中一個節點連接,數據傳輸過程中也只與這一節點通信,在集群多臺服務器環境下,我們就出現了服務端部分消息推送丟失的現象。wGn28資訊網——每日最新資訊28at.com

當前架構圖如下:wGn28資訊網——每日最新資訊28at.com

圖片圖片wGn28資訊網——每日最新資訊28at.com

2、問題分析和整體思路

客戶端和服務端每次建立連接時候,會創建有狀態的會話Session,服務器得保存維持連接的Session。客戶端每次只能和集群服務器其中的一個服務器連接,后續也是和該服務器進行數據傳輸。因此集群的問題,應該考慮Session的問題,客戶端成功連接服務器之后,其他服務器也知道客戶端連接成功。wGn28資訊網——每日最新資訊28at.com

可以使用Nginx負載均衡的ip hash算法,客戶端每次都是請求同一個服務器,客戶端的session都保存在該服務器上,而后續請求都是請求該服務器,都能獲取到session,就不存在分布式session問題了。websocket相對http來說,可以由服務端主動推動消息給客戶端,如果接收消息的服務端和發送消息消息的服務端不是同一個服務端,發送消息的服務端無法找到接收消息對應的session,即兩個session不處于同一個服務端,也就無法推送消息。wGn28資訊網——每日最新資訊28at.com

解決問題的方法是將所有消息的發送方和接收方都處于同一個服務器下,而消息發送方和接收方都是不確定的,顯然是無法實現的。將消息的發送方和接收方都處于同一個服務器下才能發送消息,那么可以轉換一下思路,可以將消息以消息廣播的方式通知給所有的服務器,可以使用消息中間件發布訂閱模式,消息脫離了服務器的限制,通過發送到中間件,再發送給訂閱的服務器,類似廣播一樣,只要訂閱了消息,都能接收到消息的通知。wGn28資訊網——每日最新資訊28at.com

3、解決方案

WebSocket協議是基于TCP的一種新的網絡協議,是一個應用層協議,是 HTML5 提供的一種在單個 TCP 連接上進行全雙工通訊的協議,與 TCP 一樣,客戶端和服務器都可以隨時向對方發送數據,而不用像 HTTP請求 - 應答”通信模式。于是,服務器就可以變得更加“主動”了。一旦后臺有新的數據,就可以立即“推送”給客戶端,不需要客戶端輪詢,“實時通信”的效率也就提高了。wGn28資訊網——每日最新資訊28at.com

瀏覽器是一個“沙盒”環境,有很多的限制,不允許建立 TCP 連接收發數據,而WebSocket利用了 HTTP 本身的“協議升級”特性,“偽裝”成 HTTP,這樣就能繞過瀏覽器沙盒、與服務器直接建立“TCP 連接”,獲得更多的自由。wGn28資訊網——每日最新資訊28at.com

一個典型的 Websocket 握手請求如下:wGn28資訊網——每日最新資訊28at.com

1、客戶端請求

圖片圖片wGn28資訊網——每日最新資訊28at.com

2、服務器回應

圖片圖片wGn28資訊網——每日最新資訊28at.com

WebSocket是有狀態的,無法像直接HTTP以集群方式實現負載均衡,長連接建立后即與服務端某個節點保持著會話,因此集群下想要得知會話屬于哪個節點,有兩種方案,一種是使用類似微服務的注冊中心來維護全局的會話映射關系,一種是使用事件廣播由各節點自行判斷是否持有會話,兩種方案對比如表所示。wGn28資訊網——每日最新資訊28at.com

圖片圖片wGn28資訊網——每日最新資訊28at.com

綜合考慮實現成本與集群規模,選擇了輕量級的事件廣播方案。實現廣播可以選擇基于RocketMQ的消息廣播、基于Redis的Publish/Subscribe、基于服務的通知等方案,其優缺點對比如表所示。從實時性、實現難易等方面考慮,同時對于持久化高可靠級別并沒有太高要求,最終選擇了Redis。wGn28資訊網——每日最新資訊28at.com

圖片圖片wGn28資訊網——每日最新資訊28at.com

改造后架構圖如下:wGn28資訊網——每日最新資訊28at.com

圖片圖片wGn28資訊網——每日最新資訊28at.com

4、核心實現

基于spring boot建立websocket連接wGn28資訊網——每日最新資訊28at.com

圖片圖片wGn28資訊網——每日最新資訊28at.com

基于spring boot接收 websocket消息wGn28資訊網——每日最新資訊28at.com

圖片圖片wGn28資訊網——每日最新資訊28at.com

基于spring boot發布和訂閱Redis消息wGn28資訊網——每日最新資訊28at.com

圖片圖片wGn28資訊網——每日最新資訊28at.com

vue前端websocket建立連接、心跳檢測、發送消息、消息訂閱等wGn28資訊網——每日最新資訊28at.com

圖片圖片wGn28資訊網——每日最新資訊28at.com

圖片圖片wGn28資訊網——每日最新資訊28at.com

圖片圖片wGn28資訊網——每日最新資訊28at.com

Nginx反向代理配置wGn28資訊網——每日最新資訊28at.com

圖片圖片wGn28資訊網——每日最新資訊28at.com

5、性能測試

性能壓測選擇兩臺配置為2核16G的虛擬機,分別作為服務器和客戶端。壓測時選擇為網關開放了5個端口,同時建立5個客戶端,每個客戶端使用一個服務端端口建立起2萬連接,可以同時創建10萬個連接。連接數與內存使用情況如圖所示。wGn28資訊網——每日最新資訊28at.com

圖片圖片wGn28資訊網——每日最新資訊28at.com

給10萬個長連接同時發送一條消息,采用單線程發送,服務器發送完成的平均耗時在10s左右,如圖所示。wGn28資訊網——每日最新資訊28at.com

圖片圖片wGn28資訊網——每日最新資訊28at.com

當前的性能指標已滿足智慧門診的實際業務場景,可支持未來的業務增長。wGn28資訊網——每日最新資訊28at.com

6、產品效果

圖片圖片wGn28資訊網——每日最新資訊28at.com

7、問題和展望

當前WebSocket實現分散在在各個服務中,與業務系統強耦合,如果有其他業務需要集成WebSocket,面臨著重復開發的窘境,浪費成本、效率低下。后續建議在網關中擴展統一集成管理websocket,能夠具備以下特點:wGn28資訊網——每日最新資訊28at.com

集中實現長連接管理和推送能力。統一技術棧,將長連接作為基礎能力沉淀,便于功能迭代和升級維護。wGn28資訊網——每日最新資訊28at.com

與業務解耦。將業務邏輯與長連接通信分離,使業務系統不再關心通信細節,也避免了重復開發,浪費研發成本。wGn28資訊網——每日最新資訊28at.com

使用簡單。提供HTTP推送通道,方便各種開發語言的接入。業務系統只需要簡單的調用,就可以實現數據推送,提升研發效率。wGn28資訊網——每日最新資訊28at.com

分布式架構。實現多節點的集群,支持水平擴展應對業務增長帶來的挑戰;節點宕機不影響服務整體可用性,保證高可靠。wGn28資訊網——每日最新資訊28at.com

多端消息同步。允許用戶使用多個瀏覽器或標簽頁同時登陸在線,保證消息同步發送。wGn28資訊網——每日最新資訊28at.com

多維度監控與報警。自定義監控指標與現有微服務監控系統打通,出現問題時可及時報警,保證服務的穩定性。wGn28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-71452-0.htmlSpringBoot生產級WebSocket集群實踐,支持10萬連接!

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 前端開源項目懸賞改Bug,500 - 1000美元/個,還剩 278 個

下一篇: Go語言中 enum 實現方式有哪些?一定要絕對類型安全嗎?

標簽:
  • 熱門焦點
  • 一加Ace2 Pro官宣:普及16G內存 引領24G

    一加官方今天繼續為本月發布的新機一加Ace2 Pro帶來預熱,公布了內存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引領,還有呢?#一加Ace2Pro#,2023 年 8 月,敬請期待。”同時
  • Mate60手機殼曝光 致敬自己的經典設計

    8月3日消息,今天下午博主數碼閑聊站帶來了華為Mate60的第三方手機殼圖,可以讓我們在真機發布之前看看這款華為全新旗艦的大致輪廓。從曝光的圖片看,Mate 60背后攝像頭面積依然
  • 印度登月最關鍵一步!月船三號今晚進入環月軌道

    8月5日消息,據印度官方消息,月船三號將于北京時間今晚21時30分左右開始近月制動進入環月軌道。這是該探測器能夠成功的最關鍵步驟之一,如果成功將開始圍
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實現了一個流處理程序
  • Golang 中的 io 包詳解:組合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是對Reader和Writer接口的組合,
  • 不容錯過的MSBuild技巧,必備用法詳解和實踐指南

    一、MSBuild簡介MSBuild是一種基于XML的構建引擎,用于在.NET Framework和.NET Core應用程序中自動化構建過程。它是Visual Studio的構建引擎,可在命令行或其他構建工具中使用
  • 一文掌握 Golang 模糊測試(Fuzz Testing)

    模糊測試(Fuzz Testing)模糊測試(Fuzz Testing)是通過向目標系統提供非預期的輸入并監視異常結果來發現軟件漏洞的方法。可以用來發現應用程序、操作系統和網絡協議等中的漏洞或
  • 慕巖炮轟抖音,百合網今何在?

    來源:價值研究所 作者:Hernanderz“難道就因為自己的一個產品牛逼了,從客服到總裁,都不愿意正視自己產品和運營上的問題,選擇逃避了嗎?”這一番話,出自百合網聯合創
  • 8月見!小米MIX Fold 3獲得3C認證:支持67W快充

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
Top 主站蜘蛛池模板: 吉安县| 山阳县| 建昌县| 文成县| 武穴市| 洪洞县| 靖边县| 青海省| 古丈县| 德格县| 资兴市| 大庆市| 黄冈市| 昭平县| 通许县| 本溪| 舒兰市| 昭平县| 达州市| 油尖旺区| 呼伦贝尔市| 克拉玛依市| 阿拉善盟| 靖西县| 怀化市| 张家界市| 洛阳市| 靖西县| 云安县| 乌兰察布市| 鹤山市| 广河县| 普兰店市| 特克斯县| 千阳县| 渭源县| 平定县| 什邡市| 汽车| 平山县| 永平县|