年终知识点小结(一)

x33g5p2x  于2021-12-23 转载在 其他  
字(6.1k)|赞(0)|评价(0)|浏览(405)

一、Mysql主从复制部分

1、mysql主从复制原理

2.主从复制同步方式

3.mysql日志记录方式

二、网络部分+WEB服务

1.OSI七层模型+TCP/IP五层模型

2.TCP/IP三次握手、四次挥手

3.http1.0和1.1区别http1.0与1.1有什么区别

5.访问百度(简单版)

6.访问百度(细节版)

7.socket套接字概念

8.Nginx部分如何监听端口

9.如何查看Nginx当前服务器的连接数

10.nginx 特点

11.Nginx优化有哪几种

12.数据流向内部分为三个层面:

1)tomcat由哪三部分组成

2)查看支付宝余额的一个数据流向(tomcat):

13.优化tomcat

1)(怎么优化堆和栈?即怎么优化最小内存?最大内存?)

2)connctor连接器(怎么优化最大工作数,队列数量?)

3)在一台主机上部署多实例需要修改哪几个端口?

4)GC垃圾回收机制

14.运维管理维护的tomcat

15.开发角度的tomcat

16.小结

一、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优化有哪几种

  1. 防盗链
  2. 日志分割
  3. 网页压缩
  4. 隐藏nginx版本号
  5. 更改进程数
  6. 连接超时
  7. 缓存时间
  8. epoll机制优化(提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,若工作进程数为 8,每个进程处理 4096 个连接,则允许 Nginx 正常提供服务的连接数已超过 3 万个(4 096×8=32 768))

注意epoll机制:

12.数据流向内部分为三个层面:

1)tomcat由哪三部分组成

  1. Web 容器:完成 Web 服务器的功能。
  2. Servlet 容器:名字为 catalina,用于处理 Servlet 代码。
  3. 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优化,基于何种角度来考虑到需要优化的

相关文章