spring-boot-starter-grpc 不一樣序列化方式性能測試及選型

spring-boot-starter-grpc 內置序列化方式說明

sofa-hessian(默認)java

Github 地址:https://github.com/alipay/sofa-hessiangit

基本說明:Hessian 是一個性能較優且兼容性較好的二進制序列化協議。SOFA-Hessian 基於原生 Hessian v3.1.3 進行改進,目前已經螞蟻金服內部穩定運行多年。github

優勢:支持複雜的 Java 對象的序列化面試

缺點:spring

  • 須要序列化/反序列化的對象必須實現 java.io.Serializable

protostuff編程

Github 地址:https://github.com/protostuff/protostuffjson

基本說明: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併發用戶

img

10萬次請求 50併發用戶

img

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 ,若有疑問或者更優秀的方案,歡迎聯繫做者試用!

Spring Boot 2 集成log4j2日誌框架

Java面試通關要點彙總集之核心篇參考答案

Java面試通關要點彙總集之框架篇參考答案

Spring Security 實戰乾貨:如何保護用戶密碼

Spring Boot RabbitMQ - 優先級隊列

可見性有序性,Happens-before來搞定

Java單元測試之JUnit 5快速上手

高薪必備的一些Spring Boot高級面試題

Spring Boot 2.x 中的 Actuator

下一代應用監控指標採集器Prometheus核心介紹

Spring中@Async註解實現「方法」的異步調用

學併發編程,透徹理解這三個核心是關鍵

緩存抽象層Spring cache實戰操做

簡述設計模式原則

併發Bug之源有三,請睜大眼睛看清它們

責任鏈設計模式講解

Java Web 面試中關於Spring MVC的必問題,不收藏血虧!

Micronaut 微服務中使用 Kafka

微服務網關除了zuul、spring cloud gateway還有更出色的

RSocket——Http協議的替代者

java中的數字以及如何判斷字符串是否是數字

學好Spring Security 和Apache Shiro你須要具有這些條件

原文連接:

後期更多猛料放出,關注 spring4all 公衆號關注實時動態:

本文由博客一文多發平臺 OpenWrite 發佈!

相關文章
相關標籤/搜索