web提高篇:单机时代
单机模式
1、运维架构师的两个方向?
答:web方向和自动化方向
开发专注于开发,运维专注于运维,所以运维架构师这个岗位就产生了
2、咨询做什么?
答:了解痛点,解决痛点
过去:资源少、分享少、方案少、经验少;
现在:架构已经标准化了,比如阿里云的解决方案
3、不同的语言是由相对称的词构成的集合
答:对称不等于完全相同,比如语法词:英语多过汉语
动词和形容词方面:汉语似乎超越了英语的词汇数量
4、怎样做一个反解析
答:在DNS设置一个A记录
5、怎样让www.shop.com跳转到shop.com?
答:做别名
6、私网地址
答:1、192.168.0.1; 2、172.16.0.1; 3、10.0.0.1;
7、apache如何调用php?
答:通过FASTCGI模块
8、怎样开启mysql和php的长连接?
答:默认短连接,性能不好,因为要不断的创建和断开连接
PHP模块里添加一个参数,也可以在timeout里去处理
PDO::ATTR_PERSISTENT => true
长连接的作用我觉得是在高负载的情况下,通过复用长连接,减少了每个页面的建立数据库连接的时间
9、dnsserver能获取到你的真实dns?
答:是不能的,因为请求DNS的时候和DNS交互的是localdns,联通的网络配置了电信的DNS;
动静分离
静态资源直接让nginx处理,localhost写个root
静态资源可以压缩
gzip压缩比那个最高
为什么gzip压缩要把IE浏览器去掉?
因为IE老版本对gzip压缩支持的不太好。
CGI和fastcgi的区别?
什么是fastCGI?
什么是php-fpm?
动静分离实例
方案一:
方案二
数据库分离
1、学东西不要眼高手低
- 讲的时候都会
- 面试的时候一点都说不出来
2、主从模式从库一定要只读
主动告诉面试官,做了很多的考虑,配置文件写错,会报错
3、mysql主从能限速吗?
4、binglog相关问题
组件分离
1、为什么要单独搞一个域名
- 为了防止cookies提交
- 每次请求的时候,默认行为你是关不了的
- 顶级域名限制cookies的提交
不会用fiebug的运维一定不是一个好运维
2、什么是cookies?
3、很多域名的用处?
为了提高并发
4、拆分域名增加浏览器下载?
每个浏览器针对同一个域名有并发限制
5、网页访问请求的一个原理
http请求是流式,什么是流式的?
1、域名解析
2、http页面全部下载下来
3、下载完成后就要开始渲染
4、遇到js会阻塞
下载下来,并执行成功才会往下走,
js可以改变
5、cs单独开一个线程
6、下载图片
下载图片是并发的,下载一个渲染一个并显示,一直到最后
优化点:
- 静态资源和动态资源分开顶级域名
- 多台静态的资源域名是否顶级无所谓
- css一定要放在页面的头部
- js放在页面的下面,要统计的话放在最前面;
- 开启gzip压缩
apache和nginx简述
0、什么是mpm
多处理模块
1、apache工作模式
1、prefork
预先启动一些进程为了满足最小空闲
最大空闲进程超过最大空闲就把你干掉了
优点:是一种非线程、与派生的工作模式,用的是进程去处理请求,所以比较容易消耗内存,但是稳定性好,
缺点:某个进程出现问题不会影响到其他请求。
2、worker
优点:使用的是线程去处理请求,消耗内存小,适合高流量的请求
缺点:线程是可以共享内存的,但是如果某个进程出现问题,那么这个进程下的线程都会出现问题,即稳定性不是很好
3、event
2.4后发布的
是为解决keep-alive保持长连接出现的一种工作模式
使用keep-alive长连接的时候,某个线程会一直被占用,即使中间没有请求,需要等到超时才会被释放,所以这个时候就出现了event的工作模式
专门一些线程来keep-alive类型的线程
当有真实请求过来的时候,将请求传递给服务器的线程
执行完毕后,又允许它释放。这增强了在高并发场景下的请求处理
另外,event模式是不支持用在https上的
2、什么是php-fmp?
是fastcgi的管理工具,5.5.3之后集成
3、apache如何和php通信
1、通过9001端口
本地的127.0.0.1的9001端口
比本地ip地址要好很多
2、soket的方式连接
pooxy-/var/xx/xx.socket
4、nginx优化
1、master进程
是管理worker进程,不接受用户请求的,
要是只有一个进程就不一定了
2、worker进程
接受客户请求的
worker_processes8(根据cpu的实际核数)
3、nginx - 性能优化,突破十万并发
http://361324767.blog.163.com/blog/static/114902525201281224328427/
5、Apache select和Nginx epoll的技术对比表
三次握手四次挥手
1、网站打不开通过osi七层模型
网站访问慢图解
2、TCP/IP相关学习资料
1、科来网络主页
http://www.colasoft.com.cn/training/document.php
2、科来网络通讯协议图2017版
http://www.colasoft.com.cn/download/network-protocol-map-2017.zip
3、TCP协议解码详解
http://www.colasoft.com.cn/teaching/protocol_analysis_006.doc
3、TCP的3次握手和4次挥手
男女朋友谈恋爱和分手的例子。
4、什么是半关闭状态?
A对B说我要要断开,A就不能再给B发送数据了,但B可以给A发送数据,
虽然A不能发但是可以收
5、什么是半关闭状态?
就是说将SYN标记位置于1
6、TCP为何 4次挥手?
因为TCP传输是全双工的,它需要确定上行和下行全部结束了才关闭,所以是4次。
7、什么是全双工?
打个简单比方就是:打电话,你可以说,我也可以说。
8、什么是半双工?
打个简单比方就是:对讲机,同时只有一方可以说
9、什么是半工?
单向,单行道路
10、TCP头部中哪些标志位参与了三次握手?
ACK 和SYN
11、TCP中标志位的作用?
- SYN:同步数据
- ACK:确定是否是同一个请求
- FIN: 拆开链接
TCP状态转换
1、tcp建立过程涉及5种状态?
- CLOSED:默认初始化状态
- LISTEN:建立socket,进入监听状态
- SYN_SENT:发送syn报文,并回复ack及syn报文
- SYN_RCVD:接受syn报文,并回复ack及syn报文
- ESTABLISHED:接受syn报文,回复ack,建立链接(客户端)接受ack报文,建立连接
2、tcp断开过程涉及6种状态?
- ESTABLISHED:默认断开前初始化状态
- FIN_WAIT1:发送断开请求FIN报文
- CLOSE_WALT:收到FIN后向客户端发送ACK
- FIN_WAIT2 :收到服务端返回的ACK报文,等待数据数据传输
- LAST_ACK:发送FIN断开请求报文
- TIME_WAIT:回复FIN断开请求,发送ACK报文
- CLOSED:收到ack报文,立即转变为断开状态等待2MSL后,进入断开状态
- CLOSEING:没有收到回复FIN报文的ACK,直接收到FIN
3、timewait的作用?
1、可靠的实现TCP全双工连接的终止终止
我们分手吧!
不好意思我刚才是开玩笑,
说了好多恩爱的话
突然说我们分手吧!
2、允许老的分节在网络种消失
4、为什么经过60之后就能保证,之前丢失的报文不会再过来?
报文在网络中的生存周期是有限的,一个周期是30秒,为了保险我就等60秒
5、什么是2MSL?
- MSL是Maximum Segment Lifetime,译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。
- 因为TCP报文(segment)是IP数据报(datagram)的数据部分,而IP头中有一个TTL域,TTL中文生存时间,
- 这个生存时间是由源主机设置初始值但不是存的具体时间,而是存储了一个IP数据报可以经过的最大路由数
- 每经过一个处理他的路由器此值就减1,当此值为0则数据报将被丢弃
- 同时发送ICMP报文通知源主机。RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等
6、TTL与MSL关系?
- 不是简单的相等的关系
- MSL要大于等于TTL
time_wait调优
1、TIME_WAIT多的问题?
因为它要占用Socket连接
2、为什么Socket最多只有65536?
因为tcp头部用16位来保存端口
3、为什么大家只配置65535?
端口是从0开始的,0是保留的
4、别人说的发10万并发进行压力测试?
是有前提条件,linux一切皆文件
改openfile的大小,默认是1024个,多ip可以解决
5、time_wait是在什么情况下产生的?
主动关闭的一方产生 谁主动关闭谁就产生
6、什么情况下会关闭?
如果客户端是个长连接我这边超时了我就是主动关闭放
服务器端超时时会关闭
7、时间戳关了打开tcp_tw_reuse?
有问题你们的公司经常出现一个特别奇葩的问题
你最好看一下内核优化参数
8、nat环境下不能用tcp_tw_recycle
如果你们公司nat上网可能就有问题
都通过一个IP出去,每个人电脑的时间都有可能不同
可能导致服务器直接就把数据库包丢了
9、time_wait不关就会占用socket连接
1、解决方案
增加IP地址:是有很多要求,ip多了也不好管,
因为是四元组源ip变了就又是一个65535,所以说在很多场景优化还是有作用的
2、对于cpu
影响忽略不计
3、对于内存
1万个占用1M内存,大概就是6M,所以可以忽略
4、占用soket连接真可怕
time-wait优化
1、Web性能优化之-深入理解TCP Socket
https://www.unixhot.com/article/65
2、本地可用端口极限值
cat /proc/sys/net/ipv4/ip_local_port_range 4000 65000
用这条命令会返回两个数字,默认是:32768 61000,说明这台机器本地能向外连接61000-32768=28232个连接,
注意:是本地向外连接,不是这台机器的所有连接,不会影响这台机器的80端口的对外连接数
3、查看tcp_timestamps (时间戳)
cat /proc/sys/net/ipv4/tcp_timestamps 1
4、tcp_tw_reuse设置及作用
作用:让TIME_WAIT状态可以重用
echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
1、这样即使TIME_WAIT占满了所有端口,
2、也不会拒绝新的请求造成障碍
3、正常关闭影响不大,老的数据报回来怎么办,时间戳小的就直接丢掉
4、tcp_tw_reuse在所有的节点上都可以打开
5、tcp_tw_recycle的设置及作用
作用:让TIME_WAIT尽快回收
echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
1、小于60秒等30s
2、数据库就可以打开,内网里面可以
3、在负载均衡上tcp_tw_recycle绝对不能开
hapox支持不同ip地址请求后端,所以很多cdn用的是ha
6、上面三个参数哪两个必须同时打开?
时间戳,和任意一个