关于ASP.NET中的负载均衡

ASP.NET站点中做负载均衡:

基于HTTP协议我们可能发现我们要解决两点问题:

第一做到负载均衡,我们需要一个负载均衡器。

可以通过DNS轮询来做,在DNS服务器上配置为每次对我们做负载均衡的同一主机名的DNS查询得到不同的IP地址。这样的好处是配置简单投入较小,缺点是浏览器访问各个服务器的机会是均等的,不能根据服务器的负载程度自动把请求路由到负载较小的服务器。

可以通过专用的负载均衡设备,通过监测后台数台服务器的负载情况,自动把HTTP请求转发到负载较轻的服务器。另外必须监测后台服务器的IIS负载情况,而不是整台服务器的CPU负载。同时可能需要在负载均衡器和后台服务应用之间建立心跳连接,以避免出现某台服务器IIS进程或者其中跑的应用已经down掉,负载均衡器反而监测到这台服务器的负载最小而把大量请求转发的这台服务器,达到相反的效果。

第二 Session状态的保持和迁移。

由于HTTP协议的无状态性,我们一般是在Session中保存客户端的一些状态数据,负载均衡之后,前后两次HTTP请求所到达的服务器可能不是同一台,这就造成可能出现这样的情况,前一此请求处理中设置的session在第二次请求中变得不可用了,造成应用程序出错。所以我们要把session跟随迁移。实现的方法就是session的统一存储和服务器间共享。

在ASP.NET中服务器保存session有五种方式,Off不说了,InProc是保存在服务器进程的内存中,显然不能满足要求。另外两种能够满足:

StateServer是把session保存在专门的状态服务器中。这样各台服务器都存取同一个StateServer,达到共享的目的。

SQLServer是把session保存在数据库中。同样能达到目的。

Custom自定制的存储方案,我们自己写当然能够实现。

比较一下,Custom这种自己实现比较麻烦一般不用,SQLServer可以利用数据库的cluster达到高性能和高可用性的目的,StateServer当然也可以通过手段达到高可用性,不过似乎不能实现集群所以性能也有所限制。

另外如果要做负载均衡在StateServer和SQLServer中配置session时,必须在web.config中重写machineKey节点:

<machineKey

validationKey="1234567890123456789012345678901234567890AAAAAAAAAA"

decryptionKey="123456789012345678901234567890123456789012345678"

validation="SHA1"

decryption="Auto"

/>

否则各个应用服务器拿到的session还是不一样的

时间: 2024-10-09 10:58:48

关于ASP.NET中的负载均衡的相关文章

实用干货:Kubernetes中的负载均衡全解

很多企业在部署容器的时候都会选择Kubernetes作为其容器编排系统.这是对Kubernetes的可靠性,灵活性和特性广泛的肯定.在这篇文章中,我们将对Kubernetes如何处理一个非常常见且必要的工作--负载均衡,进行深入的解读.在许多非容器环境(即服务器之间的均衡)中,负载均衡是一个相对简单的任务,但当涉及到容器时,就需要一些其他的.特殊的处理. 管理容器 要理解Kubernetes的负载均衡,首先需要了解Kubernetes是如何组建容器的. 容器通常用来执行特定的服务或者一组服务,因

asp.net如何实现负载均衡方案讨论

我的目标是我一个人搭建一个负载均衡网站.不接受这是网络部,或者运维,或者系统部的事情,所有事情都是我一个人来完成,包括掏钱,包括将来发展等等,同时也别告诉我有没有意义,just do  it !给我方案,给我方法. 拥有资源:不够可以买,多了可以先闲着. 现在我已经买了5台阿里云服务器,ip地址分别为 ip地址                      名字简称      操作系统       iis服务器     cpu   内存DDR3      机械硬盘 111.13.101.204  

CentOS中nginx负载均衡和反向代理的搭建

1: 修改centos命令行启动(减少内存占用): vim /etc/inittab id:5:initdefault: --> 修改5为3 若要界面启动使用 startx 2:安装jdk 1)解压:jdk-7u55-linux-i586.tar.gz [[email protected] jdk]# tar -zxvf jdk-7u55-linux-i586.tar.gz 2)复制:[[email protected] jdk]# cp -rf jdk1.7.0_55/ /usr/local/

在Nginx中做负载均衡配置的实例讲解

负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法. 先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解释N台服务器平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况.那么负载均衡的前提就是要有多台服务器才能实现,也就是两台以上即可. 由于没有服务器,所以本次测试直接host指定域名,然后在VMware里安装了三台CentOS. 测试域名  :a.com A服务器IP :192.168.5.149 (主) B服务器IP :

centos中nginx负载均衡

nginx强大的web服务器,还是反向代理服务器,而且nginx还可以按照调度规则实现动态.静态页面的分离,可以按照轮询.ip哈希.URL哈希.权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查. nginx 的 upstream 支持5种负载均衡方式: 1).轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2).weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况. 3).ip_hash 每

分布式环境中的负载均衡策略

在分布式系统中相同的服务常常会部署很多台,每一台被称为一个服务节点(实例).通过一些负载均衡策略将服务请求均匀地分布到各个节点,以实现整个系统支撑海量请求的需求.本文描述一些简单的负载均衡策略. Round-robin 简单地轮询.记录一个选择位置,每次请求来时调整该位置到下一个节点: curId = ++curId % nodeCnt 随机选择 随机地在所有节点中选择: id = random(nodeCnt); 本机优先 访问后台服务的访问者可能本身是一个整合服务,或者是一个proxy,如果

Netflix中的负载均衡策略

Spring Cloud的负载均衡策略可以通过配置Ribbon搞定,也就是注入实现com.netflix.loadbalancer.IRule的类,当前包含的策略包括 1.RandomRule 随机策略 在while循环内,如果服务地址不为空会不停的循环直到随机出一个可用的服务. @SuppressWarnings({"RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE"}) public Server choose(ILoadBalancer lb, Obje

Nginx在linux服务器中配置负载均衡upstream详解

这篇文章的前提是已经配置好了NGINX,而且tomcat已经配置好了,而且能能够访问了. 这里介绍一台服务器(192.168.83.130),代理两个本机的tomcat(端口分别为:8080.8081),下面是安装后情况: nginx目录: tomcat目录: 首先在两个tomcat的/conf/server.xml里面分别配置端口如下: 分别重启待用. 然后在nginx的/conf/nginx.conf下设置如下: 设置完成后重启nginx. 浏览器输入主机ip:http://192.168.

LVS集群中的负载均衡技术

1.  通过NAT实现虚拟服务器(VS/NAT) VS/NAT 的优点是服务器可以运行任何支持TCP/IP的操作系统,它只需要一个IP地址配置在调度器上,服务器组可以用私有的IP地址.缺点是它的伸缩能力有限, 当服务器结点数目升到20时,调度器本身有可能成为系统的新瓶颈,因为在VS/NAT中请求和响应报文都需要通过负载调度器. 基于 VS/NAT的的集群系统可以适合许多服务器的性能要求.如果负载调度器成为系统新的瓶颈,可以有三种方法解决这个问题:混合方法.VS/TUN和 VS/DR.在DNS混合