负载均衡
一、软件负载的定义
软件系统的负载压力是指系统在某种指定软件、硬件及网络环境下承受的流量,例如并发用户数、持续运行时间、数据量等。其中并发用户数是负载压力的重要指标
负载均衡就是一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁碟驱动器或其它资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的
二、什么是负载均衡(Load balancing)
2.1简单的mvc框架
业务量越来越大,一台服务器满足不了业务。
多台服务器来扩容
Tips
当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等
2.2负载均衡服务器
实际应用中,在Web服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为Web服务器流量的入口,挑选最合适的一台Web服务器,将客户端的请求转发给它处理,实现客户端到真实服务端的透明转发。最近几年很火的「云计算」以及分布式架构,本质上也是将后端服务器作为计算资源、存储资源,由某台管理服务器封装成一个服务对外提供,客户端不需要关心真正提供服务的是哪台机器,在它看来,就好像它面对的是一台拥有近乎无限能力的服务器,而本质上,真正提供服务的是后端的集群。
软件负载解决的两个核心问题是:选谁、转发,其中最著名的是LVS(Linux Virtual Server)
拓扑图
2.3负载均衡定义
定义:是一种计算机网络技术
方式:在多个计算机(计算机集群)、网络连接、CPU、磁碟驱动器或其它资源中分配负载
目的:达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载
2.4负载均衡分类
二层负载均衡(mac)
对外依然提供一个VIP(虚IP)
集群中不同的机器采用相同IP地址,但机器的MAC地址不一样
负载均衡服务器接受到请求之后,通过改写报文的目标MAC地址的方式将请求转发到目标机器实现负载均衡
三层负载均衡(ip)
负载均衡服务器对外依然提供一个VIP(虚IP)
集群中不同的机器采用不同的IP地址
负载均衡服务器接受到请求之后,根据不同的负载均衡算法,通过IP将请求转发至不同的真实服务器
四层负载均衡(tcp)
工作在OSI模型的传输层
由于在传输层,只有TCP/UDP协议,这两种协议中除了包含源IP、目标IP以外,还包含源端口号及目的端口号
四层负载均衡服务器在接受到客户端请求后,以后通过修改数据包的地址信息(IP+port)将流量转发到应用服务器
七层负载均衡http
OSI模型的应用层
应用层协议较多,常用http、radius、DNS等
这些应用层协议中会包含很多有意义的内容。比如同一个Web服务器的负载均衡,除了根据IP加端口进行负载外,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。
2.5常用负载均衡工具
硬件负载均衡性能优越,功能全面,但价格昂贵,一般适合初期或者土豪级公司长期使用
软件负载均衡在互联网领域大量使用。常用的软件负载均衡软件有Nginx、LVS、HaProxy等
三 Ngnix
是一个网页服务器,它能反向代理HTTP、HTTPS,、SMTP、POP3、IMAP的协议链接,以及一个负载均衡器和一个HTTP缓存
Nginx的基本工作模式
正向代理隐藏真实客户端,反向代理隐藏真实服务端
多进程: 一个 Master 进程、多个 Worker 进程。
Master 进程: 管理 Worker 进程。对外接口:接收外部的操作(信号);对内转发:根据外部的操作的不同,通过信号管理 Worker;监控: 监控 Worker 进程的运行状态,Worker 进程异常终止后,自动重启 Worker 进程。
Worker 进程: 所有 Worker 进程都是平等的。实际处理:网络请求,由 Worker 进程处理。Worker 进程数量:在 nginx.conf 中配置,一般设置为核心数,充分利用 CPU 资源,同时,避免进程数量过多,避免进程竞争 CPU 资源,增加上下文切换的损耗。
Nginx 的事件处理模型
Request:Nginx 中 HTTP 请求。
基本的 HTTP Web Server 工作模式:
接收请求: 逐行读取请求行和请求头,判断段有请求体后,读取请求体。
处理请求。
返回响应: 根据处理结果,生成相应的 HTTP 请求(响应行、响应头、响应体)