Windows平台分布式架构-负载均衡(高并发)
缘由
单纯想在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 1024;#单个后台worker process进程的最大并发链接数 } #设定http服务器,利用它的反向代理功能提供负载均衡支持 http { #设定负载均衡的服务器列表 #weigth参数表示权值,权值越高被分配到的几率越大 upstream web_pool { server 192.168.3.22:8081 weight=10; #本机器IIS部署BalanceNode-01 } server { listen 8080; #侦听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:8081 weight=10; }
(2)一台Nginx+2台IIS
#设定负载均衡的服务器列表 #weigth参数表示权值,权值越高被分配到的几率越大 upstream web_pool { server 192.168.3.22:8081 weight=10; server 192.168.3.24:8081 weight=10; }
(3)一台Nginx+3台IIS
#设定负载均衡的服务器列表 #weigth参数表示权值,权值越高被分配到的几率越大 upstream web_pool { server 192.168.3.22:8081 weight=10; server 192.168.3.24:8081 weight=10; server 192.168.3.26:8081 weight=10; }
(4)效果测试
打开一个浏览器,分别输入地址,恰巧我这三次分别打开了BalanceNode01,BalanceNode02,BalanceNode03
(5)结果绘图
(6)总结
大家可以根据一个简短测试感受负载均衡的平摊压力,提高吞吐量的作用.为了降低影响到最小我的三个测试节点分别部署在不同机器上的,但是中途测试过程中仍然有偏差过大的情况,这时候我基本多次测试,但是总体偏差不大。这一篇我们介绍了负载均衡的高并发。但是仍旧有一些问题需要我们继续思考.....
eg:我们只有一个nginx服务器,这一台是我们的入口,但是假设nginx G掉了,网站基本也就G掉了,所以网站并不是高可用的.这个在windows平台的解决方案需要继续思考。