国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

為什么有了 HTTP 還要 RPC

這篇具有很好參考價(jià)值的文章主要介紹了為什么有了 HTTP 還要 RPC。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

哈嘍大家好,我是咸魚

隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,分布式架構(gòu)越來(lái)越被人們所采用。在分布式架構(gòu)下,為了實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)邏輯,應(yīng)用程序需要分布式通信實(shí)現(xiàn)遠(yuǎn)程調(diào)用

而這時(shí)候就需要一種協(xié)議來(lái)支持遠(yuǎn)程過(guò)程調(diào)用,以便實(shí)現(xiàn)不同應(yīng)用程序之間的數(shù)據(jù)交換和信息傳遞。其中常用的協(xié)議包括 HTTP 協(xié)議和 RPC 協(xié)議

HTTP 協(xié)議和 RPC 協(xié)議都是用于計(jì)算機(jī)之間進(jìn)行通信的協(xié)議。那么小伙伴們有沒有想過(guò)它們之間有什么區(qū)別呢?有了HTTP為什么還要RPC呢?

為了解答上面的疑問,我們先從這兩個(gè)協(xié)議的介紹開始

HTTP 和 RPC

  • HTTP

學(xué)過(guò)計(jì)算機(jī)網(wǎng)絡(luò)的小伙伴們相信對(duì)下面這段話再熟悉不過(guò)了:

HTTP(HyperText Transfer Protocol,超文本傳輸協(xié)議)協(xié)議,主要用于在 Web 瀏覽器和 Web 服務(wù)器(B/S架構(gòu))之間傳輸超文本標(biāo)記語(yǔ)言(HTML)文件,支持客戶端和服務(wù)器之間的通信

HTTP 協(xié)議是網(wǎng)絡(luò)傳輸協(xié)議中應(yīng)用最為廣泛的一種,HTTP 協(xié)議基于請(qǐng)求/響應(yīng)模型,通過(guò)在客戶端和服務(wù)器之間交換請(qǐng)求和響應(yīng)來(lái)傳輸數(shù)據(jù)。

它簡(jiǎn)單、靈活、可擴(kuò)展,而且最重要的是——它是一種無(wú)狀態(tài)協(xié)議,也就是說(shuō),每次客戶端和服務(wù)器之間交換請(qǐng)求和響應(yīng)時(shí),HTTP協(xié)議都是一張白紙,不會(huì)記住之前的任何信息

而無(wú)狀態(tài)協(xié)議重要的一點(diǎn)優(yōu)勢(shì)是可靠,即使某個(gè)請(qǐng)求失敗或者丟失,也不會(huì)影響到其他請(qǐng)求的處理

HTTP 協(xié)議使用文本格式進(jìn)行傳輸,方便開發(fā)人員去閱讀和調(diào)試,又因具有可跨平臺(tái)、可擴(kuò)展、可緩存、可重用等優(yōu)點(diǎn)被廣泛應(yīng)用于 Web 開發(fā)中,常用于網(wǎng)頁(yè)訪問、圖片加載等場(chǎng)景

看到這里,小伙伴可能會(huì)想,HTTP 這么神,它真的就一點(diǎn)缺點(diǎn)沒有嗎?當(dāng)然肯定是有的

前面我們說(shuō)到 HTTP 協(xié)議是無(wú)狀態(tài)的,也就是說(shuō)每次請(qǐng)求和響應(yīng)之間是沒有關(guān)聯(lián)的,服務(wù)器不會(huì)記住之前的任何信息,所以會(huì)導(dǎo)致每次請(qǐng)求都要重新建立連接

在處理一些長(zhǎng)連接或高并發(fā)的場(chǎng)景時(shí),每次請(qǐng)求都需要重新建立連接,而這個(gè)過(guò)程不但會(huì)增加了網(wǎng)絡(luò)開銷和延遲,還會(huì)消耗服務(wù)器的資源,從而降低了效率。如果使用有狀態(tài)的協(xié)議,服務(wù)器可以記住之前的信息,避免了重復(fù)建立連接的過(guò)程

除此之外,因?yàn)?HTTP 協(xié)議最初設(shè)計(jì)的目的是為了在客戶端和服務(wù)器之間傳輸 HTML 文檔,即數(shù)據(jù)傳輸格式是基于文本的

