Session共享

  我们在做站点的时候,通常需要保存用户的一些基本信息,比如登录就会用到Session;当使用Nginx做负载均衡的时候,用户浏览站点的时候会被分配到不同的服务器上,此时如果登录后Session就在不同发服务器上,A记住了用户的登录状态,可是下一次用户请求被分配到B去了怎么办?不可能让用户再登陆一次,所以要让session在不同的服务器上都能获取到相同的内容。

方法思路

  1. ip_hash,这是Nginx的轮询方法,用户登录站点时,就会一直在这台服务器上就不存在Session的问题;

    优点:不需要采用任何处理;

    缺点:当某台服务器访问的量大时,负载均衡就相当于没用了

  2. 用Memcached或者redis缓存的方式;
  3. 使用数据库直接存储;
    1.   缺点:对数据库要求高,当出现高访问量时,需要不停的读写,数据库压力大,
  4. 用Memcached或者redis + DB异步存储;

   

  这四点是实现Session共享的一种方案和思路,每种方法都有自己的优缺点,全部的优缺点我也无法描述,毕竟没有具体的去实现和使用;使用哪种方式还需要看项目的情况和具体的解决方案;

  在自己的学习过程选择第二种,Nginx + Memcached 实现Session共享的负载均衡;

  自己搞一台服务器,Nginx和Memcached 在一台服务器;

  在服务器我部署了相同的两个站点,代码相同,一个端口为8080;另一个为8090;

    private static readonly IMemcachedManager _memcachedManager = new MemcachedManager();

         public ActionResult Index()
{
Random rd = new Random();
Session["Session"] = rd.Next(, ); if (!_memcachedManager.IsExit("Session"))
{
_memcachedManager.SetValue("Session", Session["Session"]);
} ViewBag.Message = "当前站点为:8080;Session为:" + _memcachedManager.GetValue<string>("Session") + ""; return View();
}

运行结果:

  实现了我的目的,达到了均衡负载同时session共享的目的。

  Nginx除了Session共享的问题,还有一个共享资源的问题,比如上传文件,这需要负载均衡需要解决的一个问题;

总结

  不管是安装Nginx还是Memcached,在这个过程中,并没有遇到比较深的坑,当然Memcached在网上也有很多的例子,一些基本的安装都能够很快的实现,部署起来相对于简单毕竟只是一个Demo,不知道在实际的项目中将会是如何的,也会会有很大的不同;

  这只是自己学习的一个地方,当然这里面还有更多东西需要去研究;

  共勉

 

