Net分布式系統之二:CentOS系統搭建Nginx負載均衡(下)


  上一篇文章介紹了VMWare12虛擬機、Linux(CentOS7)系統安裝、部署Nginx1.6.3代理服務做負載均衡。接下來介紹通過Nginx將請求分發到各web應用處理服務。

 

一、Web應用開發

  1、asp.net mvc5開發

  (1)新建一個MVC5工程,新建一個Controller,在Index方法實現將當前時間保存到Session["mysession"],並寫Cookies["mycookies"]存儲主機名和當前時間。

public ActionResult Index()
        {
            if (this.HttpContext.Session["mysession"] == null)
            {
                this.HttpContext.Session["mysession"] = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
            }

            this.HttpContext.Response.Cookies.Add(new HttpCookie("mycookies")
                {
                    Expires = DateTime.Now.AddDays(1),
                    Value = HttpContext.Server.MachineName + "||" + DateTime.Now.ToString()
                });

            return View();
        }

  (2)在Controller中新增第二個方法GetSession,顯示Session和Cookies的值。

public ActionResult GetSession()
        {
            if (this.HttpContext.Session["mysession"] != null)
            {
                ViewBag.DD = this.HttpContext.Session["mysession"].ToString();
                ViewBag.SCode = this.HttpContext.Session["mysession"].GetHashCode().ToString();
                ViewBag.SID = this.HttpContext.Session.SessionID;
            }

            ViewBag.CVAL = System.Web.HttpContext.Current.Request.Cookies["mycookies"].Value;
            ViewBag.CID = System.Web.HttpContext.Current.Request.Cookies["mycookies"].Name;
            ViewBag.CDO = System.Web.HttpContext.Current.Request.Cookies["mycookies"].Domain;

            return View();
        }

  (3)將session和cookies信息在頁面顯示,GetSession視圖代碼如下:

@{
    ViewBag.Title = "GetSession";
}

<h2>站點:A -- GetSession</h2>

<span>站點:A</span>
<br />
<span>Session Value: @ViewBag.DD</span>
<br/>
<br />
<span>Session SCode: @ViewBag.SCode</span>
<br />
<br />
<span>Session ID: @ViewBag.SID</span>
<br />
<br />
<span>Cookies ID: @ViewBag.CID</span>
<br />
<br />
<span>Cookies Values: @ViewBag.CVAL</span>
<br />
<br />
<span>Cookies Values: @ViewBag.CDO</span>

   以上實現session和cookies讀寫,為了驗證負載均衡下,每次請求處理是否保持一致,接下來重要內容,做負載均衡如何如何保持session一致,對於asp.net技術session原理此處不做介紹,網上搜索下大把。

 

  2、Session共享技術

   .Net平台對支持幾種session存儲模式:

  (1)InProc 模式

    session存儲於當前站點在同一個進程內,修改web.config或者bin中文件更新,會導致session丟失。此模式為默認模式。

  (2)aspnet state 模式 

    aspnet state是將session存儲在狀態服務中,需要啟動ASP.NET State Service,能看到進程aspnet_state.exe。還需要在web.config配置此模式。

  (3)SQLServer 模式 

    此模式需要SQL Server配置相關信息,啟動代理服務、數據庫賬號及表,並將web.config指向數據庫。

  (4)第三方擴展 模式 

    本框架采用此模式,將session存儲到其他存儲,比如:Memcached、redis緩存中,達到共享session的目的。可以通過實現ASP.NET中的SessionStateStoreProviderBase這個抽象類擴展。本系統采用將session存儲在redis緩存中,通過引入  RedisSessionStateProvider組件。

Install-Package Microsoft.Web.RedisSessionStateProvider

 

  3、Nginx服務狀態情況

  在centos終端輸入命令service nginx status 查看情況,確保服務正常運行。

 

  4、Web站點部署

  部署兩個站點分別為:

  站點A:端口為8081,

  站點B:端口為8082,

  

 

二、功能效果展現

   (1)瀏覽器訪問Index方法,http://192.168.119.128/demo,顯示如下:

        

 

  (2)瀏覽器訪問GetSession方法,http://192.168.119.128/demo/getsession,顯示如下:

     

 

  通過以上驗證,獲取到的session和cookies都是一致。

 

 

作者:andon
出處: http://www.cnblogs.com/Andon_liu
關於作者:專注於微軟平台項目架構、管理。熟悉設計模式、領域驅動、架構設計、敏捷開發和項目管理。現主要從事ASP.NET MVC、WCF/Web API、SOA、MSSQL、redis方面的項目開發、架構、管理工作。 如有問題或建議,請一起學習討論!
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
如有問題,可以郵件:568773262@qq.com 聯系我,謝謝。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM