天天看點

dubbo

soa架構

soa (service-oriented architecture),即⾯向服務的架構。其思想就是根據實際業務,把系統拆分成

合适的、獨⽴部署的子產品,子產品之間互相獨⽴(通過webservice/dubbo等技術進⾏通信)。是以衍⽣

出了⼀系列相應的技術,如對服務提供、服務調⽤、連接配接處理、通信協定、序列化⽅式、服務發現、服

務路由、⽇志輸出等⾏為進⾏封裝的服務架構。

dubbo
dubbo
dubbo
dubbo
dubbo

⼀次服務調⽤過程:

dubbo
dubbo
dubbo

完整的rpc架構圖

在⼀個典型 rpc 的使⽤場景中,包含了服務發現、負載、容錯、⽹絡傳輸、序列化等元件,其

中“rpc 協定”就指明了程式如何進⾏⽹絡傳輸和序列化。

dubbo
dubbo
dubbo
dubbo
dubbo

序列化和反序列化

用戶端怎麼把參數值傳給遠端的函數呢?

在本地調⽤中,我們隻需要把參數壓到棧⾥,然後讓函數⾃⼰去棧⾥讀就⾏。

但是在遠端過程調⽤時,用戶端跟服務端是不同的程序,不能通過記憶體來傳遞參數。

這時候就需要用戶端把參數先轉成⼀個位元組流,傳給服務端後,再把位元組流轉成⾃⼰能讀取的格式。

隻有⼆進制資料才能在⽹絡中傳輸,序列化和反序列化的定義是:

将對象轉換成⼆進制流的過程叫做序列化

将⼆進制流轉換成對象的過程叫做反序列化

這個過程叫序列化和反序列化。同理,從服務端傳回的值也需要序列化反序列化的過程。常⻅的序列化⽅式有:

hessian 是動态類型、⼆進制、緊湊的,并且可跨語⾔移植的⼀種序列化架構。hessian 協定要⽐

jdk、json 更加緊湊,性能上要⽐ jdk、json 序列化⾼效很多,⽽且⽣成的位元組數也更⼩。

protobuf 是 google 公司内部的混合語⾔資料标準,是⼀種輕便、⾼效的結構化資料存儲格式,

可以⽤于結構化資料序列化,⽀持 java、python、c++、go 等語⾔。序列化後體積相⽐ json、

hessian ⼩很多;

thrift是facebook開源提供的⼀個⾼性能,輕量級rpc服務架構,其産⽣正是為了滿⾜目前⼤資料

量、分布式、跨語⾔、跨平台資料通訊的需求。

⽹絡傳輸

⽹絡傳輸:遠端調⽤往往⽤在⽹絡上,用戶端和服務端是通過⽹絡連接配接的。

所有的資料都需要通過⽹絡傳輸,是以就需要有⼀個⽹絡傳輸層。⽹絡傳輸層需要把 call id 和序列化

後的參數位元組流傳給服務端,然後再把序列化後的調⽤結果傳回用戶端。

隻要能完成這兩者的,都可以作為傳輸層使⽤。是以,它所使⽤的協定其實是不限的,能完成傳輸就

⾏。 ⼤部分 rpc 架構都使⽤ tcp 協定,但其實 udp 也可以。

tcp 的連接配接是最常⻅的,簡要分析基于 tcp 的連接配接:通常 tcp 連接配接可以是按需連接配接(需要調⽤的時候就

先建⽴連接配接,調⽤結束後就⽴⻢斷掉),也可以是⻓連接配接(用戶端和伺服器建⽴起連接配接之後保持⻓期持

有,不管此時有⽆資料包的發送,可以配合⼼跳檢測機制定期檢測建⽴的連接配接是否存活有效),多個遠端

過程調⽤共享同⼀個連接配接。

是以,要實作⼀個 rpc 架構,隻需要把以下三點實作了就基本完成了:

call id 映射:可以直接使⽤函數字元串,也可以使⽤整數 id。映射表⼀般就是⼀個哈希表。

序列化反序列化:可以⾃⼰寫,也可以使⽤ protobuf 或者 flatbuffers 之類的。

⽹絡傳輸庫:可以⾃⼰寫 socket,或者⽤ asio,zeromq,netty 之類。

dubbo
dubbo
dubbo
dubbo
dubbo
dubbo

springboot和dubbo整合 的⼏種⽅式:

xml⽅式

1. 配置dobbo-provider.ml

注解⽅式

1. dubboproviderconfig

常⽤配置

dubbo

不同粒度配置的覆寫關系

-- ⽅法級優先,接⼝級次之,全局配置再次之。

-- 如果級别⼀樣,則消費⽅優先,提供⽅次之

dubbo
dubbo
dubbo
dubbo
dubbo
dubbo
dubbo
dubbo
dubbo
dubbo
dubbo
dubbo
dubbo
dubbo
dubbo
dubbo
dubbo
dubbo

繼續閱讀