• Net分布式系统之二:CentOS系统搭建Nginx负载均衡(下)


    上一篇文章介绍了VMWare12虚拟机、Linux(CentOS7)系统安装、部署Nginx1.6.3代理服务做负载均衡。接下来介绍通过Nginx将请求分发到各web应用处理服务。

    一、Web应用开发

      1、asp.net mvc5开发

      (1)新建一个MVC5工程,新建一个Controller,在Index方法实现将当前时间保存到Session["mysession"],并写Cookies["mycookies"]存储主机名和当前时间。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    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的值。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    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都是一致。

    引用:http://www.cnblogs.com/Andon_liu/p/5355148.html

  • 相关阅读:
    SpringBoot2.x整合JDBC及初始化data.sql和schema.sql脚本
    CentOS7安装docker以及错误解决
    Maven的scope属性作用域范围
    (转)排序算法之简单选择排序
    系统开发博客专栏
    IDEA启动报错Plugin Error Problems found loading plugins的解决办法
    Promise函数的使用
    (转)排序算法之希尔排序
    .net Core AJAX使用Header传递参数,以JsonResult返回信息
    MVC 扩展RadioButtonListFor和CheckBoxListFor
  • 原文地址:https://www.cnblogs.com/zjoch/p/6409794.html
Copyright © 2020-2023  润新知