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

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

    • 分享

      RPC 實(shí)戰(zhàn)與原理 精簡(jiǎn)版

       python_lover 2021-05-13

      什么是 RPC?

      Remote Procedure Call,遠(yuǎn)程過程調(diào)用。

      RPC 有什么作用?

      • 屏蔽遠(yuǎn)程調(diào)用、本地調(diào)用的區(qū)別

      • 隱藏底層網(wǎng)絡(luò)通信的復(fù)雜性,讓我們更專注于業(yè)務(wù)

      RPC 步驟

      為什么需要序列化?

      • 網(wǎng)絡(luò)傳輸必須是「二進(jìn)制」,調(diào)用方的參數(shù)都是對(duì)象

      • 請(qǐng)求?二進(jìn)制消息體

      零拷貝

      什么是零拷貝?

      為什么需要零拷貝?

      網(wǎng)卡等操作,只能通過內(nèi)核操作應(yīng)用程序要發(fā)送網(wǎng)絡(luò)數(shù)據(jù),需要將數(shù)據(jù)復(fù)制到內(nèi)核

      如何實(shí)現(xiàn)零拷貝?

      虛擬內(nèi)存

      • mmap + write

      • sendfile

      Netty 的零拷貝有何不同?

      • 一個(gè)請(qǐng)求,可能拆分成多個(gè)數(shù)據(jù)包

      • 數(shù)據(jù)包的組合在用戶空間,解決用戶空間內(nèi)存的拷貝處理問題,CompositeByteBuf

      • 也包括用戶空間、內(nèi)核空間的數(shù)據(jù)拷貝:Direct Buffers

      動(dòng)態(tài)代理實(shí)現(xiàn)

      • JDK:只能代理接口

      • Javassist操作底層字節(jié)碼,不需要反射,性能好

      • Byte Buddy:更容易的 API,速度比 Javassist 快,Spring、Jackson 使用

      HTTP/2 特性

      • 多路復(fù)用,同一鏈路雙向發(fā)送stream數(shù)據(jù)

      • Header 壓縮

      為什么需要服務(wù)發(fā)現(xiàn)?

      公共的“通訊錄”

      為什么不用 DNS?

      • DNS多級(jí)緩存,且緩存時(shí)間長(zhǎng)

      • 需要搭建負(fù)載均衡,額外成本

      定時(shí)任務(wù) & 時(shí)間輪

      定時(shí)任務(wù)的問題?

      • future 啟動(dòng)線程進(jìn)行異步編程,sleep

      • 如果5秒超時(shí),高并發(fā)的

      • 讓CPU額外輪詢遍歷,浪費(fèi)CPU

      時(shí)間輪的應(yīng)用

      • 延遲消息

      • 訂單過期(10分鐘未付款,取消訂單)

      時(shí)鐘輪本質(zhì)

      減少額外的掃描操作

      時(shí)間輪在 RPC 的應(yīng)用

      調(diào)用端請(qǐng)求的超時(shí)處理,節(jié)省CPU

      時(shí)間輪實(shí)現(xiàn)

      Netty的 TimeWheel

      如何注冊(cè)和發(fā)現(xiàn)服務(wù)?

      • RPC Server 提供服務(wù),向 Registry 注冊(cè)自身

      • RPC Client 調(diào)用服務(wù),從 Registry 拉取服務(wù)列表

      • Server 節(jié)點(diǎn)變更時(shí),同步變更,Client 感知刷新本地的「服務(wù)節(jié)點(diǎn)列表」

      實(shí)現(xiàn):

      • 注冊(cè)中心 API

      • 服務(wù)健康狀態(tài)監(jiān)測(cè):ZooKeeper 的會(huì)話超時(shí)控制機(jī)制

      • 服務(wù)狀態(tài)變更通知:ZooKeeper 的 Watcher 機(jī)制

      如何實(shí)現(xiàn) RPC 遠(yuǎn)程調(diào)用?

      • 客戶端、服務(wù)端如何建立網(wǎng)絡(luò)連接:HTTP、Socket

      • 服務(wù)端如何處理請(qǐng)求:NIO(使用 Netty

      • 數(shù)據(jù)傳輸采用什么協(xié)議

      • 數(shù)據(jù)如何序列化、反序列化:JSON,PB,Thrift

      如何追蹤微服務(wù)?

      核心理念:調(diào)用鏈,全局唯一的 ID 將同一請(qǐng)求串聯(lián)起來,從而還原調(diào)用關(guān)系,統(tǒng)計(jì)系統(tǒng)指標(biāo)。

      注冊(cè)中心選型

      • 高可用

        • 集群部署:多個(gè)實(shí)例

        • 多機(jī)房部署:一個(gè)機(jī)房斷電等不可抗因素

      • 數(shù)據(jù)一致性

        • CP 型:ZooKeeper(Redis),強(qiáng)一致性,機(jī)房間斷網(wǎng),注冊(cè)中心不可用

        • AP 型:犧牲一致性,保證可用性。Eureka

      開源 RPC 框架

      限定語言

      • Dubbo:Java,阿里

      • Motan:Java,微博

      • Tars:C++,騰訊(已支持多語言)

      • Spring Cloud:Java

        • 網(wǎng)關(guān) Zuul

        • 注冊(cè)中心 Eureka

        • 服務(wù)超時(shí)熔斷 Hystrix

        • 調(diào)用鏈監(jiān)控 Sleuth

        • 日志分析 ELK

      跨語言 RPC 框架

      • gRPC:HTTP/2

      • Thrift:TCP

      Spring Cloud 微服務(wù)架構(gòu)

        本站是提供個(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)論公約

        類似文章 更多