Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Sitzungsverteilung

Detaillierte Erläuterung der Sitzungsverteilung

大家讲道理
大家讲道理Original
2017-05-31 14:34:232722Durchsuche

1. Vorwort & Rezension


Im vorherigen ArtikelSitzungVerteilung Im geteilten Modus = Sitzung + Redis + Nginx haben viele Studenten Nachrichten hinterlassen und mir viele Fragen gestellt. Die beeindruckendsten davon sind: Was soll ich tun, wenn Nginx abstürzt? Welche Vorteile bietet die Verwendung der Redis Session-Lösung im Vergleich zur Microsoft Session-Lösung? Cookie kann auch Session ersetzen. Welche Vorteile bietet die Verwendung der Redis-Session-Lösung? Was ist die IPHash-Methode von Nginx? Wozu dient der MaschinenSchlüssel? Wie implementiert man Net Core?

Als ich alle Fragen sah, stammte meine Antwort nur aus der Anwendungsebene. Die grundlegende Antwort kann wie folgt zusammengefasst werden: „Andere haben dies getan und dieses Problem gelöst.“ Bitte beachten Sie den Link für das Prinzip. „Ich schäme mich, zu sagen, dass ich zu diesem Zeitpunkt seinen wirklichen Vorteil nicht vollständig verstanden habe. Ich wusste nur, dass es besser war, dies aufgrund meiner Intuition und Erfahrung zu tun. Ich wusste, wann.“ Wenn einige Dinge unkontrollierbar sind, kann ihre Entkopplung, Visualisierung und Clusterung ein System robuster machen, aber es gibt keine theoretische Unterstützung. Nachdem ich kürzlich Informationen konsultiert und Bücher gelesen habe, habe ich ein tiefes Verständnis dafür. In diesem Artikel werde ich diese Sitzungsfreigabe aus der Benutzerfreundlichkeitsperspektive der Website Architektur analysieren und erklären und .net Core verwenden, um dies erneut zu implementieren Muster. (Die Nettokernversion der verteilten Sitzungsfreigabe hat keine Chance, auf die Produktionsumgebung angewendet zu werden, geschweige denn auf frühere Erfahrungen, daher dient sie nur der Forschung. Bitte achten Sie darauf, aber es gibt Experten im Garten, die bereits relevante Artikel geschrieben haben. Dieser Artikel (relevante Artikel werden am Ende veröffentlicht)

2. Website-Verfügbarkeit – Sitzungsverwaltung


Benutzerfreundlichkeit ist ein sehr wichtiger Teil der Website-Architektur. Vereinfacht ausgedrückt bedeutet dies, dass Benutzer diese Website jederzeit und überall öffnen und die darin enthaltenen Funktionen nutzen können. Was passiert, wenn die Verfügbarkeit gering ist? Jeder stellt sich die Szene vor, in der man sich während des Frühlingsfestes Tickets schnappt. Die Website stürzt auf verschiedene Weise ab. Sie werden bestimmt denken: Wenn es andere Möglichkeiten gibt, Tickets zu kaufen, werde ich diese kaputte Website 12306 nicht nutzen. Dieses Beispiel ist etwas extrem, da das Geschäftsszenario ziemlich extrem ist. Natürlich ist dieses Phänomen nicht nur ein Problem mit der Website-Verfügbarkeit. Aber eine Website kann nicht alle drei Tage geöffnet werden, oder jede Seite, auf die Sie klicken, ist voller Fehlerseiten und es erfolgt keine Reaktion auf Vorgänge. Werden Sie diese Website trotzdem nutzen? Ich glaube, wenn wir eine Website durchsuchen, werden wir sie auf jeden Fall verlassen und nach anderen ähnlichen Websites suchen, solange sie nicht wie eine Monopol-Website wie 12306 verfügbar ist.

Die Sitzungsverwaltung ist einer der Inhalte der Website-Benutzerfreundlichkeit. Jeder weiß, dass HTTP keine Status- Anforderung hat, also die letzte HTTP Die Anforderung kann nicht verfolgt werden. In der Wirtschaft besteht jedoch ein großer Bedarf, HTTP in zustandsbehaftete Anforderungen umzuwandeln, und die Sitzung wird entsprechend generiert. Beim verteilten Website-Design können jedoch nur zustandslose Anforderungen die horizontale Erweiterung der Website realisieren (Hinzufügen von oder). Entfernen von Anwendungsservern), daher ist dies im Widerspruch zur Sitzung, da der zusätzliche Server nicht verwendet werden kann, wenn die Sitzungsinformationen im Cache des Website-Anwendungsservers gespeichert sind. Daher ist die Sitzung entkoppelt ist der Schlüssel zur Lösung dieses Problems. Im Folgenden werden die allgemeinen Sitzungen auf der Website vorgestellt.

1. Sitzungsreplikation

