文章出處

上個月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可以成為一個非常有用的候選方案。


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()