获得徽章 1
@西安交通大学
@西安交通大学
@西安交通大学
#青训营笔记创作活动#
2月9日 打卡day9
今天学习了502错误的相关知识。
状态码是前后端双方确定数据传输正常合规的工具,如:200状态码代表了数据响应正常,4xx代表客户端错误,401为没有权限,404为请求了一个不存在的网页,5xx代表服务器有问题。
但是实际上当服务端出现问题时,并不能再给前端返回状态码了,而是网管进行返回的,如nginx。
nginx作为实现负载均衡的网关和代理节点,用来接受各个客户端发出的请求并且传递给服务端,当nginx传递给服务端的tcp连接失效时,就会将5xx错误码返回给客户端了。
RST是TCP包头中的一个标志位,用于异常地关闭一个连接。在收到这个位置数据后连接就会关闭,应用层会看到连接的报错
发出RST的原因可能是超时时间过短造成的过早断开连接,或者是服务端应用进程崩了
常见错误可以通过根据代码堆栈来查错,但是有时候因为OOM问题或者代码内部逻辑的退出操作也会导致直接退出进程。
如果都不是的话最后一种可能是请求被打到了不知名的端口上,这也会导致返回502状态码。
展开
评论
#青训营笔记创作活动#
2月8日 打卡day8
今天学习了SQL语句的知识。

以MyBatis、Hibernate为例的ORM框架或者以客户端规则引擎等为例的SQL语句生成通常是数据库经常接受的消息类型

实际上每次在Java中创建和关闭数据库的过程开销都比较大,要进行完成的TCP连接过程,程序上线之后又要进行频繁的数据库操作,因此往往会使用连接池。

SQL语句被发送给SQL接口后,SQL接口会对SQL语句进行哈希处理。之后SQL语句会在缓存中根据哈希值检索数据,如果缓存中有责直接返回数据。

如果未命中会将SQl交给解析器,判断语句是否正确。

优化器根据SQL制定不同的方案,调用存储引擎的API获取数据,然后发生磁盘IO,SQL对结果集处理后返回

当MySQL执行一条查询SQL时,数据是逐条返回的模式,等待全部数据查完再返回会导致撑满内存。

对于写过程,如果使用InnoDB引擎,则会在redo_log中写入日志,这样在保证在出现错误时可以快速回滚。由于本身写SQL的效率就已经较低,所以写日志时会先写到缓冲区,再异步写到磁盘中
展开
评论
#青训营笔记创作活动#
2月7日 打卡day7
今天学习了HTTP协议与websocket协议。

HTTP协议是一个请求-响应的机制,也即前端发出请求,然后网站返回一次HTTP响应。

但是对于需要服务端主动向前端发送HTTP消息的情况下,单纯的请求-响应机制已经不能够满足需求。实现需求的一种方式是使用HTTP不断轮询,这是一种伪服务器推的方式,常见的扫码登录就是这种实现方式。具体实现上分为长短轮询,本质是留给服务器响应时间的长短,长轮询可以有效减少带宽消耗。

目前使用最广泛的HTTP1.1是基于TCP协议的,使用半双工的工作方式,而TCP本身是全双工的。这主要是HTTP设计之初只考虑了请求-响应机制。

浏览器在TCP三次握手建立连接时会统一使用HTTP协议进行一次通信,HTTP请求中带上特殊的header头时,便可以建立websocket连接,建立成功返回101状态码(代表协议切换)。