Sitzungsreplikation ist das früheste Unternehmensanwendungssystem und ist es auch Häufig verwendet Ein Dienstcluster-Sitzungsverwaltungsmechanismus, der die Sitzungsreplikationsfunktion aktiviert, die darin besteht, das Sitzungsobjekt zwischen mehreren Servern im Cluster zu synchronisieren. Es scheint, dass JBoss diese Funktion in Java hat, .Net jedoch noch nicht bewusst.

Vorteile: Sitzungsinformationen sind schnell zu lesen und einfach umzusetzen.

Nachteile: Wenn die Clustergröße groß ist, belegt die Sitzungsreplikation zwischen Servern Serverressourcen und Netzwerkressourcen , und irgendwann wird das System überlastet sein.

Detaillierte Erläuterung der Sitzungsverteilung

2. Sitzungsbindung

Sitzungsbindung wird im Allgemeinen durch Soft/Hard-Balancing-Lastserver bereitgestellt. Diese Funktion, z Beispiel: Die IPhash-Methode von Nginx im vorherigen Artikel. Der Lastausgleichsserver verwendet den Hash-Algorithmus, um dieselbe IP demselben Server zuzuweisen, dh die Sitzung ist an einen bestimmten Server gebunden, um sicherzustellen, dass die Sitzung immer abgerufen werden kann auf diesem Server, auch bekannt als Session Stickiness.

Nachteil: Wenn ein Server ausfällt, ist die Sitzung auf diesem Server nicht mehr vorhanden und der Benutzer fordert den Wechsel zu An an Auf anderen Servern ist ein Fehler aufgetreten, da keine Sitzung vorhanden war.

Detaillierte Erläuterung der Sitzungsverteilung

3. Verwenden Sie Cookies, um die Sitzung aufzuzeichnen

Das Aufzeichnen von Sitzungsinformationen über Cookies ist eine Methode, die von den meisten Websites verwendet wird. Auch diese Methode ist eine sehr gute und ausgereifte Lösung, solange Cookies nicht missbraucht werden. Die Cookie-Aufzeichnungssitzung dient dazu, einige Statusinformationen auf dem Client abzulegen, die bei jeder Anfrage an den Server übertragen werden müssen.

Vorteile: Diese Methode ist einfach und leicht zu implementieren, weist eine hohe Verfügbarkeit auf, unterstützt die horizontale Servererweiterung und die Lösung ist ausgereift

Nachteile: SicherheitGeschlecht, Cookie hat Größenbeschränkung und die Übertragung von Cookie bei jeder Anfrage wirkt sich auf die Leistung aus

Detaillierte Erläuterung der Sitzungsverteilung

Detaillierte Erläuterung der Sitzungsverteilung. Sitzungsserver

Sitzungsserver Es ist eine sehr gute Lösung, Sitzungen auf diese Weise zu verwalten, da Sitzungen für geschäftliche Anforderungen generiert werden HTTP-Status, und verteiltes Website-Design befürwortet HTTP-Zustandslosigkeit Um diesem Design gerecht zu werden, verwendet der Sitzungsserver eine zustandsbehaftete Sitzung Die Informationen werden vom zustandslosen Anwendungsserver getrennt und dann entsprechend den unterschiedlichen Eigenschaften verschiedener Server entworfen. Wenn wir beispielsweise Sitzungsinformationen in Redis speichern, gibt es viele gute Lösungen für die Clusterkonfiguration und Stabilitätseinstellungen von Redis. Wenn wir die Sitzung im MemCache speichern, dann gibt es auch viele gute Lösungen für die Clusterkonfiguration von Memcache ausgereifte Fälle für Stabilitätseinstellungen. Auf diese Weise vereinfachen wir einige Probleme. Wenn wir .Net Session allein verwenden, müssen wir tiefer liegende Dinge in .Net verstehen und umwandeln, um ihre Benutzerfreundlichkeit und Stabilität sicherzustellen Wenn Sie das Sitzungsspeichermedium auf Redis übertragen, sind die Redis-Cluster-Lösung und die Verwaltungstools sehr ausgereift. Sie müssen nur die Konfiguration konfigurieren, um das Sitzungsproblem zu lösen.

Vorteile: Hohe Verfügbarkeit, hohe Sicherheit, gute Skalierbarkeit, hohe Leistung, unbegrenzte Informationsgröße

Detaillierte Erläuterung der Sitzungsverteilung

3.Net Core+Redis+Nginx implementiert die verteilte Sitzungsfreigabe


1. Vorbereitende Vorbereitung & Umgebung

(1)Vs2017 (2).Net Core 1.1 (3) Win 7 (Detaillierte Erläuterung der Sitzungsverteilung )ubuntu 16.0Detaillierte Erläuterung der Sitzungsverteilung

2. Einführung in .Net Core

