爲什麼Codis比較慢,但我們還要用它呢?

  1. 爲什麼 Codis 比 twemproxy 慢?

  • Codis 追求簡潔的實現,我們沒有針對內存進行優化,所以會比 twemproxy 還要多一倍拷貝。

  • Go 雖然使用 epoll,但是 IO 都不是直接完成的,而是通過 IO thread,所以需要更多的線程間通信和線程切換。

  • 所以單 CPU 情況下, Codis 吞吐能到 twemproxy 的 1/2,redis 的 1/4,說明我的實現還是可以的。

  • Codis 是 Go 開發的,底層 IO 本質也是通過 epoll 實現的。Go 爲開發帶來了方便,但是所有的便利都是以犧牲性能作爲代價的。

那需要 Codis 有什麼用?
  • 單 twemproxy:方便調整,性能不行

  • 多 twemproxy:調整需要技巧,可能需要停止服,看具體業務需求,無論如何都很痛苦。

  • Codis?

  • 適當的 CPU 就可以獲得比 twemproxy 更好的性能和可靠性,同時具備橫向擴展的能力

  • 可動態調整。這一點就足夠了。

  • 對 redis 集羣而言,CPU 和 內存,哪個更貴?而且通常 redis 集羣 CPU 都是空閒的

  • 如果你的業務需要 10G:沒必要用 twemproxy 或者 Codis,影響心情,給自己添麻煩。

  • 如果你的業務需要 400G:你可以選擇 單/多 twemproxy + 多 redis,畢竟在相同吞吐下,twemproxy 比 codis 有更好地 CPU 利用率。

  • 但是一旦你的業務需要遷移數據,比如機器上下線,容量調整,怎麼辦?


轉載自https://github.com/CodisLabs/codis/issues/309

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章