董的博客中thrift相關基礎的介紹:http://dongxicheng.org/search-engine/thrift-rpc/html
thrift碰到大list時瓶頸的緣由:數據結構
由於thrift協議中server和client的交互使用的是序列化的數據。當你使用thrift --gen cpp **.thrift 產生一個符合你使用場景的數據結構時,該數據結構都會對應了thrift中的相應的序列化的結構來序列化它。對於list類型數據結構的序列化thrift分三部:函數
體如今write_virt函數的調用上,第一次寫入1,第二次寫入2,第三次8。若是你的list數據長度爲一千多萬,那麼每一個都對應了一個write_virt,每一個write_virt都有響應的memcpy操做,這個是很耗時的。ui
解決方案:server
把list這種結構的數據進行序列化,使用thrift傳輸binary類型的數據,這樣即可以解決thrift序列化list慢的問題。由於thrift對binary類型的數據序列化使用的是整塊拷貝,不像list是分塊拷貝。htm
其中將list序列化的部分我使用的是boost的序列化方式。blog
有關數據序列化的問題我使用的是boost的序列化方式rpc
boost序列化使用方面比較不錯的文章:博客
IBM講解序列化的方法:http://www.ibm.com/developerworks/cn/aix/library/au-boostserialization/it
一個使用二進制序列化的實例:http://www.cppblog.com/liquidx/archive/2009/06/18/88007.html
轉載請註明做者:xidianwlc