溫馨提示×

溫馨提示×

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

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

ASP.NET SignalR高可用設(shè)計(jì)是什么

發(fā)布時(shí)間:2021-12-06 14:15:42 來源:億速云 閱讀:127 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“ASP.NET SignalR高可用設(shè)計(jì)是什么”,在日常操作中,相信很多人在ASP.NET SignalR高可用設(shè)計(jì)是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”ASP.NET SignalR高可用設(shè)計(jì)是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

在 One ASP.NET 的架構(gòu)圖中,微軟將 WebAPI 和 SignalR 歸類到 Services 類型與 MVC、Web Forms 同列為一等公民,未來的 ASP.NET 5 盡管還在beta階段,由它的架構(gòu)圖中可以發(fā)現(xiàn)原來就非常相似的 MVC 與 WebAPI 統(tǒng)一合并到 MVC 的大框架中了,而 SignalR 在未來依然在 Services 扮演著重要的角色。

SignalR 是一個(gè)集成了多種 HTTP 通訊方式并且優(yōu)先使用 HTML5 Web Sockets 作為實(shí)時(shí)通訊管道的技術(shù),而且其設(shè)計(jì)架構(gòu)相當(dāng)清晰易懂,在 ASP.NET 中作為提供即時(shí)消息通訊服務(wù)層的重要地位由此可見。

環(huán)境

開發(fā) SignalR 應(yīng)用程序前,應(yīng)該認(rèn)識 SignalR 技術(shù)對運(yùn)行環(huán)境有一些基本要求,運(yùn)行現(xiàn)行的SignalR 2.0 需要有 .NET Framework 4.5,服務(wù)器端需要 Windows Server 2008 R2 以上的操作系統(tǒng)以及 IIS7,如果使用 Web Sockets 來使 SignalR 技術(shù)得到最好的發(fā)揮,則應(yīng)該運(yùn)行于 Windows Server 2012 和 IIS 8 (開發(fā)環(huán)境需要 Windows 8 和 IIS 8 Express),因?yàn)?IIS 8 以上才可選擇安裝 Web Sockets 擴(kuò)展組件。

聯(lián)機(jī)管理

在 SignalR 中有一項(xiàng)十分重要的能力,就是「自動(dòng)化的聯(lián)機(jī)管理」,自動(dòng)化的聯(lián)機(jī)管理是在運(yùn)行期間當(dāng)客戶端意外脫機(jī)時(shí),SignalR Client Library 會在固定時(shí)間內(nèi)自動(dòng)地嘗試重新建立聯(lián)機(jī)以恢復(fù)與 Server 的對話狀態(tài),這個(gè)特性在現(xiàn)在的環(huán)境下顯得十分重要,以下就舉兩個(gè)十分容易理解的場景:

移動(dòng)聯(lián)機(jī)

手機(jī)的網(wǎng)絡(luò)聯(lián)機(jī)狀態(tài)向來沒有桌面環(huán)境穩(wěn)定,可能隨時(shí)因?yàn)槭謾C(jī)移動(dòng)到不同的地方而發(fā)生時(shí)間不一的斷線情況(地鐵經(jīng)常會發(fā)生這種情況),自動(dòng)化的聯(lián)機(jī)管理能夠在這樣的場景下得到不錯(cuò)的使用體驗(yàn)。

更新部署

另外一方面來看,造成斷線的情況也不一定只有客戶端會發(fā)生,當(dāng)應(yīng)用程序重啟或者服務(wù)器端軟件更新、停機(jī)維護(hù)狀態(tài),也會造成斷線,后者更有可能產(chǎn)生長時(shí)間的網(wǎng)站脫機(jī)狀態(tài)。經(jīng)常發(fā)生的情況是在 IP (提供服務(wù)的VIP)位置不改變的情況下更換了服務(wù)器來提供服務(wù),不知道您意識到了嗎?SignalR Client Library 在這樣的情況下會經(jīng)歷斷線重連的階段而且依舊運(yùn)行得非常良好。

不過值得注意的是雖然 SignalR Client Library自動(dòng)地處理了斷線重連,但由于 Web服務(wù)器實(shí)例已經(jīng)被完全置換,在架構(gòu)上如果沒有做相對應(yīng)的設(shè)計(jì),可能會造成原來運(yùn)行中SignalR 部分消息的丟失,在下一段將說明 SignalR 中的 Backplane 機(jī)制來避免這種情況下消息可能丟失的情況。

