首頁  >  文章  >  後端開發  >  詳解Session分佈式

詳解Session分佈式

大家讲道理
大家讲道理原創
2017-05-31 14:34:232723瀏覽

一、前言&回顧


#       上篇文章#Session分佈式分享= Session + Redis + Nginx中,好多同學留言問了我好多問題,其中印象深刻的有:nginx掛了怎麼辦?採用Redis的Session方案與微軟Session方案相比,有什麼優勢呢? Cookie也可以取代Session的,採用Redis的Session方案優勢在哪裡? Nginx的iphash方式到底是什麼? MachineKey有啥用? Net Core怎麼實作?

       在那會兒看到大家的提問,我的回答也只是從應用層面回答,基本上的回答可以總結為:「別人這麼做了,解決了這個問題,我用這個方法也解決了這個問題,原理請看連結。一部分東西不可控時候,將其解耦、視覺化、叢集就可以讓一個系統更加健壯,但沒有一個理論支撐。經過最近一段時間的查閱資料和閱讀書籍,對此有了深刻理解,本文將從網站架構的可用性角度對這種Session共享進行分析和講解,並用.net core再次實現這種架構模式。 (Session分散式共享的net core版,因為工作沒有機會應用到生產環境,過往經驗就更別提了,所以只是研究性的,請大家注意,但園子裡早有大牛寫出了相關文章,本文結束會將相關文章貼出)

二、網站可用性--Session管理


     可用性是網站架構中非常重要的一環,什麼是可用性,說的簡單些,就是用戶隨時隨地打開這個網站,這個網站都能打開,並且裡面的功能都能用。如果可用性不高會出現什麼情況?大家想像春節在12306搶票的情景,網站各種崩潰,大家保準會想:要是有別的方式能買到票,我才不用12306這個破網站呢。這個例子有點極端,因為業務場景比較極端,當然,這種現像也不光是網站可用性這一環出了問題。但一個網站三天兩頭打不開,要嘛是點開了裡面的頁面到處是報錯頁面和操作無反應,你還會用這個網站麼?我相信我們在瀏覽網站時候,只要不像12306這種壟斷業務的網站,出現不可用的情況,我們一定會離開尋找其他類似的網站。

     Session管理是網站可用性的內容之一,大家都知道Http是無狀態請求,也就是無法追蹤上次Http請求的相關信息,但是業務中大量需要將Http變為有狀態請求,Session就隨之產生了,可是在分佈式網站設計中,無狀態請求才能實現網站的橫向拓展(增減應用伺服器),因此又與Session相矛盾,因為Session資訊如果儲存在網站應用伺服器的快取中,加台伺服器就不能用了,因此將Session解耦是解決此問題的關鍵,下面介紹網站常見的Session管理手段。

1、Session複製

#     Session複製是最早企業應用系統使用較多的一種服務叢集Session管理機制,開啟Session複製功能,也就是在叢集中的幾台伺服器之間同步Session物件,Java中好像JBoss有這個功能,.Net暫不知道。

     優點:Session資訊讀取快,實作簡單。

     #缺點:叢集規模較大時,伺服器之間Session複製會佔用伺服器資源與網路資源,最後系統會不堪負荷。

詳解Session分佈式

#

2、Session綁定 

     Session綁定的方式,一般軟體/硬平衡負載伺服器都會提供此功能,例如:上篇文章Nginx的IPhash方式,均衡負載伺服器利用Hash演算法將同一IP分配到同一台伺服器上,即Session綁定在某台特定伺服器上,保證Session總是能在這台伺服器上取得,又稱作為會話黏滯。

     缺點:如果某台伺服器當機,那麼這台伺服器上面的Session也就不存在了,用戶請求切換到其他伺服器上因為沒有Session而出錯。

詳解Session分佈式

 

#3、利用Cookie記錄Session

     透過Cookie記錄Session資訊是網站大部分採用的方法,這種方式只要Cookie不濫用,也是非常好非常成熟的方案。 Cookie記錄Session就是把一些狀態資訊放到了客戶端,每次請求都要傳送到伺服器。

     優點:此方法簡單易實現,可用性高,支援伺服器橫向拓展,方案成熟

#     缺點安全性性問題,Cookie有大小限制,且每次請求傳輸Cookie會影響效能

詳解Session分佈式

