2012-03-16 158 views
47

Thrift的主要目標是跨編程語言實現高效可靠的通信。但我認爲HTTP-RPC也可以做到這一點,web開發人員幾乎每個人都知道如何在http上工作,並且比實現HTTP更容易實現HTTP-RPC(json),爲什麼選擇Thrift,爲什麼不使用HTTP RPC(JSON + gzip)

也許Thrift-RPC更快,那麼誰可以告訴我他們之間的差異?

回答

88

比速度等幾個原因:

  1. 節儉完全生成客戶端和服務器端的代碼,其中包括要傳遞的數據結構,所以你不必應付比寫的處理程序以外的任何並調用客戶端。包括參數和返回在內的所有內容都會自動驗證並解析。所以你可以免費對你的數據進行完整性檢查。

  2. 節儉比HTTP更緊湊,並能很容易地擴展,以支持諸如加密,壓縮,非阻塞IO等

  3. 節儉可以設置爲使用HTTP和JSON很容易地,如果你希望它(如果你的客戶是說的地方在互聯網上,需要通過防火牆)

  4. 節儉支持持久連接,並且能夠避免HTTP即被連續TCP和HTTP握手。

就我個人而言,當我需要外部連接時,我使用內部LAN RPC和HTTP的節儉。

我希望這一切對你有意義。您可以閱讀介紹我給約節儉這裏:

http://www.slideshare.net/dvirsky/introduction-to-thrift

它鏈接到一些其他的替代品節儉。

+0

很好回答Dvir!如果節儉並且在大多數情況下更喜歡它,我也非常喜歡。最大的困難是安裝Thrift編譯器,但一旦完成並與適當的Maven插件結合使用,您就可以開始了。所需的緊湊型服務器/客戶端代碼非常性感! – 2012-03-16 13:32:01

+0

@JacoVanNiekerk謝謝,我編了很多次節儉似乎對我來說微不足道:)。在我看來,最大的缺點是python服務器不能很好地與節儉一起玩,因爲GIL的限制(實際上python服務器中的一個是節儉的,我試圖解決這個問題)。但對於C++或Java而言,它非常棒。 – 2012-03-16 13:39:04

+1

大多數HTTP客戶端也支持keep-alive :) – Xorlev 2013-04-19 22:37:59

5

這裏是不同的串行的性能比較好的資源:https://github.com/eishay/jvm-serializers/wiki/

VS JSON說到具體節儉:節儉性能與最佳的JSON庫(傑克遜,protostuff)和系列化規模有所回落。

IMO,最強大的節約優勢是方便的可互操作的RPC調用和方便的二進制數據處理。