目录
3.http1.0和1.1区别http1.0与1.1有什么区别
2)connctor连接器(怎么优化最大工作数,队列数量?)
一、Mysql主从复制部分
1、mysql主从复制原理
两个日志(binlog、relay log)、三个线程(I/O、SQL、log dump)配合使用
1)从库生成两个线程,一个I/O线程,一个SQL线程;
2)i/o线程去请求主库的binlog,并将得到的binlog日志写到relay log(中继日志)文件中;
3)主库会唤醒 log dump 线程,用来给从库i/o线程传binlog;
4)SQL线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据致;
2.主从复制同步方式
-
全同步:追求的是至少有一个slave已经同步完成,即最终一致性
-
半同步:追求的是至少有一个slave已经同步完成,即最终一致性、好处是备份、容灾
-
异步:默认同步形式,为的是更快速
ps:
1.最终一致性和强一致性
-
最终一致性:即不管过程如何,但是最终的数据是一致的
-
强一致性:不仅要保证最终一致,而且要保证过程一致,每一步过程都完美的保存下来,如果服务器因为压力导致卡顿或者宕机,强一致性可以让你能接上去。
2.主从复制会特性是在压力大的情况下,有数据不一致的情况,所以在这里可以使用rsync远程同步
-
rsync是把文件对比,看差异部分的数据,然后备份差异部分的数据,对这部分数据先压缩再传输。在带宽不是很大的情况下,先压缩再传输会更快。
3.mysql日志记录方式
(1)STATEMENT:基于语句的复制。在服务器上执行sql语句,在从服务器上执行同样的语句,mysql默认采用基于语句的复制,执行效率高。
(2)ROW:基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
(3)MIXED:混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。
二、网络部分+WEB服务
1.OSI七层模型+TCP/IP五层模型
对运维核心 ——》管理、控制、优化L1-L4层
2.TCP/IP三次握手、四次挥手
-
三次握手:因为TCP是面向连接传输,客户端向服务器发送SYN同步请求,请求与服务器建立连接,服务器收到此SYN同步请求后,会针对客户端的SYN同步请求进行ACK响应的同时也会发送一个SYN同步请求,当客户端收到服务器发过来的SYN同步请求时,会给予一个ACK响应。
-
四次挥手
客户端向服务器发送FIN断开请求,服务器接收到此请求后,回复一个ACK。服务器向客户机发送FIN断开请求,客户机收到此请求后,回复一个ACK。
-
为什么握手三次,而不是两次或者四次
-
为什么不两次:因为TCP是可靠的传输层协议,它在传输数据前,会建立双向数据通信通道,当保证双向数据传输的通道没有问题时,才会发送数据,如果是两次的话,客户端向服务端发送请求连接,服务的回复客户端ACK,假设客户端向服务端发送SYN请求,但是由于网络原因,很卡,所以单方面断开了请求,但是因为网络延迟问题,服务器端延迟了几秒才收到,认为是新的请求,就给ACK回应,但是服务端不知道客户端断开了SYN请求,就会一直将此端口打开,不会给别人用,会一直占用直到时间超时,超时后才会被动关闭。这就会造成资源浪费。
-
为什么不四次:已经可以正常连接再做四次,就没有必要,造成资源浪费。同时也会增加带宽压力。
-
-
为什么挥手四次
因为可能有半关闭状态, 客户机向服务器发送了FIN请求,服务器也给予了ACK响应。但是,服务器和客户机之间还有数据要传输,因此服务器没有向客户机立即发送FIN请求, 数据传输方向是双向的,一个方向的数据通道关闭需要一次请求和一次确认,因此需要断两次,而我们有两个数据方向,因此需要断四次。
-
TCP和UDP区别:
-
TCP向上层提供面向连接的可靠服务 ,TCP是可靠的进程到进程通信的协议
-
TCP提供全双工服务,即数据可以在同一时间双向传输
-
UDP向上层提供无连接不可靠服务,面向传输,例如qq、微信,当你发送一条信息后,中间有一个服务器,你的未发送数据是中间服务器返回的,不是UDP,UDP是不管的。
-
3.http1.0和1.1区别http1.0与1.1有什么区别
①缓存处理 在HTTP1.0中主要使用header里的lf-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,lf-Unmodified-Since, lf-Match, lf-None-Match等更多可供选择的缓存头来控制缓存策略。 ②带宽优化及网络连接的使用 HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206 (Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接 ③错误通知的管理 在HTTP1.1中新增了24个错误状态响应码,如409 (Conflict)表示请求的资源与资源的当前状态发生冲突;410 (Gone)表示服务器上的某个资源被永久性的删除 ④ Host头处理 在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址 HTTP1.1的请 求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request) ⑤长连接 HTTP1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都
5.访问百度(简单版)
1)域名解析成IP:先查找本地缓存,/etc/hosts ,如果没有再查找DNS客户端中的配置文件/etc/resolve.conf中找nameserver对应的地址,这个地址就是DNS服务端的地址,DNS服务端中有很多域名解析记录,如果server端没有,则进行迭代查询,先找根域,再找顶级域,再找二级域,知道返回主机对应的ip逻辑地址。
2)按照协议进行通信,确定端口号(二层转发原理是靠mac地址,三层转发原理是靠ip和端口号)通过域名解析已经知道ip地址了,想确定端口号则通过协议确定,http协议是80,https是443,接下来就是三次握手了
3)与目的主机进行TCP连接(三次握手)
http是应用层协议,tcp是传输层,所以发送http请求之前,开始我们常说的三次握手。Http请求是使用TCP进行传输的,可以保证可靠传输,并且有序,需要建立连接,才能进行数据传输。
3)http传输,发送和接收数据
ps:如果是加密的则是https。路径后是加密路径
4)与目的主机断开TCP连接(四次挥手)
6.访问百度(细节版)
后面仔细讲解图中的各个部分
7.socket套接字概念
socket用于描述IP地址和端口
socket是一个抽象层,其意义是将公司外网和内网的端口,进行桥接。
nginx中一个线程接待一个socket
8.Nginx部分如何监听端口
-
nginx有一个master进程管理子进程,支持服务开启,master不会参与接待,而是让woker接待,其中的一个worker就会在80端口等,
-
等捕捉到本地ip加上80端口后,woker接收到请求后,交给任务分配器,
-
任务分配器先查看自己的配置文件,例如访问的是80端口里面的根,则配置文件中的location /根就被匹配到了,
-
然后找到nginx内部的页面内容,然后再将页面内容翻译成浏览器的形式,返回去。
-
nginx主要处理静态页面
9.如何查看Nginx当前服务器的连接数
ss -antp|grep 80|wc -l 查看连接数,一个链接数是一个socket
10.nginx 特点
-
nginx是一款高性能轻量级WEB服务器
-
并发请求理论值并发量3~5w,实际上生长环境中就两万左右
-
受本地资源性能影响、
-
nginx服务器中是不是跑了其他东起、
-
网络带宽影响、
-
队列影响、
-
最大进程工作数影响、
-
开启的最大工作进程数影响、
-
配置文件中配置的 worker_connections
-
11.Nginx优化有哪几种
-
防盗链
-
日志分割
-
网页压缩
-
隐藏nginx版本号
-
更改进程数
-
连接超时
-
缓存时间
-
epoll机制优化(提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,若工作进程数为 8,每个进程处理 4096 个连接,则允许 Nginx 正常提供服务的连接数已超过 3 万个(4 096×8=32 768))
注意epoll机制:
12.数据流向内部分为三个层面:
1)tomcat由哪三部分组成
-
Web 容器:完成 Web 服务器的功能。
-
Servlet 容器:名字为 catalina,用于处理 Servlet 代码。
-
JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码
2)查看支付宝余额的一个数据流向(tomcat):
-
通过80端口进nginx服务器,这边展示的是官网首页,
-
通过8080端口进入官网首页后需要跳转到登录模块,登录模块需要通过Java代码实现,tomcat是由connector连接器监听8080端口,connector连接器由java开发,所以grep8080查看到的是java,connector连接器接收到请求后,交给自己的web容器。
-
交给自己的web容器后,web容器中是一些动态页面展示,将动态页面,即需要交互的页面,这是一串将以.jsp结尾的java代码文件,将需要的请求通过Java代码交给JSP容器
-
JSP容器将java代码翻译成serverlet代码,serverlet代码作为可执行的动态任务
-
这个serverlet代码可以被serverlet容器中的catelina加以执行,catelina会识别/tomcat/webapps这个里面的项目,解压并运行这部分代码,所有的代码能跑起来的代码都在/tomcat/webapps中,先加载/tomcat/webapps这个模块,通过接口的形式,传给host项目(虚拟主机),host项目(虚拟主机)这部分代码与mysql对接,找到正确的数据。然后返回到host项目(虚拟主机),
-
host项目(虚拟主机)再通过接口传给serverlet,再跳转到JSP,翻译,然后跳到web容器,web容器再返回到index.jsp的页面里,到8080端口,然后传给nginx页面,nginx页面通过80传给客户机。
容器:一个进程控制一个容器,而比一个操作系统控制一个服务消耗小得多。
13.优化tomcat
1)(怎么优化堆和栈?即怎么优化最小内存?最大内存?)
java在翻译过程中,用到堆和栈的方式执行,这个过程中资源消耗,内存消耗非常之大,很可能内存会吃满,需要优化,限制内存上限,这样不会宕机,但是会卡顿。
#优化方法:
在/usr/local/tomcat/bin 文件夹下的catalina.sh加入:
JAVA_OPTS='-Xms512m -Xmx1024m'要加“m”说明是MB。否则就是KB了,在启动tomcat时会 报内存不足。
-Xms:初始值-Xmx:最大值-Xmn:最小值
2)connctor连接器(怎么优化最大工作数,队列数量?)
优化connctor限制最大工作数、队列数量
#在server.xml中
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="800" acceptCount="1000"/>
maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100
这两个值如何起作用,请看下面三种情况
情况1:接受一个请求,此时tomcat起动的线程数没有到达maxThreads,tomcat会起动一个线程来处理此请求。
情况2:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,tomcat会把此请求放入等待队列,等待空闲线程。
情况3:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,等待队列中的请求个数也达到了acceptCount,此时tomcat会直接拒绝此次请求,返回connection refused
3)在一台主机上部署多实例需要修改哪几个端口?
(1)修改http访问端口(默认为8080端口)
(2)修改Shutdown端口(默认为8005端口)
(3)修改8009端口
4)GC垃圾回收机制
主进程将碎片资源,即使用完没有回收进来的资源,进行二次回收,保证资源的可是用量。
14.运维管理维护的tomcat
①搭建环境(JDK)
②提供服务层面优化(配置文件)
③解决服务层面故障
④在服务层面提高tomcat运行效率和性能
需要关注:JVM 堆栈、GC垃圾回收机制
15.开发角度的tomcat
①JAVA代码的可执行性+代码健壮性(容错率高)
②JAVA程序的抗并发能力
③JAVA程序的运行消耗
16.小结
1)dns、三次握手四次挥手、http这三者是怎么串在一起玩儿的
2)为什么是三次握手不是两次、四次
3)外界接入nginx80端口是怎么接入进的
4)nginx和tomcat是如何组合
5)tomcat中有哪三各部分,每个部分该干嘛,代码应该跑在哪儿
6)主机层面、服务层面、业务层面,为什么这么分布的
7)tomcat优化,基于何种角度来考虑到需要优化的