爲什麼 Codis 比 twemproxy 慢?
Codis 追求簡潔的實現,我們沒有針對內存進行優化,所以會比 twemproxy 還要多一倍拷貝。
Go 雖然使用 epoll,但是 IO 都不是直接完成的,而是通過 IO thread,所以需要更多的線程間通信和線程切換。
所以單 CPU 情況下, Codis 吞吐能到 twemproxy 的 1/2,redis 的 1/4,說明我的實現還是可以的。
Codis 是 Go 開發的,底層 IO 本質也是通過 epoll 實現的。Go 爲開發帶來了方便,但是所有的便利都是以犧牲性能作爲代價的。
單 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