高并发解决方案相关面试题

什么是DNS解析域名

DNS域名解析就是讲域名转化为不需要显示端口(二级域名的端口一般为80)的IP地址,域名解析的一般先去本地环境的host文件读取配置,解析成对应的IP地址,根据IP地址访问对应的服务器。若host文件未配置,则会去网络运营商获取对应的IP地址和域名.

什么是Nginx

Nginx是一个高级的轻量级的web服务器,由俄罗斯科学家开发的,具有如下优点:

     1.占用内存少,并发量强,支持多种并发连接,效率高.

     2.能够作为负载均衡服务器和(内部直接支持 Rails 和 PHP)代理服务器。Nginx用C编写开销和CPU占有小.

     3.安装启动简单,配置简洁,bug少,一般几个月不需要重新启动且不会宕机,稳定性和安全性好.

Nginx的作用

反向代理、负载均衡、配置主备tomcat、动静分离

 

Nginx 应用场景

做HTTP服务器、反向代理服务器、静态资源服务器

 

什么是反向代理

代替真实服务器接收网络请求,然后将请求转发到真实服务器

 

反向代理的作用

隐藏真实服务器,使真实服务器只能通过内网访问,保护了真实服务器不被攻击。配置负载均衡,减轻单台真实服务器的压力。配置主备服务器,保持服务稳定运行。

 

Nginx如何配置反向代理

首先到DNS服务器做域名解析,如果是局域网在hosts文件中配置IP和域名对应关系。编辑nginx的nginx.conf文件,配置server_name为指向nginx服务器的域名,location拦截请求,如果是访问nginx本地资源则配置root,如果是反向代理到真实服务器则配置proxy_pass为服务器地址

 

说说常用Nginx的相关配置

upstream 负载均衡配置

server [IP] [weight] [backup] 配置tomcat集群

proxy_connect_timeout、proxy_read_timeout、proxy_send_timeout 连接时间、真实服务器响应时间、返回结果时间

location 匹配用户请求的url

root 配置本地资源路径

proxy_pass    配置真实服务器地址

 

请画图展示反向代理流程

 

LVS与Nginx区别

LVS是四层反向代理,基于TCP和UDP协议,可用于管理Nginx集群,抗负载能力强。Nginx是七层反向代理,基于HTTP协议,用于管理真实服务器集群。

 

location的作用

匹配用户请求url,根据不同请求转发到不同的服务器。

 

Nginx中如何配置负载均衡

在upstream中配置多个server,在location的proxy_pass配置为http://+upstream名称

 

四层负载均衡与七层负载均衡区别

四层负载均衡基于TCP和UDP协议,通过IP+端口号接受请求并转发到服务器。七层负载均衡基于HTTP协议,通过url或主机名接收请求并转发到服务器。

 

四层负载均衡有那些实现方案

LVS、F5

 

负载均衡有那些算法

轮询算法:按照时间顺序分配到不同的服务器,当其中一台服务器宕机则被自动剔除,切换到正常的服务器。

权重算法:按照分配给服务器的权重比例来分发到不同服务器,权重比例越高,则访问几率越大。

IP绑定(ip_hash):根据访问的IP的哈希结果来判定,使同一个IP访问一台固定的后端服务器,同时解决动态页面的session问题.

 

服务器分布式后,会产生了那些问题

分布式锁

分布式全局ID

分布式Session一致性问题

分布式事务

分布式任务调度

分布式日志收集

分布式配置中心

 

什么是动态负载均衡

一般情况下,使用nginx搭建服务器集群,每次修改nginx.conf配置文件都需要重启nginx服务器。动态负载均衡就是修改nginx.conf配置文件后不必重启nginx而使配置生效。

 

Nginx如何实现动态负载均衡

搭建Nginx+Consul+Upsycn环境。Nginx实现服务的反向代理和负载均衡。Consul是一个开源的注册中心和服务发现的框架,通过HTTP API来发现服务,注册服务。同时支持故障发现,K/V存储,多数据中心,Raft算法等多中高可用特性。Consul在Nginx动态负载均衡作用是

通过Http api注册和发现服务.Upsycn是新浪微博的开源框架,在Nginx动态负载均衡的作用是Consul的后端的server列表,即获取Nginx的上游服务器(Upstream server)信息,并动态更新Nginx的路由信息.

 

什么是Http协议

超文本传输协议

Http协议组成部分

Http协议是基于TCP协议封装成超文本传输协议,包括请求(request)和响应(response),http协议请求(request)分为请求参数(request params)和方法类型(request method)、请求头(request hearder)、请求体(request body) ,

响应(response)分为 响应状态(response state)、响应头(response header)、响应体(response body)等.

 

TCP与UDP区别