Mit Mit der Entwicklung des Internets sind Open Source und Cross-Plattform auf dem heutigen chinesischen Markt (im Ausland nicht sehr klar) einer der wichtigen Indikatoren zur Messung der Qualität einer Sprache und Technologie, um .Net Open Source und Cross-Plattform zu fördern , Microsoft hat .Net Core gestartet.

Weitere Informationen finden Sie in Daniels Artikel: Die Beziehung zwischen .NET Core, .NET Framework und Mono

Lass uns reden über meine anfänglichen Gefühle zu .Net Core:

1) .Net Core hat die vorherige C#Grammatik

Laienhaft ausgedrückt: Früher habe ich Chinesisch (C#) gesprochen, aber jetzt spreche ich immer noch Chinesisch, aber die Umgebung, in der ich spreche, hat sich verändert.

2) Da .Net Core gerade erst gestartet ist, hat sich die API geändert oder es fehlt viel

3) Abschied von IIS, plattformübergreifend

Laienhaft ausgedrückt ist es die Mutter von Microsoft möchte verhindern, dass wir die neue Umgebung betreten. Ich habe Hunger und Angst, dass ich nicht weiß, wie ich überleben soll, nachdem ich die aktuelle Umgebung (Windows + IIS) verlassen habe. Also brachte er uns die Sprache (C#) bei, gab uns die Werkzeuge, um Geld zu verdienen (.Net Core+Kestrel) und sagte: „Los, Junge, geh und arbeite alleine, warte eine Minute, vergiss es nicht.“ um diese Visa-Karte mitzubringen

NuGet ist nach mehreren Jahren der Entwicklung immer ausgereifter geworden. Es ist die Hauptmethode, um .Net Core-Open-Source-Komponenten zu erhalten. Über NuGet können Sie verschiedene

Middleware

herunterladen und Komponenten, und es ist bequem und schnell (außer manchmal vom Internet getrennt, aber Sie können inländische Spiegel verwenden). NuGet ist wie ein Adressbuch, das uns von Microsofts Mutter gegeben wurde, und teilt uns mit, dass Sie, wenn Sie in einigen Aspekten Hilfe benötigen, Sie können Ihre sieben Tanten und acht Tanten über die NuGet-Hilfe finden.

3. Topologiediagramm

Basierend auf den erfolgreichen Erfahrungen in der Vergangenheit Artikel, eine einfache Modifikation, ein Windows-System und ein Ubuntu-System in der Mitte, die das .Net Core-Programm hosten. Einige Leute werden fragen, warum Windows nicht über IIS verfügt. Ich möchte sagen, dass .Net Core das Prinzip implementiert global und grundsätzlich von IIS getrennt. Wenn Sie das .Net Core-Programm auf IIS bereitstellen möchten, müssen Sie dieselbe Anwendung installieren und der auf der Site konfigurierte Anwendungspool muss ebenfalls in „nicht verwalteter Code“ geändert werden ".

Detaillierte Erläuterung der Sitzungsverteilung

Detaillierte Erläuterung der Sitzungsverteilung. Entwickeln Sie ein .Net Core-Programm mit Session

Detaillierte Erläuterung der Sitzungsverteilung-1

Verwenden Sie Vs2017, um eine .Net Core-Webanwendung zu erstellen, und diese Anwendung enthält keine Authentifizierungsinformationen

Die Erstellung ist wie folgt

Detaillierte Erläuterung der Sitzungsverteilung

Detaillierte Erläuterung der Sitzungsverteilung

Detaillierte Erläuterung der Sitzungsverteilung-2, .Net Core ruft Session auf

Detaillierte Erläuterung der Sitzungsverteilung

>Zitat NuGet-Paket im Zusammenhang mit Session Ich habe festgestellt, dass die offizielle Session-Komponente von . Net Core ähnelt einer Middleware und unterstützt offiziell Redis.                                  Wenn Sie eine

HttpContext.Session

in das Programm schreiben, wird die folgende Fehlermeldung angezeigt: Session has nicht fürdiese Anwendung oder Anfrage konfiguriert.

Detaillierte Erläuterung der Sitzungsverteilung

Detaillierte Erläuterung der Sitzungsverteilung-2-1, Microsoft.AspNetCore.Session

  .Net Core muss Microsoft.AspNetCore.Session installieren, wenn die Installation des NuGet-Pakets wie folgt erfolgt:

Detaillierte Erläuterung der Sitzungsverteilung

Detaillierte Erläuterung der Sitzungsverteilung-2-2.Ändern Sie Startup.cs, um Sitzung verfügbar zu machen

  Hervorgehobenen Code an der entsprechenden Stelle hinzufügen services.AddSession(); app.UseSession();

<br>

public void ConfigureServices(IServiceCollection services)
 {     // Add framework services.     services.AddMvc();     services.AddSession();
 }
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
     loggerFactory.AddConsole(Configuration.GetSection("Logging"));
     loggerFactory.AddDebug();     if (env.IsDevelopment())
     {
          app.UseDeveloperExceptionPage();
          app.UseBrowserLink();
     }     else
     {
          app.UseExceptionHandler("/Home/Error");
     }

     app.UseStaticFiles();     app.UseSession();
     app.UseMvc(routes =>
     {
          routes.MapRoute(
          name: "default",
          template: "{controller=Home}/{action=Index}/{id?}");
     });
}

