一、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.小结
两个日志(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文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据致;
ps:
1.最终一致性和强一致性
2.主从复制会特性是在压力大的情况下,有数据不一致的情况,所以在这里可以使用rsync远程同步
(1)STATEMENT:基于语句的复制。在服务器上执行sql语句,在从服务器上执行同样的语句,mysql默认采用基于语句的复制,执行效率高。
(2)ROW:基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
(3)MIXED:混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。
对运维核心 ——》管理、控制、优化L1-L4层
客户端向服务器发送FIN断开请求,服务器接收到此请求后,回复一个ACK。服务器向客户机发送FIN断开请求,客户机收到此请求后,回复一个ACK。
为什么握手三次,而不是两次或者四次
为什么不两次:因为TCP是可靠的传输层协议,它在传输数据前,会建立双向数据通信通道,当保证双向数据传输的通道没有问题时,才会发送数据,如果是两次的话,客户端向服务端发送请求连接,服务的回复客户端ACK,假设客户端向服务端发送SYN请求,但是由于网络原因,很卡,所以单方面断开了请求,但是因为网络延迟问题,服务器端延迟了几秒才收到,认为是新的请求,就给ACK回应,但是服务端不知道客户端断开了SYN请求,就会一直将此端口打开,不会给别人用,会一直占用直到时间超时,超时后才会被动关闭。这就会造成资源浪费。
为什么不四次:已经可以正常连接再做四次,就没有必要,造成资源浪费。同时也会增加带宽压力。
为什么挥手四次
因为可能有半关闭状态, 客户机向服务器发送了FIN请求,服务器也给予了ACK响应。但是,服务器和客户机之间还有数据要传输,因此服务器没有向客户机立即发送FIN请求, 数据传输方向是双向的,一个方向的数据通道关闭需要一次请求和一次确认,因此需要断两次,而我们有两个数据方向,因此需要断四次。
TCP和UDP区别:
TCP向上层提供面向连接的可靠服务 ,TCP是可靠的进程到进程通信的协议
TCP提供全双工服务,即数据可以在同一时间双向传输
UDP向上层提供无连接不可靠服务,面向传输,例如qq、微信,当你发送一条信息后,中间有一个服务器,你的未发送数据是中间服务器返回的,不是UDP,UDP是不管的。
①缓存处理 在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每次请求都
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连接(四次挥手)
后面仔细讲解图中的各个部分
socket用于描述IP地址和端口
socket是一个抽象层,其意义是将公司外网和内网的端口,进行桥接。
nginx中一个线程接待一个socket
ss -antp|grep 80|wc -l 查看连接数,一个链接数是一个socket
nginx是一款高性能轻量级WEB服务器
并发请求理论值并发量3~5w,实际上生长环境中就两万左右
受本地资源性能影响、
nginx服务器中是不是跑了其他东起、
网络带宽影响、
队列影响、
最大进程工作数影响、
开启的最大工作进程数影响、
配置文件中配置的 worker_connections
注意epoll机制:
容器:一个进程控制一个容器,而比一个操作系统控制一个服务消耗小得多。
java在翻译过程中,用到堆和栈的方式执行,这个过程中资源消耗,内存消耗非常之大,很可能内存会吃满,需要优化,限制内存上限,这样不会宕机,但是会卡顿。
#优化方法:
在/usr/local/tomcat/bin 文件夹下的catalina.sh加入:
JAVA_OPTS='-Xms512m -Xmx1024m'要加“m”说明是MB。否则就是KB了,在启动tomcat时会 报内存不足。
-Xms:初始值-Xmx:最大值-Xmn:最小值
优化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
(1)修改http访问端口(默认为8080端口)
(2)修改Shutdown端口(默认为8005端口)
(3)修改8009端口
主进程将碎片资源,即使用完没有回收进来的资源,进行二次回收,保证资源的可是用量。
①搭建环境(JDK)
②提供服务层面优化(配置文件)
③解决服务层面故障
④在服务层面提高tomcat运行效率和性能
需要关注:JVM 堆栈、GC垃圾回收机制
①JAVA代码的可执行性+代码健壮性(容错率高)
②JAVA程序的抗并发能力
③JAVA程序的运行消耗
1)dns、三次握手四次挥手、http这三者是怎么串在一起玩儿的
2)为什么是三次握手不是两次、四次
3)外界接入nginx80端口是怎么接入进的
4)nginx和tomcat是如何组合
5)tomcat中有哪三各部分,每个部分该干嘛,代码应该跑在哪儿
6)主机层面、服务层面、业务层面,为什么这么分布的
7)tomcat优化,基于何种角度来考虑到需要优化的
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/m0_51160032/article/details/122099099
内容来源于网络,如有侵权,请联系作者删除!