序列化協議升級指南

無損升級序列化協議的最佳實務

在 3.1.0 版本中,Dubbo 預設支援的序列化協議新增了 Fastjson2 的支援。部分使用者可能會考慮在現有系統中升級序列化協議,但伺服器與客戶端版本差異可能導致客戶端不支援伺服器的序列化協議。在 3.2.0 版本中,Dubbo 的伺服器引入了一個新的配置 `prefer-serialization`,可以完美解決伺服器端序列化升級過程中可能存在的風險。

最佳實務

序列化協議升級需要分兩步進行

  • **首先,需要推進伺服器的序列化協議升級,同時需要在伺服器的暴露配置中新增 `prefer-serialization` 配置。例如:升級前的序列化協議為 hessian2,升級後的序列化協議為 Fastjson2,則應在伺服器的暴露配置中新增如下所示的配置**
dubbo.provider.prefer-serialization=fastjson2,hessian2
dubbo.provider.serialization=hessian2
  • 其次,需要將客戶端升級到與伺服器相同的版本

實作原理

dubbo 客戶端序列化協議是根據伺服器的註冊配置(即伺服器的 `serialization` 配置)選擇的。在請求階段,dubbo 會將客戶端的序列化協議組裝到請求標頭中,伺服器在進行反序列化時會根據請求標頭判斷反序列化協議。

  • **如果伺服器和用戶端的版本不一致,用戶端可能無法序列化。** 為了應對這種情況,3.2.0 版本在序列化用戶端時會優先使用 prefer-serialization 配置的協議。如果 prefer-serialization 相關的協議不被支援,則會使用 serialization 配置的協議。(您可以將 serialization 視為由下而上的配置)

最後修改日期:2023 年 1 月 2 日:增強英文文件 (#1798) (95a9f4f6c1c)