Detaillierte Erläuterung der Sitzungsverteilung-2-3, Sitzung schreiben und lesen

Die Lesemethode von Session unterscheidet sich von .Net. Sie ist wie folgt geschrieben und der HttpContext der Sitzung .Session .SetString oder HttpContext.Session.Set-Methode unterstützt String bzw. ByteArray, sodass komplexe Entitäten konvertiert werden müssen in Json wird in Session gespeichert.

[Methode zum Schreiben einer Sitzung]

<br>

HttpContext.Session.SetString("key", "strValue");

[Sitzungslesemethode]

<br>

HttpContext.Session.GetString("key")

Detaillierte Erläuterung der Sitzungsverteilung. Ändern Sie das Sitzungsspeichermedium in Redis

Detaillierte Erläuterung der Sitzungsverteilung-1. Konfigurieren Sie zunächst Redis

Detaillierte Konfigurationsmethoden finden Sie unter: Sitzungsverteilte Freigabe = Sitzung + Redis + Nginx

<br>

redis-server redis.windows.conf

Detaillierte Konfigurationsmethoden finden Sie unter: Sitzungsverteilte Freigabe = Sitzung + Redis + Nginx

Detaillierte Erläuterung der Sitzungsverteilung-2. Installieren Sie Microsoft.Extensions.Caching.Redis.Core

Suchen Sie Microsoft.Extensions.Caching.Redis.Core in NuGet und installieren Sie es. Dieses NuGet-Paket ist eine Erweiterung von Caching, d. h. Sie können das Caching-Speichermedium

Detaillierte Erläuterung der Sitzungsverteilung

Detaillierte Erläuterung der Sitzungsverteilung-3. appsettings.json konfiguriert die Redis-Verbindungszeichenfolge

appsettings.json Konfigurieren Sie die Redis-Verbindungszeichenfolge (entspricht der Konfiguration des Appsetting-Knotens in web.config). Hinweis: Die Hinzufügungsposition muss über der Protokollierung liegen, andernfalls kann der Code nicht wie der unten hervorgehobene Teil gelesen werden

<br>

<span style="color: #000000">{<br><br></span><span style="background-color: #ffff00"><span style="color: #800000">  "</span><span style="color: #800000">Data</span><span style="color: #800000">"</span>: <span style="color: #800000">"RedisConnection</span><span style="color: #800000">"</span></span><span style="background-color: #ffff00">,<br><span style="color: #800000">"</span><span style="color: #800000">ConnectionStrings</span><span style="color: #800000">"</span></span><span style="background-color: #ffff00">: { <br><span style="color: #800000">    "</span><span style="color: #800000">RedisConnection</span><span style="color: #800000">"</span>: <span style="color: #800000">"</span><span style="color: #800000">192.168.8.138:6379</span><span style="color: #800000">"<br></span></span><span style="line-height: 1.Detaillierte Erläuterung der Sitzungsverteilung; background-color: #ffff00">  },</span>
"Logging": {    "IncludeScopes": false,    "LogLevel": {      "Default": "Warning"
    }
  }
}

Detaillierte Erläuterung der Sitzungsverteilung-Detaillierte Erläuterung der Sitzungsverteilung Fügen Sie einen Verweis auf die Methode „ConfigureServices“ von Startup.cs hinzu

<span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span><span style="color: #000000"> ConfigureServices(IServiceCollection services)
        {            </span><span style="color: #008000">//</span><span style="color: #008000"> Add framework services.</span><span style="color: #000000">            services.AddMvc();<span style="background-color: #ffff00">            services.AddDistributedRedisCache(option </span></span><span style="line-height: 1.Detaillierte Erläuterung der Sitzungsverteilung; background-color: #ffff00">=><br></span><span style="line-height: 1.Detaillierte Erläuterung der Sitzungsverteilung; background-color: #ffff00">            {       </span>

                   //redis 数据库连接字符串<br>                   option.Configuration = Configuration.GetConnectionString("RedisConnection");<br>                   //redis 实例名<br>                   option.InstanceName = "master";<br>              });<br>              services.AddSession();<br>

<br>

          }

         页面运行HttpContext.Session.GetString("key"),然后用Redis管理工具RedisDesktopManager查询Session是否入库。

Detaillierte Erläuterung der Sitzungsverteilung

