首先列出一些面试题目包括nginx和redis的。css
1.、nginx 框架是怎样的html
2. nginx负载均衡的算法怎么实现的,懵逼,说没看过 。nginx
nginx 的 upstream目前支持 4 种方式的分配
1)、轮询(默认)
每一个请求按时间顺序逐一分配到不一样的后端服务器,若是后端服务器down掉,能自动剔除。
2)、weight
指定轮询概率,weight和访问比率成正比,用于后端服务器性能不均的状况。
2)、ip_hash
每一个请求按访问ip的hash结果分配,这样每一个访客固定访问一个后端服务器,能够解决session的问题。
3)、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
4)、url_hash(第三方)webnginx内置策略包含加权轮询和ip hash面试
加权轮询算法分为先深搜索和先广搜索,那么nginx采用的是先深搜索算法,即将首先将请求都分给高权重的机器,直到该机器的权值降到了比其余机器低,才开始将请求分给下一个高权重的机器;redis
3. redis主从是怎么选取的 算法
四、redis插槽的分配
五、redis复制的过程
六、redis主节点宕机了怎么办,还有没有同步的数据怎么办
.....反正一大堆redis的问题
七、重入锁是怎么计数的 后端
八、如何解决惊群现象?浏览器
惊群是多个子进程在同一时刻监听同一个端口引发的;缓存
Nginx解决方法:同一个时刻只能有惟一一个worker子进程监听web端口,此时新链接事件只能唤醒惟一正在监听端口的worker子进程。
采用锁,互斥量实现!!
1、Nginx优秀模块 模块设计:
高度模块化设计,除了少许核心代码,其余一切接模块。官方Nginx共有五大类型模块:核心模块、配置模块、事件模块、HTTP模块、mail模块。
要注意的是:nginx的模块是静态的,添加和删除模块都要对nginx进行从新编译,这一点与Apache的动态模块彻底不一样。
2、事件驱动框架:
一、什么是Nginx?
Nginx是一个高性能的HTTP和反向代理服务器,及电子邮件(IMAP/POP3)代理服务器,同时也是一个很是高效的反向代理、负载平衡。
多进程异步非阻塞事件处理机制:运用了epoll模型
二、为何要用Nginx?
优势:
跨平台、配置简单
非阻塞、高并发链接:处理2-3万并发链接数,官方监测能支持5万并发
内存消耗小:开启10个nginx才占150M内存,Nginx采起了分阶段资源分配技术
nginx处理静态文件好,耗费内存少
内置的健康检查功能:若是有一个服务器宕机,会作一个健康检查,再发送的请求就不会发送到宕机的服务器了。从新将请求提交到其余的节点上。
节省宽带:支持GZIP压缩,能够添加浏览器本地缓存
稳定性高:宕机的几率很是小
master/worker结构:一个master进程,生成一个或者多个worker进程
接收用户请求是异步的:浏览器将请求发送到nginx服务器,它先将用户请求所有接收下来,再一次性发送给后端web服务器,极大减轻了web服务器的压力
一边接收web服务器的返回数据,一边发送给浏览器客户端
网络依赖性比较低,只要ping通就能够负载均衡
能够有多台nginx服务器
事件驱动:通讯机制采用epoll模型
三、为何Nginx性能这么高?
得益于它的事件处理机制:
异步非阻塞事件处理机制:运用了epoll模型,提供了一个队列,排队解决
四、为何不使用多线程?
Apache: 建立多个进程或线程,而每一个进程或线程都会为其分配cpu和内存(线程要比进程小的多,因此worker支持比perfork高的并发),并发过大会榨干服务器资源。
Nginx: 采用单线程来异步非阻塞处理请求(管理员能够配置Nginx主进程的工做进程的数量)(epoll),不会为每一个请求分配cpu和内存资源,节省了大量资源,同时也减小了大量的CPU的上下文切换。因此才使得Nginx支持更高的并发。
此时,客户端就能够向nginx发起链接了。当客户端与nginx进行三次握手,与nginx创建好一个链接后
此时,某一个子进程会accept成功,而后建立nginx对链接的封装,即ngx_connection_t结构体
接着,根据事件调用相应的事件处理模块,如http模块与客户端进行数据的交换。
最后,nginx或客户端来主动关掉链接,到此,一个链接就寿终正寝了
六、正向代理
一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),而后代理向原始服务器转交请求并将得到的内容返回给客户端。客户端才能使用正向代理
正向代理总结就一句话:代理端代理的是客户端
七、反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的链接请求,而后将请求,发给内部网络上的服务器
并将从服务器上获得的结果返回给internet上请求链接的客户端,此时代理服务器对外就表现为一个反向代理服务器
反向代理总结就一句话:代理端代理的是服务端
八、动态资源、静态资源分离
动态资源、静态资源分离是让动态网站里的动态网页根据必定规则把不变的资源和常常变的资源区分开来,动静资源作好了拆分之后,咱们就能够根据静态资源的特色将其作缓存操做,这就是网站静态化处理的核心思路
动态资源、静态资源分离简单的归纳是:动态文件与静态文件的分离
九、为何要作动、静分离?
在咱们的软件开发中,有些请求是须要后台处理的(如:.jsp,.do等等),有些请求是不须要通过后台处理的(如:css、html、jpg、js等等文件)
这些不须要通过后台处理的文件称为静态文件,不然动态文件。所以咱们后台处理忽略静态文件。这会有人又说那我后台忽略静态文件不就完了吗
固然这是能够的,可是这样后台的请求次数就明显增多了。在咱们对资源的响应速度有要求的时候,咱们应该使用这种动静分离的策略去解决
动、静分离将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提升用户访问静态代码的速度,下降对后台应用访问
这里咱们将静态资源放到nginx中,动态资源转发到tomcat服务器中
十、负载均衡 负载均衡便是代理服务器将接收的请求均衡的分发到各服务器中 负载均衡主要解决网络拥塞问题,提升服务器响应速度,服务就近提供,达到更好的访问质量,减小后台服务器大并发压力