所以說(shuō) HTTP 協(xié)議不支持類型化的數(shù)據(jù)傳輸和自定義協(xié)議擴(kuò)展,請(qǐng)求和響應(yīng)的格式是固定的,這就導(dǎo)致了它不能很好地支持自定義數(shù)據(jù)結(jié)構(gòu)和復(fù)雜邏輯

簡(jiǎn)單來(lái)說(shuō),HTTP 協(xié)議有點(diǎn)“死板”

  • RPC

RPC(Remote Procedure Call,遠(yuǎn)程過(guò)程調(diào)用)協(xié)議是一種進(jìn)程間通信協(xié)議,用于實(shí)現(xiàn)分布式應(yīng)用程序之間的遠(yuǎn)程調(diào)用,使得不同的應(yīng)用程序可以像調(diào)用本地程序一樣調(diào)用遠(yuǎn)程程序

RPC 協(xié)議基于函數(shù)調(diào)用模型。在 RPC 協(xié)議中,客戶端調(diào)用遠(yuǎn)程服務(wù)器上的函數(shù)時(shí),會(huì)將參數(shù)打包成消息并發(fā)送給服務(wù)器,服務(wù)器接收到消息后,解包參數(shù)并執(zhí)行相應(yīng)的函數(shù),最后將結(jié)果打包成消息并發(fā)送回客戶端、

這這個(gè)過(guò)程對(duì)于客戶端來(lái)說(shuō)是透明的,就像調(diào)用本地函數(shù)一樣,即 RPC 可以實(shí)現(xiàn)在不同的進(jìn)程或不同的機(jī)器之間進(jìn)行函數(shù)調(diào)用

它具有網(wǎng)絡(luò)傳輸速度快、協(xié)議擴(kuò)展性好等優(yōu)點(diǎn)(因?yàn)椴捎昧硕M(jìn)制數(shù)據(jù)傳輸格式,相對(duì)于HTTP等基于文本的協(xié)議,二進(jìn)制格式傳輸數(shù)據(jù)更加高效)。不但如此,RPC 的設(shè)計(jì)初衷就是支持多種數(shù)據(jù)格式和傳輸協(xié)議,這使得它可以很好地支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和邏輯

此外,RPC 協(xié)議可以使用更高效的編碼和傳輸協(xié)議,還可以使用異步調(diào)用來(lái)提高響應(yīng)速度

我們常說(shuō),世上沒有完美的東西,HTTP 如此,RPC 也是如此

與 HTTP 相比,RPC 更加復(fù)雜。為了實(shí)現(xiàn) RPC 協(xié)議的設(shè)計(jì)目標(biāo)(高效、靈活和可擴(kuò)展),它需要定義更多的接口和協(xié)議,同時(shí)需要更多的配置和管理。當(dāng)然這會(huì)提高開發(fā)和運(yùn)維的難度

為了支持跨語(yǔ)言、跨平臺(tái)的遠(yuǎn)程調(diào)用,RPC 通常不包含安全機(jī)制。如果不采取額外的安全措施,就有可能存在身份偽造、數(shù)據(jù)篡改、拒絕服務(wù)等安全問題

為了保護(hù)網(wǎng)絡(luò)安全,我們可以在 RPC 中實(shí)現(xiàn)額外的安全措施:

  1. 例如使用SSL/TLS協(xié)議進(jìn)行加密通信
  2. 使用數(shù)字證書進(jìn)行身份驗(yàn)證
  3. 使用訪問控制列表進(jìn)行授權(quán)
  4. 進(jìn)行安全審計(jì)和漏洞掃描

前面我們說(shuō)到,RPC 通常采用二進(jìn)制數(shù)據(jù)傳輸格式,而不是基于文本的格式。二進(jìn)制格式雖然傳輸效率高,但是需要額外的計(jì)算資源來(lái)序列化和反序列化參數(shù)和返回值

在 RPC 中,客戶端和服務(wù)器之間需要將參數(shù)和返回值打包成二進(jìn)制數(shù)據(jù),并在網(wǎng)絡(luò)上傳輸。這個(gè)過(guò)程需要將參數(shù)和返回值轉(zhuǎn)換為二進(jìn)制格式,并進(jìn)行壓縮和編碼,以減少數(shù)據(jù)傳輸量

