一 反向代理和负载均衡小结
① 反向代理
'反向'代理'角色':'转发'客户端的'请求(request)'和'服务端'的'响应(response)'
1)client将'请求'发送至proxy服务器
2)proxy服务器'再将请求'转发给'真正的服务器(server)'以处理请求
3)响应时'server'将处理结果发送给'proxy',再由'proxy'响应给客户端
nginx作为'高性能'的'反向代理服务器',类似一个热心的'中介'
② 负载均衡
负载均衡:将'任务(request)分摊'到'多个操作单元(server)'上进行执行
负载均衡'实现'方式:DNS的A记录负载均衡、'反向代理负载均衡(nginx)'、IP负载均衡和链路层负载
思考1: '谁'来分摊任务? -->eg:'nginx'
思考2: 基于'什么准则'来分摊任务? -->'负载均衡算法'
1)网站'架构'中,负载均衡技术是实现'网站架构伸缩性'的主要手段之一
2)"伸缩性":是指可以不断向集群中添加'新的服务器'来提升性能、缓解不断增加的并发用户访问'压力'
负载均衡的'目的':提升'集群'的可用性,提高'容灾'能力
③ 负载均衡和反向代理的联系
① 图谱
1)在讨论'mginx的负载均衡策略'前,先通过AKF扩展立方体建立'整体思维'
2)AKF扩展立方体有X、Y、Z轴,这三个轴意味着可以从'3个角度'实现'可伸缩性'
② X轴
1)X轴是的'水平'扩展,增加'应用进程(server实例的个数)','不用改代码'就能'水平'的扩展
通俗理解: 原来'一头牛'拉,现在'多头'牛拉
2)nginx可以实现'主主'、'主备(backup)'形式
3)X轴是把'完全相同的工作(业务无状态)'分给上游,上游'谁'处理都行
location / {
proxy_pass ...
}
4)nginx典型的基于X轴'负载均衡'的算法 --> 'rr和least-connected'
5)缺点: 解决不了'数据不断增长'的问题
③ Y轴
1)Y轴按'功能切分(微服务拆解)'应用,它能解决'数据增长'的问题,每套'集群'一套数据库
location /video {
proxy_pass http://video_upstream
}
location /music {
proxy_pass http://music_upstream
}
实质:通过'location'区分,将'每个api'作为'一套微服务',对应'一套'集群
3)缺点:虽然nginx很好'适配',但是切分功能意味着'重构代码',它引入了'复杂性',成本很高
④ Z轴
1)Z轴基于'用户的属性(特征)'扩展服务
2)通常我们'基于变量'取到用户的ip地址、url或者'其他(地理位置)'参数来执行'负载均衡'
⑤ 组合
说明:这三个轴可以'任意组合'以应对现实中的'复杂'问题
三 nginx作为反向代理支持的协议
1)nginx也支持'OSI'传输层'(四层)'的UDP协议和TCP协议
2)受益于nginx优秀的'模块化'设计,对'上游服务器'nginx支持非常多的'应用层'协议
备注:'下游客户端'主要是'HTTP协议'
四 nginx执行反向代理的流程图
说明: 请求到了'content'阶段,是给'root(静态)'处理,还是'proxy_pass'处理
缓存: 有了反向代理和负载均衡后,'时间'和'空间'缓存