Detaillierte Erläuterung der Sitzungsverteilung-Detaillierte Erläuterung der Sitzungsverteilung、发布前指定IP和端口(重要) 

         如果你没有看这个步骤,继续下面发布步骤,等你发布时候,你会发现一个尴尬的问题,就是你用IP访问不了你的网站,用localhost可以访问,.Net Core默认是Detaillierte Erläuterung der Sitzungsverteilung000端口,端口占用也会让你的网站访问不了。

         只需要在Program.cs中添加高亮代码即可,细心地人已经看到.UseUrls(new string[] { }) 传入的是个数组,那么这里定义多个网站,当你执行时候dotnet命令时候,多个网站都会启动。

Detaillierte Erläuterung der Sitzungsverteilung

<br>

public static void Main(string[] args)
        {            var host = new WebHostBuilder()

                  //增加处,*号表示ip <br>                  .UseUrls(new string[] { "http://*:7201})

                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<startup>()
                .UseApplicationInsights()
                .Build();

            host.Run();
        }</startup>

6、.Net Core 发布

6-1、Windows安装.Net Core发布环境[10.2.107.100]

1) Installieren Sie Windows Server Hosting (x6Detaillierte Erläuterung der Sitzungsverteilung & x86), entspricht IIS, bitte achten Sie bei der Installation auf das Internet ( es scheint ein automatisch heruntergeladenes SDK zu sein, ich habe es nicht sorgfältig studiert).

Detaillierte Erläuterung der Sitzungsverteilung

                                                                                                                                                                                                      :Program Filesdotnet" dotnet.exe im Ordner, verwenden Sie cmd, um dotnet.exe zum Ausführen aufzurufen, oder fügen Sie die Systemumgebung hinzu Variable (Der cmd-Befehl im Fenster kann beim Schreiben von Befehlen .exe speichern, d. h. der Befehl dotnet ist dotnet.exe)

Detaillierte Erläuterung der Sitzungsverteilung

Pit 1]

Erinnerung an den Fehler in win7: Fehlgeschlagen um die DLL von [C: Program Filesdotnetfxr1.0.0.1hostfxr.dll] zu laden, hsult: 0x800700Detaillierte Erläuterung der Sitzungsverteilung7

Detaillierte Erläuterung der Sitzungsverteilung 

Lösung:

 

Patch-Installation erforderlich: KB2Detaillierte Erläuterung der Sitzungsverteilung33623

Die Download-Adresse lautet wie folgt:

https://support.microsoft.com/en-us /kb/2Detaillierte Erläuterung der Sitzungsverteilung33623

【Grube 2】 , die folgenden beiden Screenshots sind die

Fehlermeldung

Detaillierte Erläuterung der Sitzungsverteilung<br> 6-2 installiert die .Net Core-Release-Umgebung <br>[10.2.107.Detaillierte Erläuterung der Sitzungsverteilung6]

>Der offizielle Text ist sehr detailliert, befolgen Sie ihn einfach und nicht Wenn Sie keinen Konflikt mit dem Linux

-System haben, verwenden Sie bitte nicht .Net Core. Wenn Sie die Beziehung zwischen Ubuntu und Linux nicht kennen.

Überprüfen Sie abschließend, ob der Befehl dotnet verwendet werden kann.

Detaillierte Erläuterung der Sitzungsverteilung

6-3. Veröffentlichungswebsite

Detaillierte Erläuterung der Sitzungsverteilung

Rechtsklick auf Projekt - >Veröffentlichen…

       点击发布按钮,生成的文件如下(SessionTest为应用程序名)

Detaillierte Erläuterung der Sitzungsverteilung

        好了,有了这些文件,我们只需要把这些文件扔到服务器上就成了,但是怎么启动呢?通过查询,网上说只要用dotnet命令就成。继续实践…

        说明:我的项目叫做Detaillierte Erläuterung der Sitzungsverteilung生成了Detaillierte Erläuterung der Sitzungsverteilung这个为主要的dll,也是程序的入口。

        大家都知道.Net Core是跨平台的,不同系统的服务器环境配置好了,网上查询说是使用dotnet命令启动网站,那么可以推断出几个平台的dotnet命令是一样的。

6-3-1、Windows启动.Net Core网站[10.2.107.100:7201]

         启动.Net Core网站的命令很简单,安装好发布环境的应用程序,C:\Program Files\dotnet目录如下(如果dotnet命令不能用,可以直接调用dotnet.exe这个应用程序。)

Detaillierte Erläuterung der Sitzungsverteilung

         将生成好的网站复制到服务器上

Detaillierte Erläuterung der Sitzungsverteilung

 cmd命令找到PublishOutput

<br>

cd C:\PublishOutput

Detaillierte Erläuterung der Sitzungsverteilung

dotnet运行网站命令

dotnet SessionTest.dll

成功以后(之后再编译运行,会提示下面截图)

Detaillierte Erläuterung der Sitzungsverteilung

访问http://10.2.107.100:7201/(如果一台机子有多个网卡多个IP,其他IP的7201端口也是个独立网站)

Detaillierte Erläuterung der Sitzungsverteilung

 

