日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深度剖析RPC框架的核心设计

發布時間:2024/7/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度剖析RPC框架的核心设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

做過分布式服務端的Java工程師,隨著對技術底層的認知的加深,都會或多或少的會去想: 一個RPC框架需要考慮的問題有哪些,如何來解決?

下面我們圍繞RPC通信框架,從如何實現這個角度做一個剖析,以及每個環節能做什么?



RPC框架簡介


單體應用時代只有內外網通信,并沒有服務間通信的訴求,隨著單機服務性能下降,進入多服務分布式的時代后Rpc 框架才應運而生。

通信Rpc猶如生活中電網基建一樣,是分布式服務的基礎組成部分,一個傳輸電能,一個傳輸數據。

RPC ,Remote Procedure Call ,字面意思是遠程過程調用,主要是解決服務間連接及數據交互,但除了通信和數據交互,為適應分布式架構/微服務架構的設計,通常還需要實現增值、增強的附加功能,下面展開來做一個介紹。


一個好的系統設計,通常是完整、系統、可擴展、可容錯、高性能、支持高并發、可跟蹤、有良好的設計模式等等,Rpc 框架的設計需要解決什么問題?


RPC通信方式設計


通信的底層是TCP/IP,在Java中網絡傳輸通常使用Netty 或 Mina 的多路復用模型作為網絡通信的底層。

通信底層當然還有一些優化方式,具體在Java架構師系列課程里面會涉及。


1.多傳輸協議支持


為什么要支持多種傳輸協議呢?在業務中,通常會遇到各種問題,比如:

  • 跨網絡、機房問題
  • 跨語言問題
  • 長連接還是短連接
  • 傳輸安全
  • 傳輸性能

使用Http協議,雖然靈活便于管理、可以跨語言,但是明文、性能很差。通常適用于較低并發、異構系統對接、對外網關等。

使用Dubbo 傳輸協議,性能高、長連接,但目前跨語言做的還不夠,單條大文件/數據傳輸可能會形成網絡瓶頸。

Rmi ,性能較差,短連接,但對于單次大數據量傳輸卻比較好,其他的還有Websocket 、Https、Thrift TTransport等,傳輸協議各有優缺點,所以支持多傳輸協議是有必要的。


2.多數據壓縮/序列化支持


為什么要支持多序列化支持,主要考慮兩個方面

  • 跨語言/異構平臺間交互
  • 性能方面考慮

這個其實跟傳輸協議是搭配的,比如RMI 通常都是使用了標準的二進制序列化

目前有Protobuff、Dubbo 序列化、Hessian 、Java原生、Soap文本序列化、Http的表單序列化、Json、Thrift的TCompactProtocol等,同樣各有優缺點,需要設計成可擴展的方式。

如何找到服務(尋址)并且實現資源合理


消費者如何知道提供者,并且知道當前是否存活,是設計RPC 框架需要考慮的第二大問題


1.多樣的注冊中心支持


不同的業務系統,對于服務間一致性要求并不同,這里有一個CAP權衡問題。

另外還要考慮是否推送提供者的變動、注冊中心自身的安全問題、跨語言平臺等因素。

比如:

  • Zookeeper,支持強一致并能通過Wacher機制主動進行通知,但可用性并不能完全保證
  • Consul ,通過Http方式滿足服務發現,沒有語言限制,但通知實時性比ZK Wacher略差

所以注冊中心也需要做成插件化的可擴展方式。


2.多算法負載均衡、路由和多維度流量控制


負載均衡目的是為了最優使用同一服務間的資源使用,具體到設計中,需要考慮機器情況、服務的負載情況等

算法主要有隨機、輪詢、活躍情況、一致性Hash等。


在生產環境中能通過界面化的方式提供動態的更改權重、路由等規則,實現服務動態權重、熔斷、限流、灰度、多版本等功能。


3.容錯機制


考慮容錯機制是系統完整性的一部分,failover、failfast、failback、failsafe 、forking、Broadcast …等,通常和負載均衡搭配。


讓業務更方便的使用


支持普通配置的同時,支持集成到Spring等主流框架使用配置的方式也有很多種,比如支持XML、注解、YAML、Properties、Json配置等。


?可跟蹤


可以進行依賴分析,數據的調用統計,并能圖形、數據化將其顯示出來

可跟蹤需要解決這幾個問題:

  • 服務調用鏈路或依賴關系
  • 調用次數及時間,提供容量/機器預算基準數據
  • 預警
  • 實現上可以兼容現有成型的APM鏈路跟蹤,也是設計的考慮因素之一。


    RPC其他


    從架構的角度要考慮到設計模式的使用,比如常用的責任鏈、代理模式等。

    容器化,Kubernetes 支持等。




    RPC總結


    正如前面說的,Rpc 框架相當于電網基建,是分布式系統的基礎,如果不具備可靠、高性能、高并發、使用簡易等特點,就很難滿足日益增長的服務治理的需要。

    實現RPC調用可能比較簡單,但實現Rpc框架不僅需要深厚技術功底,也需要提供接地氣、靈活的使用方式。

    你可能也喜歡:

  • RPC框架的實現原理,及RPC架構組件詳解
  • 如何從0到1設計一個類Dubbo的RPC框架
  • 阿里P8架構師談:主流RPC框架詳解,以及與SOA、SOAP、REST的區別
  • 詳解RPC遠程調用和消息隊列MQ的區別

  • 總結

    以上是生活随笔為你收集整理的深度剖析RPC框架的核心设计的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。