缘由

单纯想在winodows平台部署分布式程序,微软在IIS扩展的介绍中有涉及到Application Request Router + Web Farm + Url Rewriter可以实现分布式部署以及管理工具,但是看到相关资料发现这套方案对于windows的系统依赖程度太高了,而且涉及到的工具配置也是相当的多,所以追求简单以及让大家对于负载均衡有一个了解,我们选择Nginx+IIS进行演示!(给我1分钟,看完这一篇,我们用数据和图表来感受)

负载均衡

(1)官方概念:负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

(2)简单的说分配任务的时候为了达到最合理的安排会按照个人的能力去衡量,分配,每个人都有自己的能力范围和开发功底,so服务器也一样,对于请求也有自己的处理能力.负载均衡一定程度增加网站的可用性,与承载请求压力的能力。

预热

(1)负载均衡服务器nginx

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,这一篇我们主要用nginx作为负载均衡服务器,Nginx作为负载均衡服务器,既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。

(2)网站IIS

我们通过部署多台IIS站点进行压力分摊

基础准备

(1)创建测试站点

我们这里默认创建一个mvc程序,我在页面加载过程中延迟0.5s,没有其他复杂操作

我们默认准备好3个部署文件,方便横向的扩展测试,不同文件的首页分别修改为节点01,节点02,节点03

(2)配置负载均衡nginx

下载地址:http://nginx.org/en/download.html 我们最好下载Stable version稳定版本

follow me,进行nginx配置,我把下载的文件直接解压到d盘符的nginx文件夹进行配置,打开D:\nginx\conf\nginx.config文件,修改内容如下图

我们将nginx监听端口修改为我们未被占用的端口,然后开启nginx

nginx -t 检查nginx配置

网站和 nginx都准备完毕

Getting Start

配置修改

默认nginx负载均衡服务器为BalanceNode-01 本机器测试

#启动进程,通常设置成和cpu的数量相等
worker_processes 1; #工作模式及连接数上限
events {
worker_connections ;#单个后台worker process进程的最大并发链接数
} #设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定负载均衡的服务器列表
#weigth参数表示权值,权值越高被分配到的几率越大
upstream web_pool {
server 192.168.3.22: weight=; #本机器IIS部署BalanceNode-01
}
server {
listen ; #侦听80端口
server_name web_pool; #定义使用www.xx.com访问 #对 "/" 启用反向代理
location / {
proxy_pass http://web_pool;
}
}
}

重新载入配置

再次访问nginx地址,页面直接变为我本机器配置的BalanceNode-01

我们使用上一篇提到的工具ApacheBench进行基准压力测试 了解ab的请戳 here

(1)一台Nginx+1台IIS

  #设定负载均衡的服务器列表
#weigth参数表示权值,权值越高被分配到的几率越大
upstream web_pool {
server 192.168.3.22: weight=;
}

(2)一台Nginx+2台IIS

  #设定负载均衡的服务器列表
#weigth参数表示权值,权值越高被分配到的几率越大
upstream web_pool {
server 192.168.3.22: weight=;
server 192.168.3.24: weight=;
}

(3)一台Nginx+3台IIS

  #设定负载均衡的服务器列表
#weigth参数表示权值,权值越高被分配到的几率越大
upstream web_pool {
server 192.168.3.22: weight=;
server 192.168.3.24: weight=;
server 192.168.3.26: weight=;
}

(4)效果测试

打开一个浏览器,分别输入地址,恰巧我这三次分别打开了BalanceNode01,BalanceNode02,BalanceNode03

(5)结果绘图

(6)总结

大家可以根据一个简短测试感受负载均衡的平摊压力,提高吞吐量的作用.为了降低影响到最小我的三个测试节点分别部署在不同机器上的,但是中途测试过程中仍然有偏差过大的情况,这时候我基本多次测试,但是总体偏差不大。这一篇我们介绍了负载均衡的高并发。但是仍旧有一些问题需要我们继续思考.....

