前言
一般情况下,一个项目在用户量不多的情况下,只用一台服务器就已经足够业务使用了。但是当项目做起来之后,使用的人越来越多,一个服务器已经支撑不了用户量的业务,就会出现服务器卡顿,延时高提问,那么就需要去优化代码性能,数据库性能与设计优化,负载均衡等一些技术。在这里就介绍一下负载均衡。
一、负载均衡是什么?
在生活中,去车站买票需要去窗口,一开始不知道这个车站,去的人很少,所以只开了一个售票窗口。当车站慢慢传开了,来的人越来越多,发现只有一个窗口根本不够用,买票的人要排很久的队,才买的到票。然后就会开更多的窗口去售票,分担用户量,但是处理流程还是一致的,并且能够接受更多的用户量,用户满意度也提高了。那么这就是生活中的负载均衡。互联网中的负载均衡就是共用一个服务器入口来接受请求,然后按照负载模式(下面会介绍)与算法分发给不同的服务器去处理。下面就是一台服务器的流程处理。
通过负载均衡之后,服务器处理上线就能变得更多。如下图所示。
二、软件/硬件负载均衡
1.软件负载均衡
软件负载均衡顾名思义就是靠一些软件来实现负载均衡。常用的一些软件主要有以下三种。
Nginx
基于Linux的开源免费的负载均衡软件,适用于中小型的Web应用、Web前端
优点:
1.工作在网络的7层之上,可针对http应用做一些分流的策略;
2.Nginx对网络稳定性的依赖非常小;
3.以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS相对小些;
4.可通过端口检测到服务器内部的故障;可作为中层反向代理使用。
缺点:
1.Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些。
2.对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。不支持Session的直接保持,但能通过ip_hash来解决
LVS
基于Linux的开源免费的负载均衡软件,大型网站或重要的服务,且服务器比较多时,可以考虑用LVS。后端采用MySQL数据库一主多从和读写分离,采用LVS+Keepalived的架构。
优点:
1.抗负载能力强,是工作在网络4层之上仅作分发之用,没有流量的产生,对内存和cpu资源消耗比较低。
2.配置性比较低,大大减少了人为出错的几率。
3.工作稳定,其本身抗负载能力很强,自身有完整的双机热备方案,如LVS+Keepalived。
4.无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会收到大流量的影响。
5.应用范围较广,LVS工作在4层,它几乎可以对所有应用做负载均衡,包括http、数据库、在线聊天室等等。
缺点:
1.软件本身不支持正则表达式处理,不能做动静分离;而现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。
2.如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了,特别后面有Windows Server的机器的话,如果实施及配置还有维护过程就比较复杂了,相对而言,Nginx/HAProxy+Keepalived就简单多了。
Haproxy
基于Linux的开源免费的负载均衡软件,适用于Web前端
优点:
1.支持虚拟主机。
2.支持Session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。
3.比Nginx有更出色的负载均衡速度,在并发处理上也优于Nginx。
4.支持TCP协议的负载均衡转发。
5.HAProxy负载均衡策略非常多。
缺点:
针对域名、目录结构,它的正则规则没有nginx比HAProxy强大和灵活
2.硬件负载均衡
硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。负载均衡器有多种多样的形式,除了作为独立意义上的负载均衡器外,有些负载均衡器集成在交换设备中,置于服务器与Internet链接之间,有些则以两块网络适配器将这一功能集成到PC中,一块连接到Internet上,一块连接到后端服务器群的内部网络上。
硬件的有点广,这里就不介绍了。
三、软件负载均衡常用五个模式
软件的负载均衡常用的五个模式分别是轮询,权重,最少连接数,最快响应速度,hash法。
1.轮询。
轮询一般适用于服务器性能差异不大,处理速度基本一致并且都满足需求。平均分配任务,一人一次的来。
2.权重。
在轮询的基础上,增加了一个权重的概念。性能配置比较好的服务器处理就多一点,差的就处理少一点。
3.最少连接数
顾名思义哪个服务器目前处理数最少,就分配给谁。
4.最快响应速度
根据每个服务器响应的速度来进行分配,谁快就分配给谁。(这个不是官方的,如果需要使用则需要安装插件与配置)
5.hash法
Hash 法的负载均衡与之前的几种不同在于,它的结果是由客户端决定的。通过客户端带来的某个标识经过一个标准化的散列函数进行打散分摊。上图中的散列函数运用的是最简单粗暴的取余法。
hash法散列函数除了取余之外,还有诸如变基、折叠、平方取中法等等,此处不做展开,有兴趣的小伙伴可自行查阅资料。
总结
负载均衡的基本概念就介绍到这了,下次再介绍实战步骤。
引用:https://www.jianshu.com/p/1745ec5a6feb
引用:https://www.jianshu.com/p/1f0c543519f5?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
引用:https://www.jianshu.com/p/e0e92b4507c5