Bond是一個跨平臺(目前支持Linux、OS X和Windows)的數據格式化框架,支持跨語言(C++、 C#和Python)的序列化和解序列化,與Protocol Buffers、Thrift和Avro類似。已在微軟內部用于一些大規模的服務。
Bond的主要作者是微軟主任軟件工程師Adam Sapek,來自波蘭,自2001年一直效力于微軟。之前他曾經負責設計P2P協議BitSwarm。
Sapek自己在Hacker News中透露,Bond比較引人注目的是其核心部分包括編譯器和代碼生成器是用函數式語言Haskell開發的。
根據官方文檔,Bond的特點主要是:
類型系統非常豐富,引入了繼承、類型別名和泛型。這方面與Apache Thrift比較類似。但缺乏Avro和 Protocol Buffers支持的聯合類型,這是通過可選字段的schema來表示的。
編程模型也更接近Thrift,生成原生類型,用目標語言和原生集合表示schema,但是Bond不會硬編碼類型映射,更加靈活。
協議方面,Bond支持三類:Tagged binary protocol(類似于Thrift的protocol和Protocol Buffers的wire format,用于PRC場景)、untagged protocol(類似Avro wire format,載荷是壓縮的,用于數據存儲場景)、文本協議如JSON和XML。協議是可插拔的,盡可能地通過泛型來實現,因此沒有性能開銷。 -架構上,Bond比較獨特的地方是序列化和解序列化都不是硬編碼在所生成的代碼中的基本操作,用戶可以使用元編程技術編寫分析器和變換,因此非常靈活。
Hacker News上的兩次討論:1,2
有意思的是,類似的框架除了ProtoBuf、Thrift和Avro之外,還有MessagePack、Google新推的FlatBuffers、Martin Thompson的SBE和ProtoBuf負責人Kenton Varda(Google拜Jeff Dean教也是他創立的)創業后開發的Cap'n Proto(號稱提速無限倍)。
這些項目背后的開發者實力都很強,它們之間的選擇,可成了一個課題了。之前Varda曾經寫過一篇文章比較幾個新一點的方案,可供參考。此外維基百科也有專門的條目: http://en.wikipedia.org/wiki/Comparison_of_data_serialization_formats。
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。