1. 程式人生 > >微服務框架surging學習之路——序列化

微服務框架surging學習之路——序列化

成員 cor 傳輸 pack bubuko href 框架 跨語言 html

原文:微服務框架surging學習之路——序列化

1.對微服務的理解

  之前看到在群裏的朋友門都在討論微服務,看到他們的討論,我也有了一些自己的理解,所謂微服務就是系統裏的每個服務都 可以自由組合。自由組合這個就很厲害了,這樣一來,每個服務與服務之間基本的物理 耦合為0,橫向擴展整個系統就會非常非常靈活。

surging的厲害之處也恰恰是可以做到這些,所以surging 是.net core 裏面一個非常不錯的微服務框架。

2.surging的序列化方式

2.1 json.Net

surging 使用的是Newtonsoft.Json, 它是基於json格式的序列化和反序列化的組件

json.net 有以下優點:

侵入性:可以不添加attribute,就能進行序列化操作

靈活性:可以靈活性配置,比如允許被序列化的成員自定義名字,屏蔽的非序列化屬性成員

可讀性: 數據格式比較簡單, 易於讀寫

依賴性:可以序列化成JObject,無需依賴對象進行序列化和泛型化。

2.2 protobuf

surging 使用的是protobuf-net, 它是基於二進制格式的序列化和反序列化的組件

protobuf 有以下優點:

  性能高 : 序列化後體積相比Json和XML很小,適合RPC二進制傳輸
   跨語言:支持跨平臺多語言
兼容性:消息格式升級和兼容性還不錯
速度快 :序列化反序列化速度很快,快於Json的處理速度

2.3 messagepack

messagepack:surging 使用的是MessagePack-CSharp, 它是基於二進制格式的序列化和反序列化的組件

messagepack有以下優點:

  性能高:序列化後體積相比Json和XML很小,適合RPC二進制傳輸
   跨語言:支持跨平臺多語言
兼容性:消息格式升級和兼容性還不錯
速度快 :序列化反序列化速度很快,快於Json的處理速度

針對於protobuf和messagepack都是基於二進制格式的序列化和反序列化,優點都一樣,但是基於messagepack的MessagePack-CSharp組件侵入性更小,可以不需要加attribute,而且性能上更優.

3.每種序列化組件的性能對比

一張圖就可以說明問題

技術分享圖片

通過上圖,可以發現messagepack不管是小數據量還是大數據量都保持比較穩定的性能

微服務框架surging學習之路——序列化