##詳解Session分佈式、Session伺服器

     Session伺服器的方式管理Session,是一種非常好的解決方案,因為Session是為了業務需要Http狀態而產生,而分散式網站設計中提倡Http無狀態,為了滿足這一設計,Session伺服器是將有狀態的Session資訊與無狀態的應用伺服器相分離,再針對不同伺服器的不同特性進行設計。例如:我們將Session資訊存入Redis中,那麼Redis的叢集配置、穩定性設定都有許多好的解決方案,如果將Session存入Memcache,那麼Memcache的叢集配置、穩定性設定也會有很多成熟案例。這樣我們就將一些問題簡單化,如果我們單獨應用.Net的Session,我們需要了解更多.Net深層的東西並加以改造來保證其可用和穩定,越深層的東西越需要時間和閱歷,而如果將Session儲存媒體轉移到Redis中,Redis叢集方案、管理工具都非常成熟,只需要設定設定就解決了Session的問題,何樂而不為呢。

     優點:可用性高、安全性高、伸縮性佳、效能高、資訊大小無限

詳解Session分佈式

三、.Net Core+Redis+Nginx實作Session分散式共享


1、前期準備&環境

      (1)Vs2017    (2).Net Core 1.1  (3) Win 7  (詳解Session分佈式)ubuntu 16.0詳解Session分佈式

#2、.Net Core介紹

       隨著網路的發展,在當今中國市場(外國不大清楚)開源、跨平台是衡量一門語言、技術好壞的重要指標之一,微軟為了推動.Net開源及跨平台,.Net Core隨之誕生。

       詳見大牛的文章:.NET Core與.NET Framework、Mono之間的關係

#下面說說.Net Core給我的初步的感受:

         1).Net Core並沒有顛覆之前C#語法

          通俗講就是之前說中國話(C#),現在還是說中國話,只是說話的環境改變了。

         2).Net Core因為剛起步,API變了或少了很多

          通俗講就是說話環境變了,而且裡面有好多你沒見過的東西,你不知道用什麼官方詞語來描述,因為官方正在找相關詞來描述這些新東西。

         3)脫離IIS,跨平台

##         餓著,怕離開現在這個環境(Windows+IIS)之後不知道怎麼生存。於是,教會了我們語言(C#),給了我們賺錢的工具(.Net Core+Kestrel),說了一句「去吧孩子,自己奮鬥去吧,稍等,別忘了把這張Visa卡帶上(.Net Core SDK),我會定期付錢給你的。 #          NuGet經過幾年的發展,越來越成熟,.Net Core開源元件取得的主要方法,透過NuGet可以下載各種中間件和元件,而且方便快速(除了有時候斷網,但是可以使用國內鏡像),NuGet就像微軟老媽給咱們的一個通訊錄,並告訴咱們,如果你在某些方面需要幫助的時候,可以透過NuGet找到你的七大姑八大姨來幫忙。

3、拓樸圖

詳解Session分佈式

          根據先前文章中成功的經驗,簡單改造一下,中間一個Windows系統和一個Ubuntu系統承載著.Net Core程序,有人會問Windows那個咋不來個IIS啊,我要說的是.Net Core實行走出去的原則,基本脫離IIS,如果IIS上面想部署.Net Core程式的話,需要安裝同樣的應用程序,並且網站配置的應用程式集區也要變成「無託管程式碼」。

詳解Session分佈式、開發.Net Core程式使用Session

#詳解Session分佈式-1、建立一個Web程序

          以Vs2017建立一個.Net Core的Web應用程序,且此應用程式不包含身分驗證資訊

詳解Session分佈式

詳解Session分佈式

詳解Session分佈式

##         建立如下

詳解Session分佈式-2、 .Net Core調用Session        .#Net Core使用Session,需引用相關Session的NuGet包,網上一查,發現.Net Core的官方Session元件類似一個中間件,並且官方支援Redis。         

############注意:######.Net Core的###Mvc####不能直接使用Session,如果你在程式裡面寫了個###HttpContext.Session###就會出現如下錯誤:#########Session has not been configured ###for### this application or request.#########

詳解Session分佈式

詳解Session分佈式-2-1、Microsoft.AspNetCore.Session

##         .Net Core使用Session必須安裝Microsoft.AspNetCore.Session,他的NuGet套件安裝如下圖:

詳解Session分佈式

#詳解Session分佈式-2-2、修改Startup.cs讓Session可用

          在對應位置加入高亮程式碼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?}");
     });
}

詳解Session分佈式-2-3、Session寫入與讀取

##          Session的讀取方式,與.Net有所不同,寫法如下,且Session的HttpContext.Session.Set String或HttpContext.Session.Set方法分別支援字串#和Byte陣列,所以複雜實體需要轉換成Json存入Session中。