eg:我们只有一个nginx服务器,这一台是我们的入口,但是假设nginx G掉了,网站基本也就G掉了,所以网站并不是高可用的.这个在windows平台的解决方案需要继续思考。

Windows平台分布式架构-负载均衡(高并发)的更多相关文章

  1. Windows平台分布式架构实践负载均衡

    Windows平台分布式架构实践 - 负载均衡 概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Li ...

  2. Windows平台分布式架构实践 - 负载均衡(转载)

    Windows平台分布式架构实践 - 负载均衡 概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Li ...

  3. Windows平台分布式架构实践 - 负载均衡(下)

    概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...

  4. Windows平台分布式架构实践 - 负载均衡

    概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...

  5. Windows平台分布式架构实践 - 负载均衡 上

    概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...

  6. 【转载】Windows平台分布式架构实践 - 负载均衡

    概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Linux和Mac上运行.那么大家(开发者和企业)为 ...

  7. 16套java架构师,高并发,高可用,高性能,集群,大型分布式电商项目实战视频教程

    16套Java架构师,集群,高可用,高可扩展,高性能,高并发,性能优化,设计模式,数据结构,虚拟机,微服务架构,日志分析,工作流,Jvm,Dubbo ,Spring boot,Spring cloud ...

  8. 实现基于Haproxy+Keepalived负载均衡高可用架构

    1.项目介绍: 上上期我们实现了keepalived主从高可用集群网站架构,随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务 ...

  9. 实战Nginx负载均衡高冗余高可用WEB架构

       最近公司主力网站之一改版完成终于上线了,牵扯了我大半年的时间,现在终于有时间坐下来写点东西,总结沉淀一下自己的技术心得.此次,根据服务器的数量和质量,我采用负载均衡高冗余的架构,考虑单点故障,W ...

随机推荐

  1. ActionScript 设置元件色彩属性

        var clr:Color = new Color(mc);     var ct:Object = {ra:100, rb:0, ga:100, gb:0, ba:100, bb:0, aa ...

  2. ARM指令集相关知识

    1.ARMv8引入了执行状态机制,分为AArch32和AArch64 AArch32为T32(Thumb)和A32(ARM). AArch64为A64一种指令集 A64和A32的指令都是32位宽,可以 ...

  3. python 中的集合(set) 详解

    在Python set是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset)两种. 创建集合set.集合set添加.集合删除.交集.并集.差集的操作都是非常实用的方 ...

  4. C实现类封装、继承、多态

    1.  概述 C语言是一种面向过程的程序设计语言,而C++是在C语言基础上衍生来了的面向对象的语言,实际上,很多C++实现的底层是用C语言实现的,如在Visual C++中的Interface其实就是 ...

  5. UIScrollView 期本使用方法

    UIScrollView 1.   contentOffset 默认CGPointZero,用来设置scrollView的滚动偏移量. // 设置scrollView的滚动偏移量 scrollView ...

  6. Npoi Web 项目中(XSSFWorkbook) 导出出现无法访问已关闭的流的解决方法

    原本在CS项目中用的好好的在BS项目中既然提示我导出出现无法访问已关闭的流的解决方法 比较郁闷经过研究 终于解决了先将方法发出来 让遇到此问题的筒子们以作参考 //新建类 重写Npoi流方法 publ ...

  7. web项目路径问题

    路径    相对路径        URL中第一个字符不为“/”        request.getRequestDispatcher("b");        相对于该代码所在 ...

  8. PHP学习笔记04——数组

    <?php // 1.数组的声明,可以直接为数组元素赋值,也可以使用array函数声明数组 /* 索引数组:下标从0开始,依次递增 * 关联数组:字符串为下标 * */ //直接赋值声明数组,不 ...

  9. Linux编程(获取系统时间)

    #include <stdio.h> #include <time.h> int main() { time_t now; struct tm *w; time(&no ...

  10. 【英语】Bingo口语笔记(70) - 最易忽略的2个连读技巧