高并发网站架构设计之负载均衡

网站伴随着用户访问的增长,会渐渐的由单台服务器演变成“服务器集群”。在整个网站成长的过程中,其实也是我们运维技术不断解决问题的过程。没有任何一个方案是终极方案。

网站由于用户的不断增长,已经不能满足日常的访问需求了,这个时候就需要我们增加多台服务器来减轻原先服务器的访问压力,这就是负载均衡

web负载均衡

负载均衡,英文名字叫Load Balance。主要应用在WEB服务器、DNS服务器以及企业关键应用方面。我们经常碰到的就是负载均衡在WEB服务器上的一些应用。而在WEB服务器上,我们通常通过反向代理的方式进行实现。

反向代理服务的核心工作主要是转发HTTP请求,扮演了浏览器端和后台Web服务器中转的角色。因为它工作在HTTP层(应用层),也就是网络七层结构中的第七层,因此也被称为“七层负载均衡”。可以做反向代理的软件很多,我们常用的一种是Nginx。

Nginx是一种非常灵活的反向代理软件,可以自由定制化转发策略,分配服务器流量的权重等。反向代理中,常见的一个问题,就是Web服务器存储的session数据,因为一般负载均衡的策略都是随机分配请求的。同一个登录用户的请求,无法保证一定分配到相同的Web机器上,会导致无法找到session的问题。

解决方案主要有两种:

配置反向代理的转发规则,让同一个用户的请求一定落到同一台机器上(通过分析cookie),复杂的转发规则将会消耗更多的CPU,也增加了代理服务器的负担。

将session这类的信息,专门用某个独立服务来存储,例如redis/memchache,这个方案是比较推荐的。

反向代理服务,也是可以开启缓存的,如果开启了,会增加反向代理的负担,需要谨慎使用。这种负载均衡策略实现和部署非常简单,而且性能表现也比较好。但是,它有“单点故障”的问题,如果挂了,会带来很多的麻烦。而且,到了后期Web服务器继续增加,它本身可能成为系统的瓶颈。

配置样本文件:

  1. #user nobody; 
  2. worker_processes 1;
  3. #pid logs/nginx.pid; 
  4. events {
  5.     worker_connections 1024;
  6. }
  7. http {
  8.     include mime.types;
  9.     default_type application/octet-stream;
  10.     sendfile on;
  11.     keepalive_timeout 65;
  12.     upstream www.hcoder.net {
  13.         server 192.168.1.188:80 weight=5;
  14.         server 192.168.1.158:80;
  15.     }
  16.     server {
  17.     listen 80;
  18.     server_name www.hcoder.net;
  19.     location / {
  20.        proxy_pass http://www.hcoder.net; 
  21.        proxy_set_header Host $host;
  22.        proxy_set_header X-Real-IP $remote_addr;
  23.        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  24.    }
  25. }

 

  • 版权声明: 本文源自 菠菜园, 于8年前,由整理发表,共 1375字。
  • 原文链接:点此查看原文
你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!