HTTP/2 协议

HTTP/1.1 与 HTTP/2 相隔了大概20年,但是从目前的研究和实验情况来看,我们不可能等上几十年才升级到下一个版本,h2 在逐渐的普及。 h2 和 h1 的最大差别在于在 http 层上增加了分帧层;把原来的 http 层的数据拆分成多种帧类型,并在每种类型前加上协议性的帧首部。基于二进制分帧的优点:

  1. 传输使用的编码方式改变(采用帧、流模式),不用创建多个 TCP 连接,单个连接就可以有多个流(处理主页面和所有子元素的请求),能够减少延迟,服务器和浏览器的 socket 负载也大大减少。
  2. 并行处理,乱序发送帧,不再采用 pipeline 阻塞方式
  3. 传输的功能得以扩展(如服务端推送、首部压缩、优先级、流量控制)。

学习 HTTP/2 最好的文档是 RFC 7540。

Read more...

DevOps

DevOps 是一套实践方法,在保证高质量的前提下缩短系统变更从提交到部署到生产环境的时间,它设想在开发组和运维组之间没有冲突。

Read more...

SSL/TLS 协议

SSL/TLS 是基于 TCP 之上,HTTP 之下的协议。从技术角度上看,HTTP/2 作为新一代的协议,虽然协议文本中并未强制要求加密,但主要的浏览器(Firefox、Chrome、Safari、Opera、IE、Edge)已共同宣布,他们只支持实现基于 TLS 的 HTTP/2,也就是说加密将是下一代协议的强制事实标准。

Read more...

密码学

近代加密都是加密算法公开的,自行设计算法要求编程阶段就要进行协商开发,且存可能是不严格的数学模型存在安全漏洞。一般企业内部也是用流行的密码学算法(语言支持的加密算法函数)。学习密码学有利于分析安全工具其背后的密码学原理,比如数字证书、SSH、AES的密码原理等。

Read more...

并发的复杂性

本文谈到的并发是指单程序、单节点并发,区别于并发系统,并发系统的一个更加流行的词是分布式系统,并发系统更有可能是并行的,因为其中的多个程序一般可以同时在不同的硬件环境上运行。分布式系统可以看我另一篇文章《微服务架构的复杂性》。 并发指的是多个任务几乎被同时发起运行,但是在同一时刻这些任务不一定都处于运行状态,这取决于 CPU 核心或者 CPU 数量。并行指的是在同一时刻可以有多个任务真正地同时运行。并行运行的必要条件是多 CPU 核心或者多 CPU 的计算环境。 在功能开发中,非并发程序往往未能充分利用服务器的性能,为用户提供服务基本都是排队处理。而并发程序有时可以代替集群,其性能提高对整个系统是至关重要的作用,如果我们将单个节点的性能提高 30%,或者甚至超过 100%,那么我们可以节省多少台机器呢?不过同时并发却带来了编程的复杂性。不同程序单元之间的远程过程调用可以参考另一篇文章《go 网络编程》。Go 语言的特点是通过内部调度可以最大限度地利用单机的计算能力。然而在分布式计算方面,它本身其实并没有提供什么现成的东西,还需要使用一些第三方的框架或工具,或者自己编写和搭建。

Read more...

C Socket 编程

一切皆文件,I/O 操作无处不在,文件、设备、管道、Socket等都是 I/O 操作。C 语言对文件 I/O 操作分两种,一种是无缓冲的(用户层无缓存区),返回的是文件描述符(int 整型),代表函数是 open、read、write 和 socket 等;另一种是有缓冲的(用户层设计了缓存区),返回是的数据流 Stream(FILE 结构体),代表函数是 fopen、fread、fwrite、putc、getc、fputs、fgets 和 fprintf等;不过 C 标准已经不再支持对文件(这里没有包括 socket)的无缓冲操作。

Read more...

TCP 传输原理

TCP的主要目的是在一个比较不可靠的相互通信上提供可靠的,安全的逻辑回路或者连接服务。为了实现这个服务,TCP 的设计 体系非常庞大,我对其理解只是冰山一角,此文只是将我学过的重点知识进行汇总。

Read more...