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就變好。