1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        RPC 框架設(shè)計

        共 1408字,需瀏覽 3分鐘

         ·

        2021-03-21 17:08

        初識 RPC

        服務(wù)化有什么好處?

        • 防止代碼拷貝

        • 防止底層復(fù)雜性的擴散

        • 防止公共庫的耦合

        • 保證 SQL 的質(zhì)量,能夠解除數(shù)據(jù)庫的耦合

        什么是 RPC

        RPC:Remote Procedure Call Protocol,遠程過程調(diào)用協(xié)議,像調(diào)用本地函數(shù)一樣,去調(diào)用一個遠端服務(wù)。

        相比“同一個進程”的“本地”函數(shù)調(diào)用,有沒有辦法,調(diào)用一個“跨進程”的“遠程”函數(shù)呢?

        Socket 通訊,只能傳遞連續(xù)的字節(jié)流,如何將 “入?yún)?函數(shù)” 放到連續(xù)的字節(jié)流里呢?需要設(shè)計“應(yīng)用層報文(協(xié)議)”

        “跨進程”“遠程”調(diào)用的過程

        RPC 框架的架構(gòu)職責(zé)

        上述跨進程調(diào)用遠端的服務(wù),存在的問題是沒有將通用操作抽離出來。

        RPC框架職責(zé):

        1. 讓調(diào)用端,像調(diào)用本地函數(shù)一樣,便捷的調(diào)用遠程的服務(wù)

        2. 讓服務(wù)端,像提供本地函數(shù)一樣,便捷的提供遠程的服務(wù)

        向調(diào)用方屏蔽各種復(fù)雜性,向服務(wù)方也屏蔽各種復(fù)雜性,讓調(diào)用方感覺上就是在調(diào)用本地函數(shù)一樣,來調(diào)用一個遠端的服務(wù);讓服務(wù)方就像實現(xiàn)一個本地函數(shù)一樣,便捷地提供遠端服務(wù)。

        序列化與反序列化

        為什么需要序列化?

        需要將對象等數(shù)據(jù)進行二進制轉(zhuǎn)儲。

        所謂序列化,是將“對象”形態(tài)的數(shù)據(jù)轉(zhuǎn)化為“連續(xù)空間二進制字節(jié)流”形態(tài)數(shù)據(jù)的過程。

        如何進行序列化?

        如何將一個 class User 的內(nèi)存實體 u1 轉(zhuǎn)化為二進制字節(jié)流?

        • 方案一:自描述

          自描述的標(biāo)記性語言 (XML/JSON),來進行轉(zhuǎn)換。規(guī)定好轉(zhuǎn)換規(guī)則。

        • 方案二:序列化協(xié)議

          序號 | key 長度 | key 值 | value 長度 | value 值

        序列化協(xié)議設(shè)計,要考慮什么因素?

        1. 解析效率

        2. 壓縮率,傳輸有效性

        3. 擴展性,兼容性

        4. 可讀性,可調(diào)試性

        5. 跨語言

        6. 通用性

        常見的序列化方法(協(xié)議)

        1. xml/json

        2. protobuf

        3. Avro

        4. CORBA

        5. mc_pack

        字節(jié)流發(fā)送 + 字節(jié)流接收

        同步 RPC 系統(tǒng)架構(gòu),核心流程

        RPC-server:IO線程,中間是一個隊列,工作線程處理結(jié)果,返回。

        連接池組件

        異步 RPC 系統(tǒng)架構(gòu),核心流程

        調(diào)用方調(diào)用,生成上下文,編程報文,放入隊列;調(diào)用結(jié)束

        異步架構(gòu),上下文管理器

        1. 為什么需要上下文管理器?

        2. 如何將請求-響應(yīng)-回調(diào)等信息匹配起來?

        一條連接,異步請求、響應(yīng)報文如何匹配? 可以通過“請求ID”關(guān)聯(lián)!!!

        通過“請求ID”關(guān)聯(lián) 請求-響應(yīng)-回調(diào)

        異步架構(gòu),超時管理器

        RPC-Server

        監(jiān)聽一個端口,收發(fā)線程收發(fā)數(shù)據(jù)庫包,中間一個包隊列,工作線程來處理,整個 RPC-Server 就是一個比較簡單的生產(chǎn)者-消費者。

        總結(jié)

        1. 什么是 RPC?

          像調(diào)用本地函數(shù)一樣,去調(diào)用一個遠端服務(wù)

        2. 為什么需要 RPC 框架?

          用來屏蔽 rpc 調(diào)用過程中,跟業(yè)務(wù)代碼無關(guān)的底層技術(shù)細節(jié)

        3. 什么是序列化?為什么需要序列化?

          將對象轉(zhuǎn)換為二進制流的過程

        4. 同步 RPC-Client 的核心組件是什么?

          序列化/反序列化、連接池

        5. 異步 RPC-Client 的核心組件是什么?

          收發(fā)隊列(用于解耦)、工作線程、上下文管理器

        source:https://www.cnblogs.com/ice-image/p/14554250.html

        喜歡,在看

        瀏覽 36
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            被添出水全过程视频 | 沟厕偷窥中文 | 真实国产乱子伦对白一级 | 五月婷婷天堂 | 国产精品-去看片 | 狼友视频在线播放 | 囯产精品久久久久久久免牛肉蒲团 | 午夜影院黄色片 | 婷婷久久丁香 | 宫下玲奈av作品在线播放 |