Microsoft發布了他們自己對Apache Avro通信協議的實現。Avro被描述為“緊湊的二進制數據序列化格式,類似于Thrift或者Protocol Buffers”,同時還有像Hadoop這樣的分布式處理環境所需要的額外功能。
為了讓該協議盡可能地快,Microsoft Avro類庫會在運行時使用表達式樹構建并編譯一個自定義的序列化器。在第一次命中將序列化器編譯成IL代碼之后,它的性能要比基于反射的算法更好。
和Protocol Buffers不同的是,Avro協議是自描述的。當客戶端和服務器之間建立連接的時候,模式就會被傳送。通常情況下模式僅會被傳輸一次,因此沒必要硬編碼二進制格式,也沒有在每個消息里面傳遞模式的代價。
由于以上種種原因,Microsoft Avro類庫能支持下面三種模式:
- 反射模式。基于.NET類型的模式構建序列化器的IL代碼以便于實現性能最大化。
- 通用記錄模式。可以在運行時指定數據的JSON模式,因此能夠處理任意模式的動態數據。
- 容器模式。類庫能夠生成嵌入了模式的可移植文件。文件格式與Avro容器文件規范兼容,同時能夠跨平臺使用。
在反射模式下使用的時候,Avro使用WCF開發者所熟悉的DataContract/DataMemeber屬性。
通用記錄模式會假定你并沒有一個預定義的.NET類用來存儲數據。相反地,你使用AvroRecord類連同一個描述數據格式的JSON文檔。AvroRecord對象需要使用后期綁定模式訪問(C# dynamic、關閉VB Option Strict)。
容器模式可以連同反射模式或者通用記錄模式一起使用。因為你是以這種模式創建文件而不是通過可以對數據進行壓縮和/或加密(使用你喜歡的任意方式)的線路發送消息。開箱即用并不會讓你感受到壓力或者抑制,但是它僅包含構建代碼解碼器的指令。
示例代碼: http://code.msdn.microsoft.com/Serialize-data-with-the-86055923
查看英文原文:Introducing Microsoft Avro
文章列表