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. javascript中typeof和instanceof用法的总结

    今天在看相应的javascript书籍时,遇到了typeof和instanceof的问题,一直不太懂,特地查资料总结如下: JavaScript 中 typeof 和 instanceof 常用来判断 ...

  2. 微信小程序框架探究和解析

    何为框架 你对微信小程序的技术框架了解多少? 对wepy 框架进行一系列的深入了解 微信小程序框架解析和探究 小程序组件化框架WePY 在性能调优上做出的探究 开发者培训班上海专场PPT分享:小程序框 ...

  3. .NET MVC与三层架构

    虽然接触了两者有一段时间了,但是有时还是会混淆概念,在此处不打算说明二者的区别,因为二者都是架构模式,并且也有一定的共存度,在实际开发中,严格区分意义不大.基于最近涉及到这部分知识就在复习下,编程过程 ...

  4. Neo4j图数据库

    01. 图数据库 图数据库是专门存储和检索大量信息网络的存储引擎.它可以有效地将数据存储为节点和关系,并允许高性能检索和查询这些结构.属性可以添加到节点和关系.节点可以用零个或多个标签标注,关系总是定 ...

  5. [Tyvj模拟赛]运

    运 题目 [问题背景]zhx 和妹子们玩数数游戏. [问题描述] 仅包含4或7的数被称为幸运数.一个序列的子序列被定义为从序列中删去若干个数, 剩下的数组成的新序列.两个子序列被定义为不同的当且仅当其 ...

  6. Http跨域时的Option请求

    写这篇文章时,我们碰到的一个场景是:要给R系统做一个扩展小应用,前端的html.js放在R系统里,后端需要做一个单独的站点N.B.com.这就导致了跨域问题,而且要命的是,后端同学没有权限向招聘的系统 ...

  7. PAT (Basic Level) Practise (中文) 1023. 组个最小数 (20)

    1023. 组个最小数 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定数字0-9各若干个.你可以以 ...

  8. bootstrap模态框远程加载网页的正确处理方式

    bootstrap模态框远程加载网页的方法 在bootsrap模态框文档里给出了这个方法: 使用链接模式 <a data-toggle="modal" href=" ...

  9. Oracle Basic Ready Notes

    1. Select the standard database block size. This is specified at database creation by the DB_BLOCK_S ...

  10. 第一天的php体验

    第一次了解php.以前对于程序猿的认知是很片面的.因为没有了解过.今天通过一天的了解交流,有了新的认知.对于这个主要应用于前端的语言还是很有兴趣的.毕竟可以亲眼看到自己做出来的网页,心里的成就感肯定满 ...