一、服务器扩容
1、硬件扩容
简介:也叫纵向扩容。简单来讲就是通过增加和改价硬件的方式来换取服务器的高性能。比如说买块内存条,换个ssd。
瓶颈:一直扩容下去也是有瓶颈的,比如主板只能支持100G的内存,你插再大的内存条也不管事,主板不支持,所以得再叠加水平扩容。
2、水平扩容
简介:通过集群的方式来提高服务器的性能。
二、水平扩容
1、负载均衡策略之:轮询
这个比较简单,多台机器轮着来,当然你也可以指定权重什么的配置项,这是我之前文章中的配置:
upstream fzjh {
server 192.168.186.11 weight=1;
server 192.168.186.12 weight=5 backup; server 192.168.186.13 weight=8 down;
}
server {
listen 80 default_server; location / {
proxy_pass http://fzjh;
}
}
2、负载均衡策略之:ip_hash
原理:不同的ip地址经过ip_hash后生成不同的hash值,同一个ip经过ip_hash后会是同一个值,比如两台服务器的话,值%2取余就可以打到固定的机器上了。
解决的问题:iphash通常用来解决回话问题,比如我们一个网站,登录后回话session保持到A服务器上,但是第二次请求的时候请求打到了B服务器,此时又得登录一次,这样的用户体验当然是不好的,所以为了保持以后的请求都打到这台机器上,我们可以用ip_hash来做后台nginx的负载均衡策略。配置如下:
upstream iphashserver {
ip_hash;
server www.test.com:8002;
server www.test.com:8003; }
我在8001上配置了8002和8003,浏览器请求8001,nginx服务器转发到了8003上,以后不管你刷新多少次,请求都会打到这个服务器上。
缺点:该配置适合中小型公司使用,如果是大型项目的话,不太适合。如果后台服务器挂一台,回话就会中断,又需要重新登录,之前的回话保持的数据都消失了,用户体验和安全性不太好。
课外小知识:多台服务器保持回话也有放到Redis里的,但也有个缺点,如果是个大型项目,回话多的时候,Redis也得做分布式。也会增加管理负担。
3、负载均衡策略之:hash $request_uri
原理:请求同一个uri会打到同一个服务器上。(uri:指的是完整的url除了域名部分的后半段)
后端服务器是缓存比较有效。
upstream iphashserver {
hash $request_uri;
server www.test.com:8002;
server www.test.com:8003; }
4、负载均衡之:hash $cookie_xxx
原理和上面的一样,不同的书,hash的对象不一样,
$cookie_xxx:是指cookie里的变量。
upstream iphashserver {
hash $cookie_grafana_session;
server www.test.com:8002;
server www.test.com:8003; }
当然你可以设置php里的sessionID或者Tomcat里的jsessionid,可以达到保持回话的目的。
ip_hash和cookie_jsessionid的什么区别:一个局域网,大家都接到了同一个路由器上,去请求一个服务器的时候,服务器只会认为你们是同一个ip打过来的,都是路由器的ip(网关),所以都会把流量分发到同一台机器,这个时候后台服务器负载就不均衡了。后者是更具回话sessionId做的hash的,这样会平均打倒后端服务上。