背景:
阿里的SLB产品针对中小型网站在实现负载均衡方面优势突出,只需要有至少2台ECS,通过简单配置即可实现负载的均衡,并同时可监控资源占用情况。
从事信息技术行业的人都知道负载均衡的重要性,所以某网站在阿里刚推出SLB产品的时候就使用了该产品。
局限性
两台机器做负载,如何让用户在访问的过程中即使从这台机器跳到另一台机器以让能够保持用户的链接和登陆状态,这是负载均衡首先要考虑的问题,SLB的会话保持功能就是解决这一问题的一个手段,它是基于cookie机制,可以有SLB自行植入cookie,也可以由使用者自定义cookie来重新写入。但是会话保持功能有一个特点就是为了保持会话,它将会给每一个get请求地址set一个cookie,作为唯一识别同一用户发起的请求进而将其所有的请求分发到同一台服务器上。
而阿里的CDN产品的原理是根据设置的缓存策略将静态内容缓存到离用户最近的节点上以提升用户的访问速度,而动态内容就直接回源站获取,但是其收费机制确实挺恶心的,即使动态内容没有被缓存只要穿透其CDN节点,都会统计并收费,确实有点人为刀俎我为鱼肉的感觉。而恰恰针对被set cookie的页面都会被CDN识别为需要回源站获取的内容,该被缓存起来的内容却活生生的绕过了CDN从源站获取,想起来牙根就痒痒,什么玩意儿
以子之矛攻子之盾,何如?结果是用户遭殃,果断放弃SLB产品,自建负载均衡服务。
nginx负载均衡
不得不说俄罗斯人发明的这个轻量级的web应用确实很有市场,操作配置相对来说要简单很多,之前一直使用了其反向代理的功能,最近尝试过防盗链,形势所迫不得不使用其负载均衡功能了。
其实很简单,以下代码就是实现其负载均衡机制的核心,它将www.test.com域名绑定到了后台的2台服务器上,默认两台服务器的权重是一样的,会平均的接收用户请求,ip_hash命令会确保同一用户的访问总是被分配到同一台服务器上,以确保用户体验的连续性。
upstream www.test.com {
ip_hash;
server 10.161.168.200:80;
server 10.160.55.201:80;
}
location / {
proxy_pass http://www.test.com/;
proxy_set_header Host $host;
proxy_redirect off;#如果需要修改从后端服务器传来的应答头中的"Location"和"Refresh"字段,可以用这个指令设置。
proxy_set_header X-Real-IP $remote_addr;#允许将发送到后端服务器的请求头重新定义或者增加一些字段。 这个值可以是一个文本,变量或者它们的组合。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404;#当后端服务器遇到500、502、503、504、404错误与超时,自动将请求转发给另一台服务器,达到故障转移的目的。
}
观察CDN,缓存内容明显增大
- 上一篇: nginx关闭部分日志
- 下一篇: ajax同步调用采用post提交数据的问题
评论