日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

搭建分布式 ASP.NET Core Web

發(fā)布時(shí)間:2023/12/4 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 搭建分布式 ASP.NET Core Web 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

單臺(tái)Web處理用戶請(qǐng)求的能力是有限的,因此我們可能會(huì)需要搭建分布式的Web服務(wù)器。

當(dāng)前市面上,可能用的比較多的是會(huì)話保持,這種模式下,開(kāi)發(fā)者只需將先前開(kāi)發(fā)好的、不支持會(huì)話共享的程序部署在多臺(tái)服務(wù)器上,負(fù)載均衡提供商會(huì)要求開(kāi)發(fā)者設(shè)置保持時(shí)間,就可以完成部署。但其缺點(diǎn)是僅僅將用戶分配到不同節(jié)點(diǎn),不是將請(qǐng)求分配到不同節(jié)點(diǎn),粒度過(guò)大,會(huì)導(dǎo)致負(fù)載不夠均衡。

下面我們從各個(gè)角度介紹一下如何讓你的ASP.NET Core網(wǎng)站系統(tǒng)擺脫會(huì)話保持

Session Sharing

分布式Web的第一大棘手問(wèn)題就是登錄狀態(tài)。ASP.NET Core中默認(rèn)是將Session ID進(jìn)行保護(hù)的,因此這些數(shù)據(jù)是被加密過(guò)的,并以xml文件形式存在保護(hù)區(qū),因此我們要將這個(gè)文件共享出來(lái)。

因此我們需要實(shí)現(xiàn)Session Sharing,對(duì)于不同平臺(tái),我們有不同的做法(在ASP.NET Core 1.1.0發(fā)布前,我們只能通過(guò)文件系統(tǒng)進(jìn)行共享):

Windows

在Windows中,我們使用UNC路徑來(lái)實(shí)現(xiàn)共享。首先建立一個(gè)文件夾,在共享中賦予Guest用戶讀寫(xiě)權(quán)限。

Linux

Linux中我們需要安裝nfs來(lái)實(shí)現(xiàn)共享,首先選擇一個(gè)節(jié)點(diǎn),作為nfs服務(wù)器(假設(shè)IP為10.0.0.254)

apt-get install nfs-kernel-serve

接下來(lái)創(chuàng)建一個(gè)文件夾:

mkdir /share

下面編輯nfs配置文件,以配置欲共享的路徑

vi /etc/exports

在這個(gè)配置文件里,我們配置三個(gè)參數(shù):路徑、IP或IP段、讀寫(xiě)權(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配置過(guò)后,需要配置分布式緩存:

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ì)話保持的依賴。

SignalR Scale Out

如果網(wǎng)站使用了SignalR,那么需要將SignalR消息推送到各個(gè)節(jié)點(diǎn),就需要使用Redis來(lái)Scale out SignalR:

進(jìn)入project.json來(lái)添加Pomelo.AspNetCore.SignalR.Redis包,版本為0.1.0

在ConfigureServices中添加下面的代碼

services.AddRedis(x => {x.ConnectionString = "10.0.0.254";
? // StackExchange.Redis Connection Stringx.Database = 0;x.EventKey = "SIGNALR_INSTANCE"; }) .AddSignalR(options => {options.Hubs.EnableDetailedErrors = true; });

現(xiàn)在SignalR的消息就在各個(gè)節(jié)點(diǎn)中互通了。

原文鏈接:http://www.1234.sh/post/asp-net-core-distributed-web-server


.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺(tái)或掃描二維碼關(guān)注

總結(jié)

以上是生活随笔為你收集整理的搭建分布式 ASP.NET Core Web的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。