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 control
,receiver
藉由一個特殊的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就變好。