第八周总结
一、数据存储的变革历程
从机械硬盘到固态硬盘存储速度的提升,到磁盘冗余阵列,再到HDFS。
变化的是技术实现方式,中心设计思想还是类似的。由文件控制块(Linux中的inode,Hdfs中的NameNode)申请空间、记录文件存储的位置(Linux中的数据块,Hdfs中的Datanode)。
Linux单个文件块大小为如果4KB,存储单文件最大不超过70G。Hdfs单文件块大小为64M,所以如果用来存储小文件是不划算的。
二、网络通信原理
在家里电脑访问极客网站的路程。
1、在浏览器地址输入极客网址:https://time.geekbang.org/
2、浏览器查找当前Url是否有缓存,以及判断缓存是否过期,如果过期域名会发送到DNS域名解析服务器,并返回ip地址。
3、客户端知道服务器IP后,开始根据TCP协议,进行3次握手与服务器建立连接。
4、完成建立连接之后,客户端可以向服务器发送数据,并依次包装HTTP协议头、TCP协议头、IP协议头和数据链路层协议头。
5、服务器解释数据,先由网卡对数据进行解析,解析通过后由CPU将数据复制到Socket缓冲区。
6、Socket缓冲区接收到数据后,唤醒线程处理数据,然后让结果写入到Socket输出流,再返给客户端。
7、访问结束后,根据TCP协议,进行4次挥手断开连接释放资源。
为什么TCP协议要求建立连接需要3次握手才建立连接?
为了保证服务端能收接受到客户端的信息并能做出正确的应答而进行前两次握手,为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次握手。(第二次握手,包含服务器对客户端的应答和连接请求)
经过上面的过程,找到对应可以优化的地方
1、每次请求都需要进行3次握手,建立Tcp连接比较浪费资源。在Http1.1中,建立Tcp连接后,可以重复利用tcp连接,减少通信次数。但是Http1.1协议只允许串行的请求,当网络资源越来越多后,也有性能上的问题。Http2.0,允许建立连接后并发的发送数据。但是会出现对头阻塞现象。现在最新的Http3协议不是使用TCP协议,而是使用了QUIC。
2、Socket阻塞编程到非阻塞式NIO。
关键设计思想:多路复用(一个信道同时传输多路信号)。
Http2和非阻塞IO编程,都使用了多路复用的思想。
评论