對(duì)于接收方,需要將接收到的二進(jìn)制數(shù)據(jù)解碼并轉(zhuǎn)換為原始數(shù)據(jù)格式。這個(gè)過(guò)程需要消耗額外的計(jì)算資源

因此,RPC需要額外的網(wǎng)絡(luò)帶寬和計(jì)算資源來(lái)序列化和反序列化參數(shù)和返回值

HTTP 和 RPC 的區(qū)別

  1. 目的不同

HTTP 是一種無(wú)狀態(tài)的協(xié)議,它的主要目的在客戶端和服務(wù)器之間交換請(qǐng)求和響應(yīng)來(lái)傳輸文本內(nèi)容

RPC 是一種有狀態(tài)的協(xié)議,它的主要目的是在客戶端和服務(wù)器之間傳遞信息并調(diào)用遠(yuǎn)程函數(shù)

  1. 傳輸方式不同

HTTP 使用文本(如 HTML、XML、JSON等)作為載體,并且使用明文傳輸

RPC可以使用多種格式傳輸(例如二進(jìn)制格式),并且可以使用額外的安全加密技術(shù)保證傳輸安全性

  1. 通信方式不同

HTTP 使用的是請(qǐng)求/響應(yīng)模型,客戶端向服務(wù)器發(fā)送請(qǐng)求并等待響應(yīng)。客戶端發(fā)送一個(gè)請(qǐng)求,服務(wù)器返回一個(gè)響應(yīng)

RPC 使用的是調(diào)用/返回模型,客戶端調(diào)用服務(wù)器上的遠(yuǎn)程函數(shù)并等待返回結(jié)果。RPC 支持多種不同的調(diào)用方式,如同步調(diào)用、異步調(diào)用、流式調(diào)用等

有了 HTTP 為什么還要 RPC?

雖然 HTTP 已經(jīng)成為了網(wǎng)絡(luò)通信的重要標(biāo)準(zhǔn)之一而且被廣泛應(yīng)用于互聯(lián)網(wǎng)上的各種場(chǎng)景,但是在某些情況下,它并不能滿足用戶的需求

例如在一些復(fù)雜的分布式應(yīng)用場(chǎng)景下(分布式系統(tǒng)中的服務(wù)調(diào)用、微服務(wù)架構(gòu)中的服務(wù)間通信等),RPC 協(xié)議要比 HTTP 協(xié)議更適合

咸魚將從以下幾點(diǎn)來(lái)闡述一下 RPC 為什么更適合復(fù)雜的分布式應(yīng)用場(chǎng)景

從時(shí)效性度來(lái)看

  • HTTP 協(xié)議的數(shù)據(jù)格式有一定的局限性,比如只能傳輸文本,傳輸效率低下
  • HTTP協(xié)議是基于請(qǐng)求/響應(yīng)模型,每次請(qǐng)求都需要建立一個(gè)新的連接,這樣會(huì)增加網(wǎng)絡(luò)開銷
  • 相比于 HTTP 協(xié)議,RPC 協(xié)議通常使用二進(jìn)制數(shù)據(jù)格式進(jìn)行傳輸,通常具有更高的傳輸效率和更低的網(wǎng)絡(luò)延遲
  • 相比于 HTTP 協(xié)議,RRPC協(xié)議還支持異步調(diào)用和批量調(diào)用等高級(jí)特性,可以提高系統(tǒng)的性能和吞吐量

從安全性來(lái)看

  • HTTP 是一種文本協(xié)議,數(shù)據(jù)傳輸使用的是明文,這樣就容易被中間人竊聽或者篡改數(shù)據(jù)(不過(guò)可以使用SSL/TLS 協(xié)議對(duì)數(shù)據(jù)進(jìn)行加密和認(rèn)證)
  • 相比于 HTTP 協(xié)議,RPC 支持傳輸各種類型的數(shù)據(jù)(比如二進(jìn)制),可以更快靈活地傳輸大量數(shù)據(jù),并且也可以加密傳輸以保證安全性