udp:

   a、是面向无连接, 将数据及源的封装成数据包中,不需要建立连接

    b、每个数据报的大小在限制64k内

    c、因无连接,是不可靠协议

    d、不需要建立连接,速度快

tcp:

   a、建议连接,形成传输数据的通道.

    b、在连接中进行大数据量传输,以字节流方式

    c 通过三次握手完成连接,是可靠协议

    d 必须建立连接m效率会稍低

 

谈谈七层网络模型

应用层:客户端的各种应用、app;

表示层:进行数据的格式区分,如图片、编码;

会话层:本地主机与远程主机的会话管理;

传输层:定义传输数据的协议端口号,TCP和UDP是这一层的协议;

网络层:进行逻辑地址寻址;

数据链路层:建立逻辑连接,进行硬件地址寻址;

物理层:建立物理连接;

 

Nginx如何实现TCP四层负载均衡

在nginx.conf文件中配置tcp模块,在upstream块中定义socket服务器负载均衡,其余与nginx配置七层负载均衡相同。

tcp {

   ### 定义多个上游服务器

   upstream  itmayeidu{

      ### 定义TCP模块上游服务器

      server 192.168.5.165:80001;

  server 192.168.5.165:80002;

   }

    server {

        listen       9999;

        server_name  192.168.212.137;

### 反向代理upstream

        proxy_pass itmayeidu;

    }

}

 

lvs 与Nginx 区别

lvs工作在网络第四层,nginx工作在网络第七层;lvs比nginx抗负载能力强;lvs对网络依赖性强,nginx对网络依赖性弱;lvs几乎可以对所有应用做负载均衡,比如数据库。

 

lvs与keepalived区别

Lvs可以实现负载均衡,但是无法实现健康检查。Keepalived可以进行健康检查实现高可用。

 

keepalived 作用

keepalive 软件可以进行健康检查,而且能同时实现 LVS 的高可用性,解决 LVS 单点故障的问题

 

如何实现双机主从热备

Nginx+Tomcat:在upstream中配置多台服务器,从服务器后加backup

Keepalived+Nginx:在多台nginx服务器上安装keepalived,将主服务器的state设置为MASTER,从服务器设置为BACKUP,主服务器的优先级要高于从服务器

 

lvs+Keepalived+Nginx架构流程图

 

项目发布如何不影响到正常用户访问,实现7*24小时访问

可以两台机子互为热备,平时各自负责各自的服务。在做上线更新的时候,关闭一台服务器的tomcat后,nginx自动把流量切换到另外一台服务的后备机子上,从而实现无痛更新,保持服务的持续性,提高服务的可靠性,从而保证服务器7*24小时运行。

 

项目如何发生故障宕机了,如何处理。

使用lvs+keepalived+Nginx做主从热备,lvs管理nginx集群,nginx管理服务器集群,在服务器宕机的情况下keepalived启动健康检测,多次重启无果可以短信通知运维人员及时维护。

 

动态网站与静态网站区别

在浏览器中打开一个网站,点击鼠标右键查看源码,多次请求后如果源码不产生变化就是静态网站,变化就是动态网站。

 

动态页面静态化的作用

便于搜索引擎抓取和排名

 

什么是动静分离架构模式

静态页面与动态页面分开不同系统访问的架构设计方法,静态页面与动态页面以不同域名区分。

 

如何搭建动静分离

以nginx服务器作为静态资源服务器,静态资源和动态资源访问分开配置,静态资源在location中使用本地文件路径配置方式,动态资源使用proxy_pass配置到后台服务器。

如:

    ###静态资源访问

    server {

      listen       80;

      server_name  static.itmayiedu.com;

      location /static/imgs {

           root F:/;

           index  index.html index.htm;

       }

    }

   ###动态资源访问

 server {

      listen       80;

      server_name  www.itmayiedu.com;

 

      location / {

         proxy_pass http://127.0.0.1:8080;

         index  index.html index.htm;

       }

    }

 

动静分离与前后分离区别

动静分离是将静态资源和动态资源存放在不同服务器中,前后分离是将前端和后台分离,前端通过api调用后台接口

 

如何控制浏览器静态资源缓存

静态资源存在缓存的原因是项目上线时,浏览器缓存中的静态资源导致与服务器将淘汰资源的代码发生冲突(或者是页面访问频繁访问同一资源,导致一些浏览器如IE(本人开发亲身经历过)返回默认的响应结果,与实际响应结果不符合),

一般的服务器是强制F5进行刷新或者是清除缓存,最有效的解决方法就是在请求资源后面加上变量(如时间戳,随机数)

 

Http状态码304的作用

表示浏览器存在静态资源缓存就不从服务器获取静态资源

发布了119 篇原创文章 · 获赞 35 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/q15102780705/article/details/100586366