【Session 寫入方法】

#

HttpContext.Session.SetString("key", "strValue");
<br>##【 Session 讀取方法】

HttpContext.Session.GetString("key")

<br>

詳解Session分佈式、Session儲存媒體更換為Redis

詳解Session分佈式-1、先設定Redis

#詳細設定方式請參考:

Session分散式共用= Session + Redis + Nginx

redis-server redis.windows.conf

<br>

#詳細設定方式請見:

Session分散式共用= Session + Redis + Nginx

詳解Session分佈式-2、安裝Microsoft.Extensions.Caching.Redis.Core

##       NuGet中搜尋

Microsoft.Extensions.Caching.Redis.Core並安裝,此NuGet套件是對Caching的拓展,即可以更換Caching儲存媒體

詳解Session分佈式#詳解Session分佈式-3、appsettings.json設定Redis連接字串

      

appsettings.json設定Redis連結字串(相當於web.config裡面配置appsetting節點),注意:新增位置要在Logging上面,否則讀不到,添加程式碼為下面的高亮部分

<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.詳解Session分佈式; background-color: #ffff00">  },</span>
"Logging": {    "IncludeScopes": false,    "LogLevel": {      "Default": "Warning"
    }
  }
}

<br>詳解Session分佈式-詳解Session分佈式、Startup.cs的ConfigureServices方法中新增參考

<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.詳解Session分佈式; background-color: #ffff00">=><br></span><span style="line-height: 1.詳解Session分佈式; 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是否入库。

詳解Session分佈式

詳解Session分佈式-詳解Session分佈式、发布前指定IP和端口(重要) 

         如果你没有看这个步骤,继续下面发布步骤,等你发布时候,你会发现一个尴尬的问题,就是你用IP访问不了你的网站,用localhost可以访问,.Net Core默认是詳解Session分佈式000端口,端口占用也会让你的网站访问不了。

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

詳解Session分佈式

<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)#Windows Server Hosting (x6詳解Session分佈式 & x86)相當於IIS,注意安裝時候請連網(好像是自動下載sdk,具體沒仔細研究)。

詳解Session分佈式

        2)輸入dotnet指令驗證,如果「報'dotnet'不是內部或外部指令」請找到「C :\Program Files\dotnet」資料夾中的dotnet.exe,用cmd來呼叫dotnet.exe來運行,或是新增系統環境變數(window中cmd指令可以節省在寫指令時可以.exe ,也就是指令dotnet就是dotnet.exe)

詳解Session分佈式

      #【#坑1】

         在win7下提示錯誤:Failed to load the dll from [C:\Program Files\dotnet\host\fxr\1.0 .1\hostfxr.dll], HRESULT: 0x800700詳解Session分佈式7

詳解Session分佈式

##         解決方法:        

         需要安裝補丁:KB2詳解Session分佈式33623

        下載地址如下:

         #https://support.microsoft.com/en-us/kb/2詳解Session分佈式33623 

#      【坑2】

         ##注意.net Core版本,注意.net Core版本,本文主要是用的.net Core 1.1.1開發的,下面兩個截圖是版本按錯了出的錯誤訊息

詳解Session分佈式<br><br>

6-2、Ubuntu安裝.Net Core發佈環境[10.2.107.詳解Session分佈式6]

Ubuntu安裝.Net Core官方寫的很詳細了,照著做即可,千萬別抵觸Linux系統,抵觸的話那就別用. Net Core了,如果不知道Ubuntu和Linux的關係的話請百度。

詳解Session分佈式

         最後已驗證dotnet指令是否可用。

詳解Session分佈式

6-3、發佈網站

      

在專案上按右鍵- >發布…

詳解Session分佈式

詳解Session分佈式

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

詳解Session分佈式

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

        说明:我的项目叫做詳解Session分佈式生成了詳解Session分佈式这个为主要的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这个应用程序。)

詳解Session分佈式

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

詳解Session分佈式

 cmd命令找到PublishOutput

<br>

cd C:\PublishOutput

詳解Session分佈式

dotnet运行网站命令

dotnet SessionTest.dll

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

詳解Session分佈式

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

詳解Session分佈式

 

6-3-2、Ubuntu启动.Net Core网站[10.2.107.詳解Session分佈式6:7201]

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

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

dotnet SessionTest.dll

詳解Session分佈式

访问http://10.2.107.詳解Session分佈式6:7201/

詳解Session分佈式

7、Nginx配置

7-1、网站端口修改

        nginx.conf配置修改

