一般web架构里面,常见就是一个lamp,但是这个单一架构往往能力有限,随着业务的发展,网站越来越受到欢迎,则原先的架构不能支持高并发的访问。所以我们一般会对这个架构做扩展,来支撑高并发。
由于单台web服务器的能力有限,这个时候可以做水平扩展scale out 向外扩展(负载均衡集群),增加很多台web服务器提供服务。原先有一个垂直扩展 scale up|on(向上扩展:主要是在单台服务器上不断的增加硬件的配置)。
①-垂直扩展
就是在单台服务器上增加配置,但是这有问题:
- 随着硬件的增加的,效率反倒会在一定的时候出现急剧下降。主要的原因是由于如果存在多个CPU或者其他资源,多个服务进程会不断的争夺操作系统资源。
- 硬件是存在瓶颈的,也就是说不可能有一个无限配置的主机(32G、320000G),也叫作电子行业的摩尔定律(《浪潮之巅》)不在满足。(主要是由于现在工业限制,造成电器设备的线宽已经达到瓶颈)量子计算机 光子计算机
- 往往硬件的升级和硬件的成本是不满足线性关系的,是一个指数级别的增加。
- 往往老板最不喜欢花钱的。
②-水平扩展
就是在水平方向不断的增加主机,提升网站的整体的性能。
概念:
- 常见的负载均衡器实现有:软件 nginx 或者 lvs和 硬件 f5(类似交换机 20w) 之分
- 常见的负载均衡的算法有 轮询、加权、ip_hash
简单的nginx负载均衡示例:
1、配置3个虚拟主机:
# 基于81端口的虚拟主机
server {
listen 81;
listen t.cn:81;
server_name t.cn;
location / {
root /var/www/html/81;
index index.html index.htm;
}
}
# 基于82的端口的虚拟主机
server {
listen 82;
listen t.cn:82;
server_name t.cn;
location / {
root /var/www/html/82;
index index.html index.htm;
}
}
# 配置83
server {
listen 83;
listen t.cn:83;
server_name t.cn;
location / {
root /var/www/html/83;
index index.html index.htm;
}
}
# 基于81端口的虚拟主机
server {
listen 81;
listen t.cn:81;
server_name t.cn;
location / {
root /var/www/html/81;
index index.html index.htm;
}
}
# 基于82的端口的虚拟主机
server {
listen 82;
listen t.cn:82;
server_name t.cn;
location / {
root /var/www/html/82;
index index.html index.htm;
}
}
# 配置83
server {
listen 83;
listen t.cn:83;
server_name t.cn;
location / {
root /var/www/html/83;
index index.html index.htm;
}
}
# 基于81端口的虚拟主机 server { listen 81; listen t.cn:81; server_name t.cn; location / { root /var/www/html/81; index index.html index.htm; } } # 基于82的端口的虚拟主机 server { listen 82; listen t.cn:82; server_name t.cn; location / { root /var/www/html/82; index index.html index.htm; } } # 配置83 server { listen 83; listen t.cn:83; server_name t.cn; location / { root /var/www/html/83; index index.html index.htm; } }
2、配置一个80的虚拟主机做前端的用户请求:
server {
listen 80;
server_name t.cn;
location / {
proxy_pass http://backend;
}
}
server {
listen 80;
server_name t.cn;
location / {
proxy_pass http://backend;
}
}
server { listen 80; server_name t.cn; location / { proxy_pass http://backend; } }
3、配置一个upstream,代表的含义配置负载均衡器的能够处理的web服务器
注意:定义这个upstream必须放在http里面的server前面
# 定义负载均衡集群的配置信息
upstream backend {
#ip_hash; # 使用ip_hash算法
server t.cn:81 backup weight=10;
server t.cn:82;
server t.cn:83 weight=1 down;
# 配置的另外的虚拟主机
server 192.168.60.10:8080 weight=4;
}
# 定义负载均衡集群的配置信息
upstream backend {
#ip_hash; # 使用ip_hash算法
server t.cn:81 backup weight=10;
server t.cn:82;
server t.cn:83 weight=1 down;
# 配置的另外的虚拟主机
server 192.168.60.10:8080 weight=4;
}
# 定义负载均衡集群的配置信息 upstream backend { #ip_hash; # 使用ip_hash算法 server t.cn:81 backup weight=10; server t.cn:82; server t.cn:83 weight=1 down; # 配置的另外的虚拟主机 server 192.168.60.10:8080 weight=4; }
backup的含义是这台是备份服务器平时用不上,当前面所有服务器挂了,这台才会被使用。
down表示暂时关闭这台服务器。
weight=10表示权重,例如:客户端发起了15个请求,10个请求走t.cn:81,当然不是严格的10个,只是说明这个服务区能完成很多请求,weight后面不能有空格。