一直以来在考虑大型电商系统是怎么实现的,其中主要包括数据库的设计(如淘宝、京东的sku怎么设计实现,),负载均衡、分布式缓存redis、CDN、NFS等,在接下来的博客中将会对这些技术进行介绍,本篇先从应用服务器的负载均衡入手;
我的解释:一项任务交由一个开发人员处理总会有上限处理能力,这时可以考虑增加开发人员来共同处理这项任务,多人处理同一项任务时就会涉及到调度问题,即任务分配,这和多线程理念是一致的。nginx在这里的角色相当于任务分配者。
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
首先从nginx的官网上下载最新版的nginx,[nginx官网地址](http://nginx.org/en/download.html),由于本人使用IIS作为应用服务器,且对linux不熟悉,所以使用windows版本,在此使用的版本是1.10.2,官方下载地址:[nginx-1.10.2.zip](nginx.org/download/nginx-1.10.2.zip) 。下载完成之后解压,运行nginx.exe就启动了nginx了,启动后会在进程里面看到nginx。
说明:如果启动nginx时,黑屏闪一下,并且在资源管理器中找不到该进程,则很有可能是端口冲突,nginx没有启动起来,这是需要修改nginx的监听端口,位置在conf->nginx.conf,打开nginx.conf文件,修改Listen的监听端口,然后再次启动就可以了;
windows下nginx启动、关闭、重启命令说明;
启动:直接点击Nginx目录下的nginx.exe 或者 cmd运行start nginx
关闭:nginx -s stop 或者 nginx -s quit
stop表示立即停止nginx,不保存相关信息
quit表示正常退出nginx,并保存相关信息
重启(因为改变了配置,需要重启):nginx -s reload
1、站点搭建
在站点下面创建一个index页面,输出当前服务器的信息,在这里我十一两个虚拟你搭建的IIS站点,分别是:192.168.1.238:9800、192.168.1.237:9910,index输入内容如下:
2、配置nginx
2.1、修改nginx监听端口,修改http server下的listen节点值,由于本机80端口已经被占用,我改为监听8083端口。
listen 8080;
2.2、 在http节点下添加upstream(服务器集群),server设置的是集群服务器的信息,我这里搭建了两个站点,配置了两条信息。
//注意server不能包含空格(选中server以后的内部,不能包含空格,在这儿折腾了好长时间,修改配置以后,总是重启不了)
upstream mall_one {
server 192.168.1.237:9910;
server 192.168.1.238:9800;
}
2.3、找到http->server节点下面的location,做如下修改
location / {
root html;
index index.aspx index.html index.htm;
#其中mall_one 对应着upstream设置的集群名称
proxy_pass http://mall_one;
#设置主机头和客户端真实地址,以便服务器获取客户端真实IP
proxy_set_header Host
host;proxysetheaderX−Real−IP
remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
修改完成配置文件以后记得重启nginx服务,最终完整配置文件信息如下
3、运行
访问http://127.0.0.1:8080/index.aspx 输出内容如下:
停掉192.168.1.238服务器,再次访问,则访问的是192.168.1.237服务器。
可以看到,请求被分发到了192.168.1.238站点和192.168.1.237站点。出现这样的结果证明我们负载均衡搭建成功了。
服务端代码:下载地址