一  .LVS、Nginx、HAproxy有什么区别?工作中你怎么选择


 LVS: 是基于四层的转发
 HAproxy: 是基于四层和七层的转发,是专业的代理服务器
 Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发

区别:LVS由于是基于四层的转发,所以只能做端口的转发,而基于URL的,基于目录的这种转发LVS就做不了。

工作选择:HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器配置简单,所以中小型企业推荐使用HAproxy。


二 .什么是中间件?什么是jdk?


    中间件介绍:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯,是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递;通过中间件,应用程序可以工作于多平台或OS环境。

     jdk:jdk是Java的开发工具包,它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境。


三 .讲述一下Tomcat8005、8009、8080三个端口的含义?


 8005 ==》关闭时使用

 8009 ==》为AJP端口,及容器使用,如Apache能通过APJ协议访问Tomcat的8009端口

 8080==》一般应用使用(默认端口)


四 .什么是网站灰度发布?


   灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来,灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。


五 .解释下RabbitMQ是什么?


RabbitMQ也就是消息队列中间件,消息中间件是在消息的传息过程中保存消息的容器,消息中间件再将消息从它的源中到它的目标中标时充当中间人的作用,队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列不会保留消息,直到可以成功地传递为止,当然,消息队列保存消息也是有期限地。


六 .lvs/nginx/haproxy优缺点


  Nginx的优点

1. 工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名,目录结构,正则规则比Haproxy更为强大和灵活

2. Nginx对网络稳定性的依赖非常小,理论上能ping通就能进行负载功能

3 .Nginx安装和配置比较简单,测试起来比较方便

4  .具有承担高负载压力性,在硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS相对小些。

5 . Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了

6 .Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器

7 .Nginx也可作为静态网页和图片服务器,这方面的性能也无对手。还有Nginx社区非常活跃,第三方模块也很多

8 .Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,可考虑用其作为反向代理加速器

Nginx的缺点

1 .Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些,这个是它的缺点

2 . 对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测

LVS的优点

1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生

这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低



2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西

所以并不需要太多接触,大大减少了人为出错的几率



3、工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案

如LVS+Keepalived,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived



4、无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会收到大流量的影响。

5、应用范围较广,因为LVS工作在4层,所以它几乎可对所有应用做负载均衡,包括http、数据库、在线聊天室等

LVS的缺点

1、软件本身不支持正则表达式处理,不能做动静分离

而现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在



2、如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了

特别后面有Windows Server的机器的话,如果实施及配置还有维护过程就比较复杂了

  相对而言,Nginx/HAProxy+Keepalived就简单多了。

HAProxy的特点:

1、HAProxy也是支持虚拟主机的。

2、HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导

同时支持通过获取指定的url来检测后端服务器的状态



3、HAProxy跟LVS类似,本身就只是一款负载均衡软件

单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的



4、HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡

对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡



5、HAProxy负载均衡策略非常多,HAProxy的负载均衡算法现在具体有如下8种:

①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;

② static-rr,表示根据权重,建议关注;

③leastconn,表示最少连接者先处理,建议关注;

④ source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似

我们用其作为解决session问题的一种方法,建议关注;



⑤ri,表示根据请求的URI;

⑥rl_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name;

⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;

⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。


七  .当一个网站访问慢时,怎么去优化 ?


一、网络带宽不够网络带宽不够是最主要的因素,也就是宽带不够。同样的网站,如果宽带高,访问速度就会明显变快。
  解决:找运营商提高带宽

二、http请求次数太多
  解决:减少http请求次数。
  图片地图:把多张图片整合到一张图片中,以位置定位超链接。

三、DNS解析速度DNS解析是从域名到IP的解析。
  DNS解析包括往复解析的次数及每次解析所花费的时间,它们两者的积即是DNS解析所耗费的总时间。许多人无视了DNS解析的因素,其实它对网站解析速度也是十分重要的。
  解决:更换延迟比较低的DNS服务器。

四、接收数据时间过长,如下载资源过大
  解决:对HTTP传输进行压缩,即在js,css、图片等资源已经压缩的基础上,在HTTP传输过程中的再次压缩。客户端可以通过Accept-Encoding头来声明浏览器支持的压缩方式,服务端通过Content-Encoding来启用压缩,配置压缩的文件类型,压缩方式。gzip使用无损压缩,压缩效果最佳,已经成为使用最为普遍、支持的浏览器最多的数据压缩格式。

五、服务器及客户端硬件配置在相同的网络环境下,双核的服务器的运算能力必定要强一些。同样在客户端,相同的网络环境下,你用一台配置英特尔i7处理器和i3处理器来打开相同的页面,速度也一定不一样。
  解决:提升硬件配置。

六、网页资源过多
  解决:使用CDN部署网络以提高下载速度,可以先通过免费的CDN供应商来分发网页资源。

七、页面内容过多
  网页包含大量未经处理的图片,如果这些图片很大,就会导致打开速度变慢。其他如Flash和影视文件,都会影响访问速度,同时冗余代码也是拖慢网站速度的因素之一。
  解决:站长需要尽量优化代码,用最少的代码,实现最佳的效果。

八、JavaScript脚本过大,阻塞了页面的加载
  网站上运用javascript特效是大忌,不只是无法被搜索引擎抓取,还会因为不断向服务器提出请求,导致添加服务器负担,网站变慢。
  解决:将JavaScript脚本放在</body>标签前。script没有async和defer时,JS文件将在下载后立即执行。这种情况下,script放在顶部会阻塞页面呈现,在网速慢的情况下会导致“白屏”,直到脚本下载完毕才继续呈现页面。因此,script放在底部可以让页面尽快呈现。


八  .调取后端接口时特别慢,你会如何排查?


     询问清楚反应的人哪个服务应用或者页面调取哪个接口慢,叫他把页面或相关的URL发给你,首先,最直观的分析就是用浏览器按F12,看下是哪一块的内容过慢(DNS解析、网络加载、大图片、还是某个文件内容等),如果有,就对症下药去解决(图片慢就优化图片、网络慢就查看内网情况等)。其次,看后端服务的日志,其实大多数的问题看相关日志是最有效分析,最好用tail -f 跟踪一下日志,当然你也要点击测试来访问接口日志才会打出来。最后,排除sql,,找到sql去mysql执行一下,看看时间是否很久,如果很久,就要优化SQL问题了,expain一下SQL看看索引情况啥的,针对性优化。数据量太大的能分表就分表,能分库就分库。如果SQL没啥问题,那可能就是写的逻辑代码的问题了,一行行审代码,找到耗时的地方改造,优化逻辑。