6-3-2、Ubuntu启动.Net Core网站[10.2.107.Detaillierte Erläuterung der Sitzungsverteilung6:7201]

想办法将发布的程序复制到Ubuntu上面去,我测试使用的VBox虚拟机。

具体方法传送门:virtualbox中ubuntu和windows共享文件夹设置

dotnet SessionTest.dll

Detaillierte Erläuterung der Sitzungsverteilung

访问http://10.2.107.Detaillierte Erläuterung der Sitzungsverteilung6:7201/

Detaillierte Erläuterung der Sitzungsverteilung

7、Nginx配置

7-1、网站端口修改

        nginx.conf配置修改

Detaillierte Erläuterung der Sitzungsverteilung

        listen   80; 改成 listen   81; 因为一般都被80都被使用。

<br>

server {
        listen       81;
        ……
}

7-2、增加负载均衡

  nginx.conf中添加upstream节点

upstream Jq_one { <br>      server 10.2.107.100:7201; <br>       server 10.2.107.Detaillierte Erläuterung der Sitzungsverteilung6:7201;

} server {
.....
}

 

7-3、location节点修改

<br>

location / {
            root   html;
            index  index.aspx index.html index.htm;            #其中jq_one 对应着upstream设置的集群名称
            proxy_pass         http://Jq_one;             #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
            proxy_set_header   Host             $host; 
            proxy_set_header   X-Real-IP        $remote_addr; 
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
}

7-Detaillierte Erläuterung der Sitzungsverteilung、Nginx启动命令

        C:\server\nginx-1.0.2>start nginx

        或

        C:\server\nginx-1.0.2>nginx.exe

7-Detaillierte Erläuterung der Sitzungsverteilung、Nginx重新载入命令

      C:\server\nginx-1.0.2>nginx.exe -s reload

 

四、黎明前的黑暗-MachineKey


 

      本以为做了上述准备和相关代码编写,就能够实现Session共享了,结果我想的太简单了,应用程序发布后并不能实现Session共享,难道分布式共享下Session需要特殊处理?.Net我是怎么实现的,它们的方法应该方法类似。我突然想到了MachineKey这个东西,之前在.Net版本分布式共享时候需要添加这个东西,评论也有人问我什么要加MachineKey。后来只能搜索.Net Core Machinekey关键词,找到了以下几篇文章做参考。

      搭建分布式 ASP.NET Core Web

      ASP.NET Core 数据保护(Data Protection)

      坎坷路:ASP.NET Core 1.0 Identity 身份验证(中集)

      net core 1.0 实现负载多服务器单点登录

      此问题属于数据安全问题,微软在开发.Net Core中延续了之前的设计,采用数据保护(Data Protection)方式对一些内部数据进行加密解密设计,如:Session、Cookie等(远不止这些)。这样可以保证数据的真实性、完整性、机密性、隔离性。数据安全必然离不开加解密算法,大家想一下之前.Net的WebFrom中的ViewState,它最终解析到Html页面是个hidden标签里面有一串很复杂的字符串,这个字符串是被数据保护(Data Protection)机制加密过的。Session也一样,大家可以看看Session存到Redis中啥样,见下图:

Detaillierte Erläuterung der Sitzungsverteilung

       数据保护(Data Protection)有个特性是隔离性,大家可以想象一下,数据保护核心是加密解密,常见的加密方式有对称加密和非对称加密,上一篇做分布式共享时候,两台机子拷贝了同样的MahcineKey,那么他的内部加密猜测好像是对称加密,MachineKey直译中文为“机器钥匙”在联想隔离性,那么可以推断出来不同机子密钥是不同的,那么MachineKey的作用是统一不同机子的密钥。(吐血中…….这个只是个猜测,详细原理请参考专业文章)

1、提取.Net Core的MachineKey

        .Net Core的MachineKey存储是以key-xxxx-xxxx-xxxx-xxxx.xml的形式存储的,那如何提取这个xml信息呢?

       Startup.cs的ConfigureServices添加下图高亮代码

<br>

public void ConfigureServices(IServiceCollection services)
        {

              //抽取key-xxxxx.xml <br>

            services.AddDataProtection().PersistKeysToFileSystem(new DirectoryInfo(@"D:\XML"));
            services.AddSession();
            services.AddDistributedRedisCache(option =>
            {                //redis 数据库连接字符串
                option.Configuration = Configuration.GetConnectionString("RedisConnection");                //redis 实例名
                option.InstanceName = "master";
            });
            services.AddMvc();
        }

       查看D:\Xml里的xml文件

Detaillierte Erläuterung der SitzungsverteilungDetaillierte Erläuterung der Sitzungsverteilung

 

2、重写IXmlRepository接口固定Key

       在项目中添加CustomXmlRepository.cs类,其中keyContent中填写key.xml内容,注意:里面的几个时间(现在还不能确定expirationDate对项目是否有影响),有人问我KeyContent能否从文件里读,回答是可以,但是ubuntu的文件路径保准不是Windows的d:\之类的,需要使用Linux的写法,所以干脆字符串来的快。