從場(chǎng)景復(fù)雜度來(lái)看文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-450567.html

  • 在復(fù)雜的業(yè)務(wù)邏輯和數(shù)據(jù)結(jié)構(gòu)場(chǎng)景下,通常需要進(jìn)行多次請(qǐng)求和響應(yīng)操作,而 HTTP 作為無(wú)狀態(tài)協(xié)議無(wú)法保持會(huì)話狀態(tài),每次請(qǐng)求和響應(yīng)都需要重新建立連接和傳輸數(shù)據(jù),這會(huì)導(dǎo)致網(wǎng)絡(luò)延遲和性能下降
  • HTTP協(xié)議的請(qǐng)求和響應(yīng)通常是基于文本或二進(jìn)制數(shù)據(jù)格式,無(wú)法直接支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu),例如對(duì)象、數(shù)組、枚舉等
  • 相比于 HTTP 協(xié)議,RPC 是一種有狀態(tài)協(xié)議,而且 RPC 可以通過(guò)定義接口和方法來(lái)封裝業(yè)務(wù)邏輯,使得客戶端可以通過(guò)簡(jiǎn)單的調(diào)用來(lái)完成復(fù)雜的操作
  • 相比于 HTTP 協(xié)議,RPC協(xié)議是一種面向?qū)ο蟮膮f(xié)議,它可以直接支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu),例如對(duì)象、數(shù)組、枚舉等

