2012-03-20 78 views
5

我目前使用CassandraSharp 3個節點對Cassandra進行基準測試。 我主要關注的是比吞吐量更延遲,所以有點GC調整後這裏是我的號碼(100個000K插入,單絲):如何在Cassandra中獲得可靠的插入時間?

  • Iter項目/秒:1600
  • 平均:600μs
  • 95分:600μs
  • 99分:5000μs
  • 最高:50個000μs

我在這裏的問題是,一旦在一段時間,我得到一個 「壞」 晚ncy(50ms),我的目標是具有一致的延遲,即使以更高的平均值爲代價。

我相信這是由GC引起的,我想知道是否可以避免。

(作爲一個方面說明,這是一個好的做法,以插入的大量發送到一個節點,讓它辦理或者我應該「負載均衡」,它在客戶端?)

+0

你可以告訴我們你是如何調諧GC的? Thx – odiszapc 2013-05-04 14:30:41

回答

2

對於年輕一代的垃圾收集,50ms是在正常範圍內。您可以在cassandra-env.sh中啓用GC日誌記錄,方法是取消註釋底部的相應行,以驗證是否存在問題。

(刷新不會阻止刀片,除非你的磁盤這麼慢呢不能插入量,因爲沖洗的順序I/O這是不尋常跟上。)

如果年輕一代收藏品的確有相關較高的延遲時間,您可以減少嘗試使年輕一代更小(也在cassandra-env.sh中配置),以交易吞吐量的潛在交易延遲爲代價。

+0

我已經通過了GC優化階段,並有一個最小的年輕一代空間來加速GC時間。 所以我想它不會比這更好:/ – alprema 2012-03-21 09:46:19

1

我不我認爲你可以一次性擺脫糟糕的延遲問題。它最有可能是你提到的GC,或者它是從Memtables執行到磁盤的刷新。

50ms的插入是否真的有問題? Cassandra支持批處理增變器,允許您將插入操作放入一個長增變器中,然後在稍後執行批處理插入操作,以便您的主線程不需要被同步插入器阻塞,這可能需要更長的時間預期。我沒有使用過CassandarSharp,所以不知道它是否公開了這個功能。

此外,cassandra節點間的負載均衡會稍微改善您的導入時間,但請記住,幕後發生的情況是,您提供導入的節點會將其交給正確的節點以執行存儲(所以你給它的節點真的是一個代理),所以我不會想象在一般邊緣情況下有很大的改進。如果由於某種原因該節點開始做其他事情並且其性能受到影響,它將對您有所幫助。

0

如果您對可靠的插入時間感興趣,您可能需要查看Cassandra的Acunu發行版,它可以在插入時提供100倍更穩定的延遲:Cassandra under Heavy Write Load(特別注意第二張圖片)。

+0

請注意,在Cassandra 1.0中引入了用於memtables的競技場分配,這一基準已經過時,這消除了在這裏看到的停止世界老一代gc暫停的情況。 (詳細信息:https://issues.apache。org/jira/browse/CASSANDRA-2252) – jbellis 2012-03-21 00:00:31