<br>

using Microsoft.AspNetCore.DataProtection.Repositories;using Microsoft.AspNetCore.Http;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Threading.Tasks;using System.Xml.Linq;namespace SessionTest
{    public class CustomXmlRepository : IXmlRepository
    {        private readonly string keyContent =@"<?xml  version=&#39;1.0&#39; encoding=&#39;utf-8&#39;?>
<key erl der sitzungsverteilung38d-9eadetaillierte sitzungsverteilung-detaillierte sitzungsverteilungdetaillierte sitzungsverteilungfb-a690-detaillierte sitzungsverteilung38c8d788619>
  <creationdate>2017-0Detaillierte Erläuterung der Sitzungsverteilung-27T06:1Detaillierte Erläuterung der Sitzungsverteilung:07.219Detaillierte Erläuterung der Sitzungsverteilung692Z</creationdate>
  <activationdate>2017-0Detaillierte Erläuterung der Sitzungsverteilung-27T06:1Detaillierte Erläuterung der Sitzungsverteilung:07.18Detaillierte Erläuterung der SitzungsverteilungDetaillierte Erläuterung der Sitzungsverteilung6Detaillierte Erläuterung der Sitzungsverteilung7Z</activationdate>
  <expirationdate>2017-07-26T06:1Detaillierte Erläuterung der Sitzungsverteilung:07.18Detaillierte Erläuterung der SitzungsverteilungDetaillierte Erläuterung der Sitzungsverteilung6Detaillierte Erläuterung der Sitzungsverteilung7Z</expirationdate>
  <descriptor>
    <descriptor>
      <encryption erl der sitzungsverteilung6_cbc></encryption>
      <validation erl der sitzungsverteilung6></validation>
      <masterkey erl der sitzungsverteilung:requiresencryption="'true' xmlns:pDetaillierte" sitzungsverteilung="'http://schemas.asp.net/201Detaillierte">
        <!-- Warning: the key below is in an unencrypted form. -->
      <value>HOzDetaillierte Erläuterung der Sitzungsverteilung8FE6STtDHlMo2ZONoPgPTOOjRPikRWXmHOwNDSDetaillierte Erläuterung der Sitzungsverteilungo6NPbDetaillierte Erläuterung der Sitzungsverteilunghlgl/DxXUhat66soovBUFy1APXCQDetaillierte Erläuterung der Sitzungsverteilungz30DDPyw==</value>
      </masterkey>
    </descriptor>
  </descriptor>
</key>";         
        public virtual IReadOnlyCollection<xelement> GetAllElements()
        {            return GetAllElementsCore().ToList().AsReadOnly();
        }        private IEnumerable<xelement> GetAllElementsCore()
        {            yield return XElement.Parse(keyContent);
        }        public virtual void StoreElement(XElement element, string friendlyName)
        {            if (element == null)
            {                throw new ArgumentNullException(nameof(element));
            }
            StoreElementCore(element, friendlyName);
        }        private void StoreElementCore(XElement element, string filename)
        {
        }
    }
}</xelement></xelement>

修改Startup.cs文件中的ConfigureServices方法加载自定义的CustomXmlRepository类

<br>

public void ConfigureServices(IServiceCollection services)
        {            ////抽取key-xxxxx.xml
            //services.AddDataProtection()            //        .PersistKeysToFileSystem(new DirectoryInfo(@"D:\XML"));            services.AddSingleton<ixmlrepository>();</ixmlrepository>

              services.AddDataProtection(configure =>

            {
                configure.ApplicationDiscriminator = "newP.Web";
            });

            services.AddSession();
            services.AddDistributedRedisCache(option =>
            {                //redis 数据库连接字符串
                option.Configuration = Configuration.GetConnectionString("RedisConnection");                //redis 实例名
                option.InstanceName = "master";
            });

            services.AddMvc();

        }

五、实现效果演示


         演示效果说明

         本机127.0.0.1也为10.2.107.100,因为电脑性能有限,没有弄windows虚拟机,只弄了10.2.107.Detaillierte Erläuterung der Sitzungsverteilung6这台Linux虚拟机。

         MachineKey的这个实现思路也可以用到.Net Core的身份验证上。

         UNC文件也可以实现Session共享方式

         原理就是Windows和Linux通过文件共享和挂载的方式Key.xml共享一个文件,但是总觉得有点怪怪的,共享文件会不会被别人恶意篡改,所以最后采用重写的方式实现。

         对UNC方式感兴趣的请看:搭建分布式 ASP.NET Core Web

 

 

Detaillierte Erläuterung der Sitzungsverteilung 6. Nachtrag & Gedanken