SignalR Backplane

Backplane 是 SignalR 基于 publish/subscribe (以下簡稱 pub/sub) pattern 設(shè)計(jì)下的系統(tǒng)可擴(kuò)展性架構(gòu)設(shè)計(jì),Backplane 將「信息」自「實(shí)例內(nèi)部」移出到「外部存儲服務(wù)器」中,讓狀態(tài)不再局限于 instance 個(gè)體上,以提供 SignalR Server scaleout 的能力,達(dá)到支持 Web Farm 架構(gòu)。

上圖說明了SignalR 是如何的使用 Backplane 架構(gòu)實(shí)現(xiàn) pub/sub pattern。首先由接受到信息請求的SignalR Server 將信息儲存到 Backplane 上,再由多臺 SignalR Server 處理信息的接收與發(fā)送,最后送抵 SignalR Client 端?。

由于Backplane 架構(gòu)的第一項(xiàng)特征便是將消息外移(動(dòng)作),對于 Web Farm架構(gòu)是必須有的設(shè)計(jì),然而在單一instance 時(shí)也能從其中得到好處,可以不必?fù)?dān)心應(yīng)用程序部署 VIP SWAP 時(shí)可能發(fā)生的信息丟失問題,對于處理信息敏感的應(yīng)用程序來說,這點(diǎn)來說相當(dāng)?shù)刂匾?/p>

有多種支持 Backplane 信息向外儲存的方式,包含了 SQL Server、Azure Service Bus 以及 Redis Cache,也可以自行實(shí)現(xiàn)其他的外存儲方式,以下針對這三種擴(kuò)充方式進(jìn)一步的說明。

SQL Server

通過簡單的設(shè)置,開發(fā)人員所熟悉的 SQL Database (或 SQL Server) 就能夠用來存儲 SignalR 信息到表中,接著由 Service Broker 來有效的轉(zhuǎn)發(fā)信息到系統(tǒng)中所有的 SignalR Server 處理(注:Server Broker 是為了增加效率,沒有 Service Broker 也能夠正常運(yùn)行)。

開發(fā)人員獲得以 SQL Server 擴(kuò)展 SignalR 服務(wù)的方式是通過 nuget 在項(xiàng)目中獲取 Microsoft.AspNet.SignalR.SqlServer 組件,給予可提供儲存數(shù)據(jù)的 SQL Database 儲存?zhèn)€體的聯(lián)機(jī)字符串即可,SQL Database 實(shí)例上不需預(yù)先建立表格,所需要的 table schema 會由 SQL Server 組件自動(dòng)建立完成。

詳細(xì)的實(shí)現(xiàn)信息,可由 ASP.NET 官網(wǎng)所提供的 SignalR Scaleout with SQL Server文章中獲得。值得注意的是當(dāng)使用 SQL Server 作為信息存儲器,目前在信息轉(zhuǎn)發(fā)的效率上較其他方案低上一些。

Service Bus

service Bus 是一項(xiàng)在 Azure 中重要的基礎(chǔ)結(jié)構(gòu),提供了 Queue、Topic、Relay 以及 Notification Hub 等功能。其中 Topics 正是一個(gè)與 SignalR Backplane pub/sub pattern相同設(shè)計(jì)的典型服務(wù)。

詳細(xì)的實(shí)現(xiàn)信息,可由 ASP.NET 官網(wǎng)所提供的 SignalR Scaleout with Azure Service Bus 文章中獲得。

Redis Cache

Redis 是在內(nèi)存內(nèi)以鍵值 (key-value) 對方式儲存的數(shù)據(jù)的服務(wù),Redis 也支持 pub/sub pattern 來提供信息服務(wù)。詳細(xì)的實(shí)現(xiàn)信息,可由 ASP.NET 官網(wǎng)所提供的 SignalR Scaleout with Redis 文章中獲得。

Redis 利用內(nèi)存的運(yùn)行方式使得它是一個(gè)低延遲、高傳輸量的 Backplane 架構(gòu)。

到此,關(guān)于“ASP.NET SignalR高可用設(shè)計(jì)是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI