一、mysql
1、主从复制
两个日志:binlog日志、relay log(中继日志)
三个线程:从库生成的I/O线程、SQL线程,以及主库生成的log dump 线程
2、MySQL的复制类型(日志记录的三种方式)
基于语句的复制
基于行的复制
混合类型的复制
3、主从复制的默认形式是异步,特点是更快速
还有另外两种形式是
全同步:至少有一个slave同步完成
半同步:最终一致性,为了备份,容灾
mysql主从复制的原理
从库生成两个线程,一个I/O线程,一个SQL线程;
i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;
问:为什么要要使用rsync进行备份?
对外业务繁忙线程压力大,同步过程中数据因为延迟导致丢失,市场占有率丢失。
备份的三种方式:热备,温备,冷备
温备:再使用过程中可以进行备份,但备份的过程中是锁定表的,用户无法写入数据,生产环境中一般不使用。(温备=MySQLdump)
二、网络
1、osi七层模型+tcp/ip五层模型
物理层
数据链路层
网络层
传输层
会话层
表示层
应用层
1、Http 7层简单管理
HTTP1.0和HTTP1.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)
⑤长连接
HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。
3、三次握手原理
客户端向服务器发送syn同步请求,请求与服务器建立连接,服务器收到此syn同步请求后,会针对对客户端的SYN同步请求进行ACK响应的同时也会发送一个SNY请求,当客户端收到服务器发到服务器发过来的SYN同步请求时,会给予一个ACK响应
为什么要三次握手
因为TCP是可靠的传输层协议,它在传输数据前,会建立双向数据通信通道,当保证双向数据传输的通道没有问题,才会发送数据,起保护数据的作用
dns
4、访问一个网站的流程
用户输入网站按回车, 查找本地缓存,如果有就打开页面,如果没有,利用DNS做域名解析,递归查询,一级一级的向上提交查询请求,知道查询到为止HOSTS表--> 本地DNS -->上层DNS(包括根DNS)经过了DNS解析,知道了网站的IP地址,然后建立tcp三次握手; 建立请求后,发送请求报文,默认请求
的是index.html
传送完毕,断开连接
运维核心------》管理、控制、优化L1-L2层
socket用于描述IP地址和端口
socket是一个抽象层,其意义是将公司外网和内网的端口,进行桥接。
nginx中一个线程接待一个socket
Nginx部分如何监听80端口
nginx有一个master进程管理子进程,支持服务开启,master不会参与接待,而是让woker接待,其中的一个worker就会在80端口等,等捕捉到本地ip加上80端口后,woker接收到请求后,交给任务分配器,任务分配器先查看自己的配置文件,例如访问的是80端口里面的根,则配置文件中的location /根就被匹配到了,然后找到nginx内部的页面内容,然后再将页面内容翻译成浏览器的形式,返回去。
附:如何查看Nginx当前服务器的连接数
ss -antp|wc -l 查看连接数
三、访问网页数据流向
客户端访问过来通过一个虚拟的端口,通过socket套接字文件桥接两个虚拟端口,注入到ens33:0的端口上,达到服务器的端口上,服务器端口会被nginx上master进程派出的worker进程去捕捉到,到nginx进行遍历配置文件,根据location优先级,遍历到匹配的访问位置(本质访问文件)。
三个层面业务、服务、主机/系统
tomcat
tomcat由哪三部分组成
Web 容器:完成 Web 服务器的功能。
Servlet 容器:名字为 catalina,用于处理 Servlet 代码。
JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码
数据的具体流向
通过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传给客户
容器:一个进程控制一个容器,而比一个操作系统控制一个服务消耗小得多。