Ich hoffe, du Sie können diesen Artikel lesen, um jedem ein einfaches Verständnis der Benutzerfreundlichkeit der Website zu vermitteln und die Vorteile der Speicherung von Sitzungen in Redis zu verstehen. Dieser Artikel stellt die Spitze des Eisbergs im Bereich der Website-Usability-Inhalte vor, und es gibt noch viel Wissen, das wir lernen und ansammeln müssen.

Die .Net Core-Version der verteilten Sitzungsfreigabe gibt uns ein vorläufiges Verständnis von .Net Core. Die hohe Leistung, die plattformübergreifende und offene Quelle von .Net Core haben viele Menschen überzeugt Ich ändere meine Meinung zu .Net, aber .Net Core hat auf dem chinesischen Markt noch einen langen Weg vor sich. Ich denke, dass .Net Core kein Allheilmittel ist, um den Marktanteil der .Net-Sprache in China umzukehren. Die wahre Wunderwaffe könnte .Neter sein, die jeden Tag Programme schreiben. Auch wenn Microsoft .Net Core viel bewirbt und es überall Erfolgsgeschichten gibt, werden wir irgendwann eliminiert, wenn wir nicht neues Wissen lernen und verstehen. Nur durch kontinuierliches Lernen und harte Arbeit, das Verdauen, Aufnehmen und schließlich Teilen von Wissen mit anderen können wir den größten Gewinn erzielen. Wenn wir am Scheideweg stehen, warum nicht neues Wissen und Methoden lernen, um unsere eigene Erfahrung zu verbessern? und Erfahrung. Ich erzähle anderen oft, dass das Wichtigste in den ersten Jahren der Arbeit nicht das Wissen ist, sondern der Stil, mit dem man Dinge angeht, und die Beharrlichkeit, mit der man seine Ziele erreicht. Wie das Sprichwort sagt: „Es ist leicht, die Situation zu ändern, aber es ist schwer.“ die Natur zu ändern.“ Wenn Sie eine schlechte Arbeitseinstellung und -methode haben, ist dies zu Ihrer Arbeitsgewohnheit geworden. Selbst wenn Sie die Sprache, den Job oder sogar die Branche wechseln, wird dies große Auswirkungen auf Ihre berufliche Entwicklung haben. Gute Gewohnheiten müssen einen oder zwei Tage lang beibehalten werden, aber wenn man länger als drei Monate durchhält, wird es zu einer unmöglichen Aufgabe, geschweige denn ein paar Jahre lang. „Tausend Meilen kann man nicht erreichen.“ Nur wenn ich beharrlich daran arbeite, mich jeden Tag weiterzuentwickeln, kann ich wachsen, denn ich weiß, dass ich kein Genie bin und dass es harte Arbeit erfordert, um zu wachsen.

„Seien Sie ein bodenständiger Mensch und erledigen Sie die Dinge gewissenhaft.“ Ich bin fest davon überzeugt, dass meine Bemühungen belohnt werden, aber ich habe die Chance noch nicht genutzt. Abschließend möchte ich denjenigen meinen Dank aussprechen, die an vorderster Front hart an der Entwicklung mit .Net Core arbeiten.

Die obige Zusammenfassung ist die reichhaltige Hühnersuppe für die Seele, die ich gekocht habe Detaillierte Erläuterung der Sitzungsverteilung, aber wann kann ich meine Aufschieberitis außerhalb der Arbeit loswerden Detaillierte Erläuterung der Sitzungsverteilung, hat dieser Artikel Es hat sich verzögert, die Zeitung zögert weiter, Englisch lernen zögert, es gibt noch viel zu tun, aber es zögert weiter, es ist eine Tragödie Detaillierte Erläuterung der Sitzungsverteilung. . . Plötzlich wurde mir klar, dass der Yali-Berg riesig ist und schlechte Gewohnheiten schwer zu ändern sind! Bitte verstehen Sie dies als Warnung! Seien Sie natürlich kein Workaholic und Sie können mehr Zeit mit Ihrer Familie verbringen.

Persönliche Meinung, die Analyse kann aufgrund von Wissen und Erfahrung einseitig sein, bitte gib mir mehr Verständnis.

7. Referenzartikel


🎜 >ASP.NET Core verwendet Redis und Protobuf für das Sitzungscaching

.Net Core Session verwendet Erläuterung der Sitzungsverteilung>

Asp.net Core verwendet Redis zum Speichern von Sitzungen

Verwendung von Sitzungen und HttpContext in ASP.NET Core und MVC Core

Die Beziehung zwischen .NET Core, .NET Framework und Mono

Ubuntu in Virtualbox Shared Ordnereinstellungen mit Windows

Erstellen Sie ein verteiltes ASP.NET Core Web

ASP.NET Core Data Protection (Datenschutz)

Bumpy Road: ASP.NET Core 1.0 Identity Authentication (CIMC)

Net Core 1.0 realisiert Last-Multi-Server-Single-Sign-On

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Sitzungsverteilung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn