シングルノードで動作するcassandra(v2.1.8)の単純な列ファミリのCAS(比較および設定)更新のサブミリ秒レイテンシを達成しようとしています。我々は、同じマシン上の1つのスレッドから1つの読み取りと1つの書き込みCAS操作(RW)を含む一連のテストを実行し、それらのために最高で約4ミリ秒を見ます。CAS更新のCassandraサブミリ秒レイテンシ
カサンドラプロセスのプロファイルを作成すると、SEPWorkerクラスがスピンウェイトで大部分を費やしていることがわかります。実際のRW操作には時間がかかります。 SEPWorker.doWaitSpinメソッドで使用されているLockSupport.parkNanosメソッドのコードを分析し、いくつかのトレースステートメントを追加しました。平均で約12μsのスリープが予定されていても、呼び出しごとに800μs 。したがって、これは単一のSEPWorkerのタスクのスピン・ウェイトのために待ち時間に平均400μsを追加します。 CAS操作の場合、paxosはこのオーバーヘッドを複数回追加する複数のタスクを実行する必要があることに注意してください。
誰もこのオーバーヘッドを避ける方法を提案できますか?
ありがとう@Stefan計算が正しければ、待機中のオーバーヘッドは実際の作業と比較してかなり高いようです。読取りまたは書込みには約50μsかかります。したがって、非パクソス操作の場合でも、レイテンシに約10倍のオーバーヘッドが加わります。
sub-msのレイテンシは、キャッサンドラでは聞こえませんか?私は人々がそれを達成した結果を見つけることができませんでした。 –
少なくともCL ONEの場合は、サブミリ秒レイテンシを確認できるはずです。並行処理の提案された変更については、次のチケットも参照してください。https://issues.apache.org/jira/browse/CASSANDRA-10989 –
Stefanに感謝します。 CassandraがSEDAアーキテクチャから抜け出すと、スケジューリングのオーバーヘッドが減少するはずだと思う。私は純粋なnettyスレッドで作業を行うためにコードを修正することを素直に試みましたが、大きな改善が見られました。とにかく、カサンドラがこれを解決するまで、私たちはカサンドラへの呼び出しを最小限に抑えるためにデザインを変更してレイテンシを緩和しようとします。 –