乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      思考gRPC :為什么是HTTP/2

       侯培彬 2019-11-21

      背景

      gRPC是google開源的高性能跨語言的RPC方案。gRPC的設(shè)計(jì)目標(biāo)是在任何環(huán)境下運(yùn)行,支持可插拔的負(fù)載均衡,跟蹤,運(yùn)行狀況檢查和身份驗(yàn)證。它不僅支持?jǐn)?shù)據(jù)中心內(nèi)部和跨數(shù)據(jù)中心的服務(wù)調(diào)用,它也適用于分布式計(jì)算的最后一公里,將設(shè)備,移動(dòng)應(yīng)用程序和瀏覽器連接到后端服務(wù)。

      • https:///

      • https://github.com/grpc/grpc

      GRPC設(shè)計(jì)的動(dòng)機(jī)和原則

      • https:///blog/principles

      個(gè)人覺得官方的文章令人印象深刻的點(diǎn):

      • 內(nèi)部有Stubby的框架,但是它不是基于任何一個(gè)標(biāo)準(zhǔn)的

      • 支持任意環(huán)境使用,支持物聯(lián)網(wǎng)、手機(jī)、瀏覽器

      • 支持stream和流控

      HTTP/2是什么

      在正式討論gRPC為什么選擇HTTP/2之前,我們先來簡單了解下HTTP/2。

      HTTP/2可以簡單用一個(gè)圖片來介紹:來自:https:///

      可以看到:

      • HTTP/1里的header對(duì)應(yīng)HTTP/2里的 HEADERS frame

      • HTTP/1里的payload對(duì)應(yīng)HTTP/2里的 DATA frame

      在Chrome瀏覽器里,打開 chrome://net-internals/#http2,可以看到http2鏈接的信息。目前很多網(wǎng)站都已經(jīng)跑在HTTP/2上了,包括alibaba。

      gRPC over HTTP/2

      準(zhǔn)確來說gRPC設(shè)計(jì)上是分層的,底層支持不同的協(xié)議,目前gRPC支持:

      • gRPC over HTTP2

      • gRPC Web

      但是大多數(shù)情況下,討論都是基于gRPC over HTTP2。

      下面從一個(gè)真實(shí)的gRPC SayHello請(qǐng)求,查看它在HTTP/2上是怎樣實(shí)現(xiàn)的。用wireshark抓包:

      可以看到下面這些Header:

      • Header: :authority: localhost:50051

      • Header: :path: /helloworld.Greeter/SayHello

      • Header: :method: POST

      • Header: :scheme: http

      • Header: content-type: application/grpc

      • Header: user-agent: grpc-java-netty/1.11.0

      然后請(qǐng)求的參數(shù)在DATA frame里:

      • GRPC Message: /helloworld.Greeter/SayHello, Request

      簡而言之,gGRPC把元數(shù)據(jù)放到HTTP/2 Headers里,請(qǐng)求參數(shù)序列化之后放到 DATA frame里。

      基于HTTP/2 協(xié)議的優(yōu)點(diǎn)

      HTTP/2 是一個(gè)公開的標(biāo)準(zhǔn)

      Google本身把這個(gè)事情想清楚了,它并沒有把內(nèi)部的Stubby開源,而是選擇重新做?,F(xiàn)在技術(shù)越來越開放,私有協(xié)議的空間越來越小。

      HTTP/2 是一個(gè)經(jīng)過實(shí)踐檢驗(yàn)的標(biāo)準(zhǔn)

      HTTP/2是先有實(shí)踐再有標(biāo)準(zhǔn),這個(gè)很重要。很多不成功的標(biāo)準(zhǔn)都是先有一大堆廠商討論出標(biāo)準(zhǔn)后有實(shí)現(xiàn),導(dǎo)致混亂而不可用,比如CORBA。HTTP/2的前身是Google的SPDY,沒有Google的實(shí)踐和推動(dòng),可能都不會(huì)有HTTP/2。

      HTTP/2 天然支持物聯(lián)網(wǎng)、手機(jī)、瀏覽器

      實(shí)際上先用上HTTP/2的也是手機(jī)和手機(jī)瀏覽器。移動(dòng)互聯(lián)網(wǎng)推動(dòng)了HTTP/2的發(fā)展和普及。

      基于HTTP/2 多語言客戶端實(shí)現(xiàn)容易

      只討論協(xié)議本身的實(shí)現(xiàn),不考慮序列化。

      • 每個(gè)流行的編程語言都會(huì)有成熟的HTTP/2 Client

      • HTTP/2 Client是經(jīng)過充分測試,可靠的

      • 用Client發(fā)送HTTP/2請(qǐng)求的難度遠(yuǎn)低于用socket發(fā)送數(shù)據(jù)包/解析數(shù)據(jù)包

      HTTP/2支持Stream和流控

      在業(yè)界,有很多支持stream的方案,比如基于websocket的,或者rsocket。但是這些方案都不是通用的。

      HTTP/2里的Stream還可以設(shè)置優(yōu)先級(jí),盡管在rpc里可能用的比較少,但是一些復(fù)雜的場景可能會(huì)用到。

      基于HTTP/2 在Gateway/Proxy很容易支持

      • nginx對(duì)gRPC的支持:https://www./blog/nginx-1-13-10-grpc/

      • envoy對(duì)gRPC的支持:https://www./docs/envoy/latest/intro/arch_overview/grpc#

      HTTP/2 安全性有保證

      • HTTP/2 天然支持SSL,當(dāng)然gRPC可以跑在clear text協(xié)議(即不加密)上。

      • 很多私有協(xié)議的rpc可能自己包裝了一層TLS支持,使用起來也非常復(fù)雜。開發(fā)者是否有足夠的安全知識(shí)?使用者是否配置對(duì)了?運(yùn)維者是否能正確理解?

      • HTTP/2 在公有網(wǎng)絡(luò)上的傳輸上有保證。比如這個(gè)CRIME攻擊,私有協(xié)議很難保證沒有這樣子的漏洞。

      HTTP/2 鑒權(quán)成熟

      • 從HTTP/1發(fā)展起來的鑒權(quán)系統(tǒng)已經(jīng)很成熟了,可以無縫用在HTTP/2上

      • 可以從前端到后端完全打通的鑒權(quán),不需要做任何轉(zhuǎn)換適配

      比如傳統(tǒng)的rpc dubbo,需要寫一個(gè)dubbo filter,還要考慮把鑒權(quán)相關(guān)的信息通過thread local傳遞進(jìn)去。rpc協(xié)議本身也需要支持??傊?,非常復(fù)雜。實(shí)際上絕大部分公司里的rpc都是沒有鑒權(quán)的,可以隨便調(diào)。

      基于HTTP/2 的缺點(diǎn)

      • rpc的元數(shù)據(jù)的傳輸不夠高效

        盡管HPAC可以壓縮HTTP Header,但是對(duì)于rpc來說,確定一個(gè)函數(shù)調(diào)用,可以簡化為一個(gè)int,只要兩端去協(xié)商過一次,后面直接查表就可以了,不需要像HPAC那樣編碼解碼。 可以考慮專門對(duì)gRPC做一個(gè)優(yōu)化過的HTTP/2解析器,減少一些通用的處理,感覺可以提升性能。

      • HTTP/2 里一次gRPC調(diào)用需要解碼兩次

        一次是HEADERS frame,一次是DATA frame。

      • HTTP/2 標(biāo)準(zhǔn)本身是只有一個(gè)TCP連接,但是實(shí)際在gRPC里是會(huì)有多個(gè)TCP連接,使用時(shí)需要注意。

      gRPC選擇基于HTTP/2,那么它的性能肯定不會(huì)是最頂尖的。但是對(duì)于rpc來說中庸的qps可以接受,通用和兼容性才是最重要的事情。

      • 官方的benchmark:https:///docs/guides/benchmarking.html

      • https://github.com/hank-whu/rpc-benchmark

      Google制定標(biāo)準(zhǔn)的能力

      近10年來,Google制定標(biāo)準(zhǔn)的能力越來越強(qiáng)。下面列舉一些標(biāo)準(zhǔn):

      • HTTP/2

      • WebP圖片格式

      • WebRTC 網(wǎng)頁即時(shí)通信

      • VP9/AV1 視頻編碼標(biāo)準(zhǔn)

      • Service Worker/PWA

      當(dāng)然google也并不都會(huì)成功,很多事情它想推也失敗了,比如Chrome的Native Client。

      gRPC目前是k8s生態(tài)里的事實(shí)標(biāo)準(zhǔn)。 gRPC是否會(huì)成為更多地方,更大領(lǐng)域的RPC標(biāo)準(zhǔn)?

      為什么會(huì)出現(xiàn)gRPC

      準(zhǔn)確來說為什么會(huì)出現(xiàn)基于HTTP/2的RPC?

      個(gè)人認(rèn)為一個(gè)重要的原因是,在Cloud Native的潮流下,開放互通的需求必然會(huì)產(chǎn)生基于HTTP/2的RPC。即使沒有g(shù)RPC,也會(huì)有其它基于HTTP/2的RPC。

      gRPC在Google的內(nèi)部也是先用在Google Cloud Platform和公開的API上:https://opensource.google.com/projects/grpc

      盡管gRPC它可能替換不了內(nèi)部的RPC實(shí)現(xiàn),但是在開放互通的時(shí)代,不止在k8s上,gRPC會(huì)有越來越多的舞臺(tái)可以施展。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多