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、学东西不要眼高手低

  1. 讲的时候都会
  2. 面试的时候一点都说不出来

2、主从模式从库一定要只读

    

主动告诉面试官,做了很多的考虑,配置文件写错,会报错                            

3、mysql主从能限速吗?

4、binglog相关问题

 

组件分离

1、为什么要单独搞一个域名

  1. 为了防止cookies提交
  2. 每次请求的时候,默认行为你是关不了的
  3. 顶级域名限制cookies的提交

不会用fiebug的运维一定不是一个好运维

2、什么是cookies?

3、很多域名的用处?

为了提高并发

4、拆分域名增加浏览器下载?

每个浏览器针对同一个域名有并发限制

5、网页访问请求的一个原理

    http请求是流式,什么是流式的?

    1、域名解析

    2、http页面全部下载下来

    3、下载完成后就要开始渲染

    4、遇到js会阻塞

    下载下来,并执行成功才会往下走,

    js可以改变

  5、cs单独开一个线程

  6、下载图片

  下载图片是并发的,下载一个渲染一个并显示,一直到最后

优化点:

  1. 静态资源和动态资源分开顶级域名
  2. 多台静态的资源域名是否顶级无所谓
  3. css一定要放在页面的头部
  4. js放在页面的下面,要统计的话放在最前面;
  5. 开启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中标志位的作用?

  1. SYN:同步数据
  2. ACK:确定是否是同一个请求
  3. FIN: 拆开链接

TCP状态转换

1、tcp建立过程涉及5种状态?

  1. CLOSED:默认初始化状态
  2. LISTEN:建立socket,进入监听状态
  3. SYN_SENT:发送syn报文,并回复ack及syn报文
  4. SYN_RCVD:接受syn报文,并回复ack及syn报文
  5. ESTABLISHED:接受syn报文,回复ack,建立链接(客户端)接受ack报文,建立连接

2、tcp断开过程涉及6种状态?

  1. ESTABLISHED:默认断开前初始化状态
  2. FIN_WAIT1:发送断开请求FIN报文
  3. CLOSE_WALT:收到FIN后向客户端发送ACK
  4. FIN_WAIT2 :收到服务端返回的ACK报文,等待数据数据传输
  5. LAST_ACK:发送FIN断开请求报文
  6. TIME_WAIT:回复FIN断开请求,发送ACK报文
  7. CLOSED:收到ack报文,立即转变为断开状态等待2MSL后,进入断开状态
  8. CLOSEING:没有收到回复FIN报文的ACK,直接收到FIN

3、timewait的作用?

1、可靠的实现TCP全双工连接的终止终止

我们分手吧!

不好意思我刚才是开玩笑,

说了好多恩爱的话

突然说我们分手吧!

2、允许老的分节在网络种消失


4、为什么经过60之后就能保证,之前丢失的报文不会再过来?

报文在网络中的生存周期是有限的,一个周期是30秒,为了保险我就等60秒

5、什么是2MSL?

  1. MSL是Maximum Segment Lifetime,译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。
  2. 因为TCP报文(segment)是IP数据报(datagram)的数据部分,而IP头中有一个TTL域,TTL中文生存时间,
  3. 这个生存时间是由源主机设置初始值但不是存的具体时间,而是存储了一个IP数据报可以经过的最大路由数
  4. 每经过一个处理他的路由器此值就减1,当此值为0则数据报将被丢弃
  5. 同时发送ICMP报文通知源主机。RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等

6、TTL与MSL关系?

  1. 不是简单的相等的关系
  2. 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、上面三个参数哪两个必须同时打开?

时间戳,和任意一个

posted @ 2018-02-28 20:47  活的潇洒80  阅读(516)  评论(0编辑  收藏  举报