跳到主要内容

HTTP/2

Streaming

在HTTP/1.1,雖然request之間共用connection,但是以一個request為單位在send packet,這導致如果有一個很大的request先被排進connection,較小的requests必須等大的request先完成。

在HTTP/2引入streaming的概念,會從每個streaming round-robin的來取得package&send,這樣就不用擔心大的request卡住小的request,增加了concurrency。

Flow control

HTTP/2也引入了flow controlreceiver藉由一個特殊的WINDOW_UPDATE frame告知sender buffer大小,如果buffer滿了,sender就會停止transmit,避免receiver處理不了。

Smarter proxies

在HTTP/1.1,如果遇到spike,隨著request數目上升,跟backend service建立的connection也跟著上升,因為request跟connection的關係是1:1

但如果backend service跟load balancer走的是HTTP/2,就可以利用streaming,所以不用每個request都要建立tcp connection,因此需要建立的connection數目變少,要遇到的slow start就變少。

這概念有點像是go的goroutine,一個thread可以host好幾個goroutine,建立thread的effort和context switch的頻率降低,整體的performance就變好。