websocket的消息格式是帧,opcode字段表示数据包类型,payload字段表示想传输数据的长度,payload data字段存放真正要传输的数据。
展开
评论
#青训营笔记创作活动#
2月6日 打卡day6
今天学习了MySQL整体结构的基本知识。
MySQL按照层级划分可以分为四层:网络连接层、系统服务层、存储引擎层、文件系统层
连接层:数据库的连接池,处理客户端的接入;当客户端尝试连接时,MySQL内部会派发一条线程来处理接下来的工作,MySQL的链接是基于TCP/IP协议进行的,支持TCP/IP的语言都可以和MySQL进行连接,连接的具体协议和客户端有关,使用JDBC/ODBC等都可以实现。建立连接成功后会生成一个session会话,校验密码,如果账号密码错误会返回1045错误码。当客户端断开后,数据库的连接不会被马上销毁,而是存放到缓存连接池中,减少操作消耗
服务层:主要组件为SQL语句和触发器,SQL语句不用多说,触发器主要是一个AOP思想的体现,通过INSERT、AFTER等语句来表示触发的时机。其他的解析器和优化器是对SQL语句的编译过程。除此之外,MySQL可以缓存select语句经常执行的查询,从而实现查询优化
存储引擎层:MySQL由于其开源的特性具备可插拔式的存储引擎其中最为常用的则是InnoDB与MyISAM引擎
文件系统层:顾名思义,是负责最终存储和持久化工作的一层包含了配置文件、库表结构文件、数据文件、索引文件、日志文件等。
展开
评论
#青训营笔记创作活动#
2月5日 打卡day5
今天学习了关于抓包相关的知识,以抓包百度数据包并解密为例:
先通过Ping命令获取百度请求的ip,然后使用tcpdump命令进行抓包。
使用wireshark打开抓包生成的文件但是得不到来自baidu.com域名的数据
这是由于HTTP协议里和Host实际发送的请求体被加密了
在数据包传输中,完整经历了TCP握手和TLS加密的过程,之后是两段加密信息和TCP挥手流程(抓包时荣昌较大且无规律的数字是客户端生成的端口号)
TLS加密流程分为两个阶段:TLS四次握手并生成会话密钥(非对称加密)和对称加密通信
整个过程中会话密钥,由客户端随机数、服务器随机数、客户端生成随机数(pre_master_key)构成。只有客户端自己和拥有服务器私钥的人知道,但是服务端可以敢于TLS库的行为使其输出含有pre_master_key的文件。
展开
评论
#青训营笔记创作活动#
2月4日 打卡day4
今天学习了使用Socket传输数据时对TCP和UDP两种协议的选用问题。
socket像是一个电话或者邮箱,通过UDP或TCP协议完成投送信息的过程,UDP类似于投递而TCP类似于拨号。
使用socket(AF_INET,protocal,0)的方式创建一个socket,字节流传输的方式是TCP,数据报传输方式是UDP,函数返回一个socket句柄,用来定位需要的socket结构。
TCP在消息失败后会重传,这是降低TCP传输速度的关键因素,
但是TCP会使用流量窗口来控制发送的数据量大小减少丢包(滑动窗口机制)。
对于整个环境网络,TCP会不断发送试探数据来实现拥塞控制。
即使发生了重传,由于TCP在各层的分段机制,也只需要重传其中一部分。
当前很多使用UDP的场景其实也为了保证应用层的可靠性做了优化,增加了重传机制和乱序处理机制等。
展开
评论
#青训营笔记创作活动#
2月3日 打卡day3
今天学习了关于kafka的一些基本知识。
一个kafka体系架构有Producer Broker 和Consumer以及一个Zookeeper集群组成,其中Producer将消息送到Broker,Broker将消息存储到磁盘中(持久化),Consumer可以从Broker订阅并消费消息。Broker就是服务的代理节点,大多数情况Broker就可以被看作是一台Kafka服务器。
Kafka中的消息按照Topic分类,每个Topic细分为多个Partition(分区)。分区可被看作是一个可追加的日志文件,每个消息在追加到分区的时候都会分配一个特定的偏移量offset,Kafka以此保证分区有序。
同一个Topic的Kafka的分区可以被分配在多台服务器上,因此Topic可以实现横跨多个Broker。
对于消费者而言,多个消费者组成消费组,消息发布到主题时只会投递给每个消费组中的一个消费者,对于生产者,合理的分区规则可以使消息被均匀分配在不同的分区中。
Kafka中Log以文件夹的形式存在,为防止log过大会切分为LogSegment,即为文件夹中的一个日志文件和两个索引文件(偏移量索引文件和时间戳索引文件)。
对于每个分区,同一个分区会存储保存同一消息的不同副本(AR),这些副本并非完全一样,只由Leader副本进行消息同步,其他Follower副本在Leader之后跟进同步,达到一定程度同步的被称为ISR,滞后过多的副本被称为OSR。正常情况下OSR为空。
展开
评论
下一页
个人成就
文章被点赞 3
文章被阅读 2,992
掘力值 212
收藏集
1
关注标签
3
加入于