Nginx + Memcached 实现Session共享的负载均衡的更多相关文章

  1. springboot+spring session+redis+nginx实现session共享和负载均衡

    环境 centos7. jdk1.8.nginx.redis.springboot 1.5.8.RELEASE session共享 添加spring session和redis依赖 <depen ...

  2. SpringBoot2.x+Redis+nginx实现session共享和负载均衡

    1.创建SpringBoot项目添加依赖 <dependency> <groupId>org.springframework.session</groupId> & ...

  3. [nginx] - 使用nginx实现反向代理,动静分离,负载均衡,session共享

    反向代理概念 先说正向代理,比如要访问youtube,但是不能直接访问,只能先找个FQ软件,通过FQ软件才能访问youtube. FQ软件就叫做正向代理.所谓的反向代理,指的是用户要访问youtube ...

  4. nginx Win下实现简单的负载均衡(2)站点共享Session

    快速目录: 一.nginx Win下实现简单的负载均衡(1)nginx搭建部署 二.nginx Win下实现简单的负载均衡(2)站点共享Session 三.nginx Win下实现简单的负载均衡(3) ...

  5. 分布式Session共享(二):tomcat+memcached实现session共享

    一.前言 本文主要测试memcached实现session共享的实现方式,不讨论如何让nginx参与实现负载均衡等. 二.环境配置 本测试在Window下进行 name version port To ...

  6. Tomcat通过Memcached实现session共享的完整部署记录

    对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点, 大体上有两种方式:一种是把所有Ses ...

  7. nginx作反向代理,实现负载均衡

    nginx作反向代理,实现负载均衡按正常的方法安装好 ngixn,方法可参考http://www.cnblogs.com/lin3615/p/4376224.html其中作了反向代理的服务器的配置如下 ...

  8. nginx的概念与几种负载均衡算法

    Nginx的背景 Nginx和Apache一样都是一种WEB服务器.基于REST架构风格,以URI(Uniform Resources Identifier,统一资源描述符)或URL(Uniform ...

  9. nginx Win下实现简单的负载均衡(1)nginx搭建部署

    快速目录: 一.nginx Win下实现简单的负载均衡(1)nginx搭建部署 二.nginx Win下实现简单的负载均衡(2)站点共享Session 三.nginx Win下实现简单的负载均衡(3) ...

随机推荐

  1. MySQL学习笔记(一):SQL基础

    定义:SQL即Structure Query Language(机构化查询语言)的缩写,是使用关系数据库的应用语言. 包括三个类别: (1):DDL(Data Definition Language) ...

  2. Linux安装搜狗输入法教程

    最近开始学习linux 在安装输入法中遇到的一些问题,最终成功安装,也得益于网络上的前辈写的文章,现在将全部安装步骤以及遇到的一些问题总结如下:   基本上分三步走 1,添加fcitx的键盘输入法系统 ...

  3. 利用GPU实现大规模动画角色的渲染

    0x00 前言 我想很多开发游戏的小伙伴都希望自己的场景内能渲染越多物体越好,甚至是能同时渲染成千上万个有自己动作的游戏角色就更好了. 但不幸的是,渲染和管理大量的游戏对象是以牺牲CPU和GPU性能为 ...

  4. Infer 在 Mac 上的安装和环境配置

    Infer 在 Mac 上的安装和环境配置 Infer 介绍 Infer 是一个静态分析工具.Infer 可以分析 Objective-C, Java 或者 C 代码,报告潜在的问题. 任何人都可以使 ...

  5. <EffectiveJava>读书笔记--02泛型数组

    1, java中可以申明泛型类型的数组引用; 2, 但是不能实例化一个泛型数组对象; 3, 针对第二点, 可以曲线救国, 实例化一个Object数组, 再进行类型强转; 见代码如下: public c ...

  6. node调用phantomjs-node爬取复杂页面

    什么是phantomjs phantomjs官网是这么说的,'整站测试,屏幕捕获,自动翻页,网络监控',目前比较流行用来爬取复杂的,难以通过api或正则匹配的页面,比如页面是通过异步加载.phanto ...

  7. (转载)ubuntu创建新用户并增加管…

    问题导读: 1.adduser与useradd有什么区别? 2.那种方式会自动创建组.用户组等信息? 3.如何新建用户具有管理员权限? $是普通管员,#是系统管理员,在Ubuntu下,root用户默认 ...

  8. python--DenyHttp项目(2)--ACM监考客户端测试版☞需求分析

    写脚本之前,先写个需求分析 以后会多写一些脚本,会注意这方面的 禁止HTTP请求☞需求分析 核心功能: 通过修改Hosts文件,禁止用户访问百度等搜索引擎 实现方法: 通过CMD控制台命令COPY覆盖 ...

  9. java运算符优先级与流程控制

    1. Java 的方法Method (函数 Function), 功能, 动作 1) 方法就是函数: y=f(x)=3x+6; 2) 方法的语法   (修饰词)(返回值类型)(方法名)(参数列表){  ...

  10. 如何两周达到150行Java程序的能力--part 2

    第一次课训练营课程打通了有C语言编程通往面向对象编程的道路,然而道路依然会曲折.下图是第二次训练营课程的训练大纲,从第二次开始,每次课首先进行测试. 针对作业1的训练要求,明确定义了13个具体的测试点 ...