spring-boot-starter-grpc 不同序列化方式效能測試及選型

spring-boot-starter-grpc 內建序列化方式說明
sofa-hessian(預設)
Github 地址: ofollow,noindex">https://github.com/alipay/sofa-hessian
基本說明: Java" target="_blank" rel="nofollow,noindex">Hessian 是一個性能較優且相容性較好的二進位制序列化協議。SOFA-Hessian 基於原生 Hessian v3.1.3 進行改進,目前已經螞蟻金服內部穩定執行多年。
優點:支援複雜的 Java 物件的序列化
缺點:
- 需要序列化/反序列化的物件必須實現
java.io.Serializable
protostuff
Github 地址: https://github.com/protostuff/protostuff
基本說明:protostuff 基於 Google protobuf,但是提供了更多的功能和更簡易的用法。其中,protostuff-runtime 實現了無需預編譯對 Java bean進行protobuf 序列化/反序列化的能力。protostuff-runtime 的侷限是序列化前需預先傳入 schema,反序列化不負責物件的建立只負責複製,因而必須提供預設建構函式。此外,protostuff 還可以按照 protobuf 的配置序列化成 json/yaml/xml 等格式。
優點:速度快,記憶體佔用少
缺點:
- 類中欄位順序需一致(不利於欄位變更)
- 空集合會被反序列化為 NULL
fastjson
Github 地址: https://github.com/alibaba/fastjson
基本說明:Fastjson 是一個 Java 庫,可用於將 Java 物件轉換為其 JSON 表示。它還可用於將JSON字串轉換為等效的Java物件。Fastjson 可以處理任意 Java 物件,包括您原始碼中的預先不存在的物件。
優點:跨語言支援方便
缺點:
- Object 物件會被反序列化為 JSONObject ,不優雅
- 佔用記憶體多
效能測試報告
測試程式碼地址: https://github.com/ChinaSilence/spring-boot-starter-grpc/tree/master/test
Gatling 官方文件地址: https://gatling.io/docs/3.0/

10萬次請求 20併發使用者

10萬次請求 50併發使用者

10萬次請求 100併發使用者
10萬次請求,耗時統計:
20 併發 | 50 併發 | 100 併發 | |
---|---|---|---|
本地呼叫 | 31s | 32s | 30s |
sofa-hessian | 58s | 65s | 65s |
proto-stuff | 57s | 63s | 58s |
fastjson | 59s | 62s | 57s |
從上述測試結果來看,不同序列化方式的耗時差距並不是很大,綜合考慮效能、可維護性、簡便性,預設使用 sofa-hessian ,如有疑問或者更優秀的方案,歡迎聯絡作者試用!