面试问题记录 一
linux启动过程
- 开机自检,加载BIOS
- 读取MBR
- Boot Loader grub引导菜单
- 加载kernel内核
- init进程依据inittab文件夹来设定运行级别
- init进程执行rc.sysinit
- 启动内核模块
- 执行不同运行级别的脚本程序
- 执行/etc/rc.d/rc.local
- 执行/bin/login程序,启动mingetty,进入登录状态
ha和nginx的区别
- Nginx优点:
- 工作在网络7层之上,可针对http应用做一些分流的策略,如针对域名.目录结构,它的正规规则比HAProxy更为强大和灵活,所以,目前为止广泛流行。
- Nginx对网络稳定性的依赖非常小,理论上能ping通就能进行负载功能。
- Nginx安装与配置比较简单,测试也比较方便,基本能把错误日志打印出来。
- 可以承担高负载压力且稳定,硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS小。
- Nginx可以通过端口检测到服务器内部的故障,如根据服务器处理网页返回的状态码.超时等,并会把返回错误的请求重新提交到另一个节点。
- 不仅仅是优秀的负载均衡器/反向代理软件,同时也是强大的Web应用服务器。LNMP也是近些年非常流行的Web架构,在高流量环境中稳定性也很好。
- 可作为中层反向代理使用。
- 可作为静态网页和图片服务器。
- Nginx社区活跃,第三方模块非常多,相关的资料在网上比比皆是。
- Nginx缺点:
- 适应范围较小,仅能支持http.https.Email协议。
- 对后端服务器的健康检查,只支持通过端口检测,不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了,如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。
- LVS优点:
- 抗负载能力强.是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低。
- 配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率。
- 工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案,如LVS+Keepalived,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived。
- 无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会收到大流量的影响。
- 应用范围比较广,因为LVS工作在4层,所以它几乎可以对所有应用做负载均衡,包括http.数据库.在线聊天室等等。
- LVS的缺点:
- 软件本身不支持正则表达式处理,不能做动静分离;而现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在。
- 如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了,特别后面有Windows Server的机器的话,如果实施及配置还有维护过程就比较复杂了,相对而言,Nginx/HAProxy+Keepalived就简单多了。
- HAProxy优点:
- HAProxy是支持虚拟主机的,可以工作在4.7层(支持多网段)
- HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。
- HAProxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
- HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡。
- HAProxy负载均衡策略非常多
- HAPorxy缺点:
- 不支持POP/SMTP协议
- 不支持SPDY协议
- 不支持HTTP cache功能。现在不少开源的lb项目,都或多或少具备HTTP cache功能。
- 重载配置的功能需要重启进程,虽然也是soft restart,但没有Nginx的reaload更为平滑和友好。
- 多进程模式支持不够好
- 总结
从定位上来说,nginx重点是web服务器,替换的是apache,同时具备lb的作用,haproxy是单纯的lb,可以对照lvs进行比较
从架构上来说,进程模型不一样,haproxy是单进程方式无法充分利用多核,nginx是多进程模式
上手难易上来说,nginx的模块化更好,和lua之耦合比较紧密,比较方便进行业务模块的添加,开发起来轻量,haproxy需要多整体架构比较熟悉才能二次开发,haproxy在转发性能上略胜一筹,代码里面有很多geek的用法,比如rbtree非常高效
两个都是比较好的开源软件,nginx社区活跃,haproxy更新稍慢,比如https功能做了很久才发布
mysql主从原理
- 主写binlog
- 主向从推送binlog
- 从开启io线程,读取binlog内容写入relaylog
- 从开启sql线程复现sql
keepalive协议
vrrp协议
pxc与主从的区别
- PXC集群方案所有节点都是可读可写的,Replication从节点不能写入,因为主从同步是单向的,无法从slave节 点向master点同步。
- PXC同步机制是同步进行的,这也是它能保证数据强一致性的根本原因,Replication同步机制是异步进行的, 它如果从节点停止同步,依然可以向主节点插入数据,正确返回,造成数据主从数据的不一致性。
- PXC是用牺牲性能保证数据的一致性,Replication在性能上是高于PXC的。所以两者用途也不一致。PXC是用于 重要信息的存储,例如:订单、用户信息等。Replication用于一般信息的存储,能够容忍数据丢失,例如:购 物车,用户行为日志等。
apache与nginx的区别
- Nginx 配置简洁, Apache 复杂 ;Nginx 静态处理性能比 Apache 高 3倍以上 ;
- Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端用;Apache 的组件比 Nginx 多 ;
- apache是同步多进程模型,一个连接对应一个进程;Nginx是异步的,多个连接(万级别)可以对应一个进程;
- Nginx处理静态文件好,耗费内存少;动态请求由apache去做,Nginx只适合静态和反向;
- Nginx适合做前端服务器,负载性能很好;Nginx本身就是一个反向代理服务器 ,且支持负载均衡。
nginx自动增减负载节点是怎么做的
Tomcat 的连接器
Tomcat 的连接器有两种:HTTP和AJP
AJP(Apache JServ Protocol):AJP是面向数据包的基于TCP/IP的协议,它在Apache和Tomcat的实例之间提供了一个专用的通信信道
主要有以下特征:
- 在快速网络有着较好的性能表现,支持数据压缩传输;
- 支持SSL,加密及客户端证书;
- 支持Tomcat实例集群;
- 支持在apache和tomcat之间的连接的重用
tomcat工作模式
Tomcat Connector(连接器)有三种运行模式:bio nio apr
- bio(blocking I/O)
即阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包)。是基于JAVA的HTTP/1.1连接器,Tomcat7以下版本在默认情况下是以bio模式运行的。一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过Tomcat Manager来查看服务器的当前状态。(Tomcat7 或以下,在 Linux 系统中默认使用这种方式)
一个线程处理一个请求,缺点:并发量高时,线程数较多,浪费资源
- nio(new I/O)
是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。要让Tomcat以nio模式来运行只需要在Tomcat安装目录/conf/server.xml 中将对应的中protocol的属性值改为 org.apache.coyote.http11.Http11NioProtocol即可
利用 Java 的异步请求 IO 处理,可以通过少量的线程处理大量的请求
注意: Tomcat8 以上版本在 Linux 系统中,默认使用的就是NIO模式,不需要额外修改 ,Tomcat7必须修改Connector配置来启动
- apr(Apache Portable Runtime/Apache可移植运行时) ( 安装配置过程相对复杂)
Tomcat将以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。Tomcat apr也是在Tomcat上运行高并发应用的首选模式。从操作系统级别来解决异步的IO问题