這篇文章主要介紹“如何搭建分布式ASP.NET Core Web”,在日常操作中,相信很多人在如何搭建分布式ASP.NET Core Web問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”如何搭建分布式ASP.NET Core Web”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)公司是一家專業(yè)提供鄉(xiāng)寧企業(yè)網(wǎng)站建設(shè),專注與做網(wǎng)站、成都網(wǎng)站制作、H5建站、小程序制作等業(yè)務(wù)。10年已為鄉(xiāng)寧眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
單臺(tái)Web處理用戶請(qǐng)求的能力是有限的,因此我們可能會(huì)需要搭建分布式的Web服務(wù)器。
當(dāng)前市面上,可能用的比較多的是會(huì)話保持,這種模式下,開發(fā)者只需將先前開發(fā)好的、不支持會(huì)話共享的程序部署在多臺(tái)服務(wù)器上,負(fù)載均衡提供商會(huì)要求開發(fā)者設(shè)置保持時(shí)間,就可以完成部署。但其缺點(diǎn)是僅僅將用戶分配到不同節(jié)點(diǎn),不是將請(qǐng)求分配到不同節(jié)點(diǎn),粒度過大,會(huì)導(dǎo)致負(fù)載不夠均衡。
下面我們從各個(gè)角度介紹一下如何讓你的ASP.NET Core網(wǎng)站系統(tǒng)擺脫會(huì)話保持
分布式Web的第一大棘手問題就是登錄狀態(tài)。ASP.NET Core中默認(rèn)是將Session ID進(jìn)行保護(hù)的,因此這些數(shù)據(jù)是被加密過的,并以xml文件形式存在保護(hù)區(qū),因此我們要將這個(gè)文件共享出來。
因此我們需要實(shí)現(xiàn)Session Sharing,對(duì)于不同平臺(tái),我們有不同的做法(在ASP.NET Core 1.1.0發(fā)布前,我們只能通過文件系統(tǒng)進(jìn)行共享):
在Windows中,我們使用UNC路徑來實(shí)現(xiàn)共享。首先建立一個(gè)文件夾,在共享中賦予Guest用戶讀寫權(quán)限。
Linux中我們需要安裝nfs來實(shí)現(xiàn)共享,首先選擇一個(gè)節(jié)點(diǎn),作為nfs服務(wù)器(假設(shè)IP為10.0.0.254)
apt-get install nfs-kernel-serve
接下來創(chuàng)建一個(gè)文件夾:
mkdir /share
下面編輯nfs配置文件,以配置欲共享的路徑
vi /etc/exports
在這個(gè)配置文件里,我們配置三個(gè)參數(shù):路徑、IP或IP段、讀寫權(quán)限。每行表示一條記錄,可以重復(fù)。
/share 10.0.0.1/24(rw,sync,no_subtree_check) /share 10.0.1.1/24(rw,sync,no_subtree_check)
保存后,重啟nfs服務(wù)
service nfs-kernel-server restart
至此NFS服務(wù)器就部署完畢了,下面在各個(gè)節(jié)點(diǎn)中掛在nfs共享的文件夾。
安裝portmap:
apt-get install portmap nfs-common
在每臺(tái)節(jié)點(diǎn)中創(chuàng)建文件夾,作為掛載路徑:
mkdir /share-remote mount -t nfs 10.0.0.254:/share /share-remote
至此即完成了共享
我們需要為我們的ASP.NET Core程序配置DataProtect,讓其將xml文件保存至共享路徑中,進(jìn)入Startup.cs
,添加AddDataProtection,并指定路徑:
public void ConfigureServices(IServiceCollection services)
{
#if WINDOWS services.AddDataProtection() .PersistKeysToFileSystem(
new DirectoryInfo(@"\\10.0.0.254\share"));
#elif LINUX services.AddDataProtection() .PersistKeysToFileSystem(
new DirectoryInfo(@"/share-remote"));
#elif redis_ON_NET_CORE_1_1_0
// ASP.NET Core 1.1.0 新增將Session ID存儲(chǔ)至Redis中 var redis = ConnectionMultiplexer.Connect("10.0.0.254"); serviceCollection.AddDataProtection() .PersistKeysToRedis(redis, "DATA_PROTECTION_KEYS_");
#endif}
DataProtect配置過后,需要配置分布式緩存:
services.AddDistributedRedisCache(x =>
{
x.InstanceName = "SESSION_INSTANCE_";
x.Configuration = "10.0.0.254";
// StackExchange.Redis Connection String});
services.AddSession(x =>
{
x.IdleTimeout = new TimeSpan(1, 0, 0);
});
配置好分布式緩存后,session就已經(jīng)可以share了,包括使用了Identity的網(wǎng)站也同時(shí)受益,擺脫了對(duì)會(huì)話保持的依賴。
如果網(wǎng)站使用了SignalR,那么需要將SignalR消息推送到各個(gè)節(jié)點(diǎn),就需要使用Redis來Scale out SignalR:
進(jìn)入project.json
來添加Pomelo.AspNetCore.SignalR.Redis
包,版本為0.1.0
在ConfigureServices
中添加下面的代碼
services.AddRedis(x =>
{
x.ConnectionString = "10.0.0.254";
// StackExchange.Redis Connection String
x.Database = 0;
x.EventKey = "SIGNALR_INSTANCE";
})
.AddSignalR(options =>
{
options.Hubs.EnableDetailedErrors = true;
});
現(xiàn)在SignalR的消息就在各個(gè)節(jié)點(diǎn)中互通了。
到此,關(guān)于“如何搭建分布式ASP.NET Core Web”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
網(wǎng)頁題目:如何搭建分布式ASP.NETCoreWeb
文章源于:http://sd-ha.com/article14/gcjege.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、網(wǎng)站設(shè)計(jì)、域名注冊(cè)、、自適應(yīng)網(wǎng)站、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)