到了這里,關(guān)于為什么有了 HTTP 還要 RPC的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 為什么有了HTTP,還需要WebSocket協(xié)議?

    為什么有了HTTP,還需要WebSocket協(xié)議?

    目錄 WebSocket是什么? WebSocket怎樣建立連接? WebSocket的實(shí)際用途 WebSocket 與 HTTP 的選擇 HTTP 是基于 TCP協(xié)議 的,同一時(shí)間里,客戶端和服務(wù)器只能有一方主動(dòng)發(fā)數(shù)據(jù),是 半雙工通信 。 通常,打開某個(gè)網(wǎng)頁(yè),我們每點(diǎn)擊一次網(wǎng)頁(yè)上的某個(gè)選項(xiàng),前端就會(huì)發(fā)送一次HTTP請(qǐng)求,網(wǎng)站

    2024年02月11日
    瀏覽(29)
  • 網(wǎng)絡(luò)編程——RPC與HTTP基本介紹、歷史追溯、主流應(yīng)用場(chǎng)景、對(duì)比分析、為什么還需要使用RPC

    網(wǎng)絡(luò)編程——RPC與HTTP基本介紹、歷史追溯、主流應(yīng)用場(chǎng)景、對(duì)比分析、為什么還需要使用RPC

    HTTP協(xié)議(Hyper Text Transfer Protocol) 超文本傳輸協(xié)議 : 一個(gè)用于在網(wǎng)絡(luò)上交換信息的標(biāo)準(zhǔn)協(xié)議,它定義了客戶端(例如瀏覽器)和服務(wù)器之間的通信方式。如平時(shí)上網(wǎng)在瀏覽器上敲個(gè)網(wǎng)址url就能訪問網(wǎng)頁(yè),這里用到的就是HTTP協(xié)議。 明確 HTTP 是一個(gè)協(xié)議,是一個(gè)超文本傳輸協(xié)議,

    2024年02月16日
    瀏覽(24)
  • 既然有Map了,為什么還要有Redis?

    既然有Map了,為什么還要有Redis?

    以下內(nèi)容轉(zhuǎn)自掘金 作者:哪吒編程 Redis可以存儲(chǔ)幾十個(gè)G的數(shù)據(jù),Map行嗎? Redis的緩存可以進(jìn)行本地持久化,Map行嗎? Redis可以作為分布式緩存,Map只能在同一個(gè)JVM中進(jìn)行緩存; Redis支持每秒百萬(wàn)級(jí)的并發(fā),Map行嗎? Redis有過(guò)期機(jī)制,Map有嗎? Redis有豐富的API,支持非常多的應(yīng)

    2024年02月03日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu)與算法這么難,為什么我們還要學(xué)習(xí)?

    提到數(shù)據(jù)結(jié)構(gòu)與算法,就一定會(huì)伴隨著諸多所謂的堅(jiān)持和抱怨。同時(shí),還有兩個(gè)詞總是出現(xiàn),一個(gè)是內(nèi)功,是對(duì)知識(shí)的定位,一個(gè)是吃透,是對(duì)自己

    2024年01月19日
    瀏覽(29)
  • Java中有了equals(),為什么還有“==“

    Java中有了equals(),為什么還有“==“

    背景:Java中“一切皆是對(duì)象”,為什么還有非對(duì)象的“==”? 在Java語(yǔ)言假設(shè)我們只進(jìn)行OOP,所以Java代碼都是由一個(gè)接著一個(gè)的類組成的。那么,對(duì)象之間比較,用equals()就可以了。 可為什么“==”在代碼隨處可見呢? Java是基于C++的,相比與C++,Java是一種更“純粹”的面向

    2023年04月20日
    瀏覽(26)
  • 云服務(wù)器那么安全穩(wěn)定,為什么大廠還要自建機(jī)房

    云服務(wù)器那么安全穩(wěn)定,為什么大廠還要自建機(jī)房

    一般來(lái)說(shuō)選擇自建機(jī)房或者是云服務(wù)商要考慮的幾個(gè)問題 成本 安全性 管理 通常來(lái)說(shuō)自建機(jī)房,需要自己考慮很多問題,比如 電費(fèi) 網(wǎng)絡(luò) Raid 可靠性 安全性 還要計(jì)算運(yùn)維的成本 似乎從哪個(gè)角度來(lái)說(shuō),自建機(jī)房都是不大劃算的。 但是為什么還有一些公司要自建機(jī)房呢? 首先

    2023年04月08日
    瀏覽(31)
  • 有了Spring為什么還需要SpringBoot呢

    有了Spring為什么還需要SpringBoot呢

    目錄 一、Spring缺點(diǎn)分析 二、什么是Spring Boot 三、Spring Boot的核心功能 3.1 起步依賴 3.2 自動(dòng)裝配 1. 配置文件和依賴太多了?。。?spring是一個(gè)非常優(yōu)秀的輕量級(jí)框架,以IOC(控制反轉(zhuǎn))和AOP(面向切面)為思想內(nèi)核,極大簡(jiǎn)化了JAVA企業(yè)級(jí)項(xiàng)目的開發(fā)。雖然Spring的組件代碼是輕

    2024年02月08日
    瀏覽(24)
  • 【容器架構(gòu)】你知道有 Docker 為什么還要 K8s 嗎?

    【容器架構(gòu)】你知道有 Docker 為什么還要 K8s 嗎?

    ?? 博主介紹 : 博主從事應(yīng)用安全和大數(shù)據(jù)領(lǐng)域,有8年研發(fā)經(jīng)驗(yàn),5年面試官經(jīng)驗(yàn),Java技術(shù)專家,WEB架構(gòu)師,阿里云專家博主,華為云云享專家,51CTO TOP紅人 Java知識(shí)圖譜點(diǎn)擊鏈接: 體系化學(xué)習(xí)Java(Java面試專題) ???? 感興趣的同學(xué)可以收藏關(guān)注下 , 不然下次找不到喲

    2024年02月16日
    瀏覽(22)
  • 有了NULL,為什么C++還需要nullptr?

    有了NULL,為什么C++還需要nullptr?

    目錄 1.引言 2.類型安全 3.函數(shù)重載 4.代碼清晰性 5.示例 6.總結(jié) 在C++編程中,nullptr是一個(gè)類型安全的空指針常量,自C++11起被引入。然而,在此之前,程序員們通常使用NULL或0來(lái)表示空指針。那么,為什么有了NULL之后,C++還需要引入nullptr呢?本文將從類型安全、函數(shù)重載和代

    2024年02月21日
    瀏覽(23)
  • 面試官:為什么有了sleep還需要wait?

    面試官:為什么有了sleep還需要wait?

    對(duì)于線程執(zhí)行最大的問題就是隨機(jī)調(diào)度,搶占式執(zhí)行,對(duì)于程序猿來(lái)講,是不喜歡這種隨機(jī)性的,程序猿喜歡確定的東西,于是就有了一些方法,可以控制線程之間的執(zhí)行順序,雖然線程在內(nèi)核里調(diào)度是隨機(jī)的,但我們可以通過(guò)一些 api 讓線程主動(dòng)阻塞等待,主動(dòng)放棄 CPU 給其

    2024年02月05日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包