架构师训练营学习总结——网络与数据库【第八周】
一 网络通讯协议
1. 一次web请求的网络通信历程
2. TCP/IP网络模型
2.1 OSI七层模型与TCP/IP四层模型比较
2.2 TCP/IP四层协议结构
2.3 网络数据包格式
2.4 物理层
物理层负责数据的物理传输,计算机输入输出的只能是01这样的二进制数据,但是在真正的通信线路里有光纤、电缆 、各种无限设备。光信号和电信号,以及无线电信号在物理上是完全不同的,如何让这些不同的设备能够理解、处理相同的二进制数据,这就是物理层要解决的问题。
2.5 链路层
链路层就是将数据进行封装后交给物理层进行传输,主要就是将数据封装成数据帧,以帧为单位通过物理层进行通信,有了帧,就可以在帧上进行数据校验,以及流量控制。链路层会定义帧的大小,这个大小也被称为最大传输单元。像HTTP要在传输的数据上添加一个HTTP头一样,数据链路层也会将封装好的帧添加一个帧头,帧头里记录的一个重要信息就是发送者和接受者的MAC地址。MAC地址是网卡的设备标识符,是唯一的,数据帧通过这个信息确保数据送达正确的目标机器。
数据链路层负载均衡
2.6 网络层
网络层IPX协议使得互联网应用根据IP地址就能访问到目标服务器,请求离开APP后,到达运营服务商的交换机 ,交换机会根据这个IP进行路由转发,可能中间会经过很多个转发节点,最后数据到达目标服务器。
网络层的数据需要交给数据链路层进行处理,而链路层帧的大小定义了最大传输单元,网络层的IP数据包必须要小于最大传输单元才能进行网络传输,这个数据包也有一个IP头,主要包括的就是发送者和接受者的IP地址。
IP负载均衡
2.7 传输层(TCP协议)
IP协议不是一个可靠的通信协议,不会建立稳定的通信链路,并不会确保数据一定送达。要保证通信的稳定可靠,需要传输层协议TCP。
TCP协议是一种面向连接的、可靠的、基于字节流的传输层协议。TCP作为一个比较基础的通信协议,有很多重要的机制保证了TCP协议的可靠性和强壮性:
使用序号,对收到的TCP报文进行排序和检测重复的数据
无错传输,使用校验和检测报文段的错误
使用确认和计时器来检测和纠正丢包或者延时
流量控制,避免主机分组发送得过快而使接收方来不及完全收下
拥塞控制,发送方根据网络承载情况控制分组的发送量,以获得高性能同时避免拥塞崩溃
丢失包的重传
TCP连接建立三次握手过程
2.8 应用层(HTTP协议)
互联网应用需要在全球范围内为用户提供服务,将全球的应用和全球的用户联系在一起,需要一个统一的应用层协议,这个协议就是HTTP协议。
2.8.1 HTTP请求的七种方法
GET
只读请求,请求处理过程中不应该产生副作用,即web应用不应该因为get请求而发发生任何状态改变
HEAD
和GET方法一样,但是只返回响应头
POST
提交请求
PUT
上传请求
DELETE
删除URL标识的资源
TRACE
回显服务器收到的请求,用于测试或者诊断
OPTIONS
请求服务器返回所有支持的HTTP请求方法,测试服务器是否正常
2.8.2 HTTP响应的5种状态
1xx 请求已被服务器接收,继续处理
2xx成功 请求以成功被服务器接收、理解并接受
3xx重定向 需要后续操作才能完成这一请求
4xx请求错误 请求含有词法错误或者无法被执行
5xx服务器错误 服务器在处理某个正确请求时发生错误
2.8.3 HTTP协议版本
HTTP/1.0,客户端请求到资源后回关闭连接,并发量大的时候回导致频繁创建、关闭TCP连接,而TCP三次握手、四次挥手回消耗一定的时间。
HTTP/1.1 默认启用长连接模式,即客户端可以使用同一个TCP连接顺序发送多个请求,新版本中也引入了管道机制,客户端可以不用等上一个请求的响应结果就可以发送下一个请求,但是服务器端也是按照客户端请求的顺序进行响应的,可以理解为半双工模式。
HTTP/2 复用TCP连接的方式则不同,依然遵循请求、响应模式,但客户端发送多个请求和服务端给出多个响应的顺序不受限制,这样既避免了“队头堵塞”,又能快速获取响应。
二 数据库架构原理与性能优化
1. PrepareStatement预编译
PrepareStatement会预先提交带占位符的SQL进行预处理,提前生成执行计划,当给定占位符参数,真正执行SQL的时候,执行引擎可以直接执行,效率更好一点。
2. 数据库架构
2.1 连接器
数据库连接器会为每个请求分配一块专用的内存空间用于会话上下文管理。建立连接对数据库而言相对比较重,需要话费一定的时间,因此应用程序启动的时候,通常会初始化一些数据库连接放在连接池里,这样当处理外部请求执行SQL操作的时候,就不需要花费时间建立连接了。
2.2 语法分析器
2.3 语义分析与优化器
语义分析与优化器就是要将各种复杂嵌套的SQL进行语义等价转化,得到有限几种关系代数计算结构,并利用索引等信息进一步进行优化。
2.4 执行引擎
3. 性能优化
3.1 B-树与B+树
3.2 聚簇索引
聚簇索引的数据库记录和索引存储在一起
3.3 非聚簇索引
非聚簇索引在叶子节点记录的不是数据行记录,而是聚簇索引,也就是主键。
通过非聚簇索引找到聚簇索引,在通过主键索引找到行记录的过程也被成为回表。
3.4 添加必要的索引优化SQL查询性能
在几百万行的数据库查找一条记录,如果没有索引,就需要全表扫描,检索所有的行记录,才能找到需要的记录。
3.5 谨慎使用索引
不要盲目添加索引,尤其是在生产环境中。
添加索引的alter操作会消耗较长的时间(分钟级)
ALTER操作期间,所有数据的操作全部阻塞,对应用而言,因为连接不能释放,事实上,查询也被阻塞。
删除不用的索引,避免不必要的增删开销
使用更小的数据类型创建索引
4. 数据库
4.1 数据库事务
事务特性ACID
4.2 数据库事务日志
进行事务操作时,事务日志文件会记录更新前的数据记录,然后再更新数据库中的记录,如果全部记录都更新成功,那么事务正常结束,如果过程中某条记录更新失败,那么整个事务会被回滚,已经更新的数据记录根据事务日志的记录进行恢复,这样全部数据都恢复到事务提交前的状态,仍然保持数据一致性。
版权声明: 本文为 InfoQ 作者【王海】的原创文章。
原文链接:【http://xie.infoq.cn/article/cbadb78b01eb9a94b2b9678dd】。未经作者许可,禁止转载。
评论