nginx(五十五)nginx的反向代理和负载均衡原理

一  反向代理和负载均衡小结

①  反向代理

'反向'代理'角色':'转发'客户端的'请求(request)'和'服务端'的'响应(response)'

1)client将'请求'发送至proxy服务器

2)proxy服务器'再将请求'转发给'真正的服务器(server)'以处理请求

3)响应时'server'将处理结果发送给'proxy',再由'proxy'响应给客户端

nginx作为'高性能'的'反向代理服务器',类似一个热心的'中介'

nginx(五十五)nginx的反向代理和负载均衡原理_第1张图片

nginx(五十五)nginx的反向代理和负载均衡原理_第2张图片 

反向代理和负载均衡的区别 

②  负载均衡

负载均衡:将'任务(request)分摊'到'多个操作单元(server)'上进行执行

负载均衡'实现'方式:DNS的A记录负载均衡、'反向代理负载均衡(nginx)'、IP负载均衡和链路层负载

思考1: '谁'来分摊任务?          -->eg:'nginx'

思考2:  基于'什么准则'来分摊任务? -->'负载均衡算法'

1)网站'架构'中,负载均衡技术是实现'网站架构伸缩性'的主要手段之一

2)"伸缩性":是指可以不断向集群中添加'新的服务器'来提升性能、缓解不断增加的并发用户访问'压力'

负载均衡的'目的':提升'集群'的可用性,提高'容灾'能力

③  负载均衡和反向代理的联系

二   AKF 可扩展立方体

①  图谱

nginx(五十五)nginx的反向代理和负载均衡原理_第3张图片

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)缺点: 解决不了'数据不断增长'的问题

nginx(五十五)nginx的反向代理和负载均衡原理_第4张图片 

③  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(五十五)nginx的反向代理和负载均衡原理_第5张图片

三    nginx作为反向代理支持的协议

1)nginx也支持'OSI'传输层'(四层)'的UDP协议和TCP协议

2)受益于nginx优秀的'模块化'设计,对'上游服务器'nginx支持非常多的'应用层'协议

备注:'下游客户端'主要是'HTTP协议'

nginx(五十五)nginx的反向代理和负载均衡原理_第6张图片

四    nginx执行反向代理的流程图

说明: 请求到了'content'阶段,是给'root(静态)'处理,还是'proxy_pass'处理

缓存: 有了反向代理和负载均衡后,'时间'和'空间'缓存

nginx(五十五)nginx的反向代理和负载均衡原理_第7张图片

你可能感兴趣的:(nginx,nginx,负载均衡)