詳解Session分佈式

        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.詳解Session分佈式6: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-詳解Session分佈式、Nginx启动命令

        C:\server\nginx-1.0.2>start nginx

        或

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

7-詳解Session分佈式、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中啥样,见下图:

詳解Session分佈式

       数据保护(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文件

詳解Session分佈式詳解Session分佈式

 

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>
  <creationdate>2017-0詳解Session分佈式-27T06:1詳解Session分佈式:07.219詳解Session分佈式692Z</creationdate>
  <activationdate>2017-0詳解Session分佈式-27T06:1詳解Session分佈式:07.18詳解Session分佈式詳解Session分佈式6詳解Session分佈式7Z</activationdate>
  <expirationdate>2017-07-26T06:1詳解Session分佈式:07.18詳解Session分佈式詳解Session分佈式6詳解Session分佈式7Z</expirationdate>
  <descriptor>
    <descriptor>
      <encryption></encryption>
      <validation></validation>
      <masterkey>
        <!-- Warning: the key below is in an unencrypted form. -->
      <value>HOz詳解Session分佈式8FE6STtDHlMo2ZONoPgPTOOjRPikRWXmHOwNDS詳解Session分佈式o6NPb詳解Session分佈式hlgl/DxXUhat66soovBUFy1APXCQ詳解Session分佈式z30DDPyw==</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.詳解Session分佈式6这台Linux虚拟机。

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

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

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

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

 

 

詳解Session分佈式 六、後記&感想


         希望透過本文,讓大家對網站的可用性中有個簡單認識,並了解到Session存入Redis中的優勢。本文介紹的網站可用性內容中的冰山一角,還有許多知識需要我們學習和累積。

        .Net Core版本的Session分散式共享,讓我們對.Net Core有了初步了解,.Net Core的高效能、跨平台、開源,讓許多人改變了對.Net的看法,但是.Net Core在中國市場的路還有很長要走,我認為.Net Core並不是扭轉.Net語言在中國市場佔有率的銀彈。真正的銀彈也許是我們這些天天寫程式的.Neter,即使是微軟大量宣傳.Net Core、成功案例漫天飛,我們不去學習、不去了解新知識,我們最終會被淘汰。語言只是工具,只有透過不斷學習和努力,將知識消化、吸收並最終分享給別人才會有最大的收穫,我們在十字路口迷茫之時,為何不去學習新的知識和方法提升自身的經驗和閱歷。我經常會跟別人說,工作前幾年最重要的不是知識,而是你做事的風格和為目標持之以恆的信念,俗話說“江山易改,本性難移”,如果不好的工作態度和方法變成了你的工作習慣,即使換了語言、換了工作甚至轉了行,都會對你的職涯發展有很大影響。好的習慣一定要堅持,有些事堅持一天可以、堅持兩天可以、但是堅持三個月以上,卻變成了無法完成的任務,更別提幾年了,“不積跬步,無以至千里”,只有堅持每天去磨練自己才能有所成長,因為我知道我不是天才,需要後天的努力才能成長。

      「踏實做人,認認真真做事」我堅信自己的努力,一定會有回報的,只是現在還沒抓住機會。最後,向那些奮鬥在一線使用.Net Core開發的人員致敬。

        以上總結是我熬的味道濃鬱的心靈雞湯詳解Session分佈式,可話說啥時候能改掉我工作外的拖延症啊詳解Session分佈式,這篇文章一直拖拖拖,論文一直拖拖拖,學英語拖拖拖,還有好多事要做可一直也是拖拖拖,悲劇啊詳解Session分佈式。 。 。突然發現鴨梨山大啊,壞習慣不好改啊!請大家引以為戒!當然別做工作狂,身體健康更重要,有時間多陪伴家人。

        個人觀點,因為有可能因為知識和閱歷的原因,分析片面,請多諒解。

 

2、參考文章


##         

ASP.NET Core 使用Redis 和Protobuf 進行Session 快取

        .Net Core Session使用詳解Session分佈式>

        Asp.net Core 使用Redis儲存Session

        Using Sessions and HttpContext        Using Sessions and HttpContext .NET Core and MVC Core

        .NET Core與.NET Framework、Mono之間的關係

#ub

##        virtualbox中#ubuntu和windows共享資料夾設定  

        建立分散式ASP.NET Core Web

########################################################

        ASP.NET Core 資料保護(Data Protection)

        坎坷路:ASP.NET Core 1.0 Identity 驗證(中集)#(中集)#(中集)

        net core 1.0 實作負載多伺服器單一登入

######

以上是詳解Session分佈式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn