介绍负载均衡的面试话术

在介绍负载均衡之前我想先说一下nginx,nginx是一个高性能的http和反向代理服务器。

那么什么是反向代理服务器呢,就是用户发送一个请求的时候,先由代理服务器来接收请求,然后请求转发给正事的服务器,正式服务器处理完后将数据返回给客户端。反向代理服务器从某种程度上解决了网站的安全性。

接下来我介绍一下nginx+tomcat+redis+session同步

有这样一个场景,我们有一个已经发布的项目,要定期的实现更新,更新的时候我们需要停掉服务器,恰恰就在这个时候有用户还在访问你的网站,你突然给停了,用户会认为你的网站被攻击了,可能存在安全隐患,那么你的网站信任度就会降低,可能还会失去一些潜在的客户,这样我们一台代理服务器一台正式服务器显然满足不了我们的需求,那么我们就需要部署多台正式服务器,nginx充当负载均衡服务器,其他tomcat服务器充当正式服务器,nginx根据他的算法会把请求分配到不同的服务器进行处理,这样当我们需要更新的时候,只需要停掉一台另一台继续运行,不会影响到客户的体验,而且还会解决高并发的问题。Nginx负载均衡的配置也比较简单:

首先要明白nginx配置文件里面的两个节点参数的作用,server就是定义一个代理服务器,upstream就是定义一个数据库集群,把这两个节点配置到nginx.conf配置文件里负载均衡也就配置完了

那么此时又会出现另一个问题,用户访问a的时候登录了,session信息存储到了a服务器中,那么他紧接着又发送了一个请求被分配到了b服务器,而b服务器并访问不到a服务器里面存储的session就会让用户又要进行登录,那么此时是不是用户的体验度会很低。所以我们就用到了redis缓存技术来实现session同步,而spring是支持redis和session管理的,只需要把spring-session-data-redis的依赖引到项目里面,然后配置spring配置文件(session的过期时间和redis的连接信息),然后在web.Xml里面配置session过滤器,我本人认为就是告诉spring我把session交给你管理了。致辞session同步就配置完成了,其实原理也简单,就是用户登录的时候把session信息存到redis里面,下次用到的时候去session里面取就ok了,当然设计之初我们并不是这样考虑的:(引入:C:\Users\Administrator\Desktop\实训2学习\session同步\个人总结.doc)

nginx模块一般被分成三大类:handler、filter和upstream。前面的章节中,读者已经了解了handler、filter。利用这两类模块,可以使nginx轻松完成任何单机工作。而本章介绍的upstream模块,将使nginx跨越单机的限制,完成网络数据的接收、处理和转发。

数据转发功能,为nginx提供了跨越单机的横向处理能力,使nginx摆脱只能为终端节点提供单一功能的限制,而使它具备了网路应用级别的拆分、封装和整合的战略功能。在云模型大行其道的今天,数据转发是nginx有能力构建一个网络应用的关键组件。当然,鉴于开发成本的问题,一个网络应用的关键组件一开始往往会采用高级编程语言开发。但是当系统到达一定规模,并且需要更重视性能的时候,为了达到所要求的性能目标,高级语言开发出的组件必须进行结构化修改。此时,对于修改代价而言,nginx的upstream模块呈现出极大的吸引力,因为它天生就快。作为附带,nginx的配置系统提供的层次化和松耦合使得系统的扩展性也达到比较高的程度。

 

你可能感兴趣的:(介绍负载均衡的面试话术)