Microsoft開源跨平臺的序列化庫:Bond

jopen 9年前發布 | 10K 次閱讀 Bond

原文  http://www.infoq.com/cn/news/2015/02/MicrosoftBond


上個月Microsoft開源了 Bond ,一個跨平臺的模式化數據處理框架。Bond支持跨語言的序列化/反序列化,支持強大的泛型機制能夠對數據進行有效地處理。該框架在Microsoft公司內部的高擴展服務中得到了廣泛的應用。目前該項目已經基于寬松的MIT許可開源在了 GitHub 上,當前版本支持C++、C#和Python,可運行在Linux、OS-X和Windows平臺上。 Bond的編譯器 完全是使用 Haskell 編寫的。

Bond與其他序列化系統具有很多相似性,例如 Google Protocol BuffersThrift 以及 Avro

  • Bond使用IDL風格的語言定義消息
  • 它會將所有的Bond數據類型映射到本地語言數據類型

但是Bond的實現有一個很大的不同:它并沒有硬編碼類型映射。用戶能夠以插件的方式定制核心架構邏輯之外的內容——是從Bond模式還是從自 定義的類型序列化、有線格式是什么、是否將自定義元數據放到有效負載中等等。例如,在C++中默認是std::vector這樣的STL容器,但是用戶能 夠很容易地映射自定義的類型——在一個生成的C++結構體中使用Python的boost::multi索引容器或者在一個生成的C++類中將一個 unit64模式域映射為一個System.DateTime域。Bond生成的C++結構體還能使用自定義的分配器。

Stack Overflow上的 一個帖子 對Bond和Google Protocol Buffers做了一個非常好的比較:


優點:

  • Bond支持泛型
  • Bond有不同的類型用于表示集合:vector, map, list
  • Bond支持類型安全的惰性反序列化(bonded)
  • Bond支持多種格式(快速二進制、緊湊二進制、XML和JSON)以及封送與轉碼

缺點:

  • Bond不支持不同類型的固定、可變整數編碼。在Bond中整數如何編碼是由輸出格式(快速二進制還是緊湊二進制)決定的,但是在Protocol Buffers中整數類型始終有固定的大小:fixed32和fixed64。
  • Bond不支持union類型 (Protocol Buffers支持)
  • Bond并沒有Java實現

另外,在 這個Reddit的公告 中有很多與Bond的實現和能力相關的答案。

考慮到現在正在有越來越多的人以 微服務 的形式使用SOA,數據編組/解組的問題變得越來越重要。對于已有的序列化系統而言,Bond可以成為一個非常有用的候選方案。

</div>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!