kumofsに10MBのvalueを入れるとどうなるか実験してみた
kumofsは、本来小さいサイズのvalueを大量に入れることを想定した分散KVSで、高解像度の画像など、サイズの大きいvalueを入れることは想定されていない。と言うかテストされていない。
でも、実は入れてみたら案外うまく動くんじゃないか?というわけで試してみた。
結論
- データ総量30GB、物理ホスト1台で試した限りでは、実は問題は無さそう
- 物理ホスト1台というのが不十分なので微妙…
- ノードを追加したり復旧したりするとき、数時間の間、速度が半分くらいに劣化する
- データ量1TB、サーバ4台の構成で、2時間くらいかかる推定
- データの再配置がタイムアウトしてしまう可能性があるが確認できていない。3台以上の構成で追試する必要あり
- 速度は、サーバ1台につき、Get 6.7 req/sec、Set 3.8 req/sec くらい
- ほぼ線形にスケールアウトすると仮定すれば、4台投入すれば Get 26.8 req/sec、Set 15.2 req/sec
環境
実験内容
結果
通常時のSet速度
通常時のGet速度
- 結果そのまま:6.7 req/sec
再配置時間
- 結果そのまま:
- データを全件スキャンして移動するべきデータを取り出すのにかかった時間:210秒
- データの転送にかかった時間:80秒
- スループットは 1000件 / (210秒 + 80秒)= 3.44件/sec くらい
- MB/secに直すと 10MB × 1000件 / (210秒 + 80秒) = 34.4MB/sec くらい
- データの転送のスループット:10MB×1000件 / 80秒 = 125MB/sec
- MB/secに直すと 10MB × 1000件 / (210秒 + 80秒) = 34.4MB/sec くらい
- 1台構成、データ量1TBで、1TB / 34.4 = 8時間 くらい
- 4台構成、データ量1TBで、2時間 くらい
データの再配置はストリーム全体を圧縮して行っているが、今回使ったデータは全部 'v' で埋められたデータなので、圧縮率がやたら効いている。
実際にはデータの転送にもっと時間がかかるハズ…だが、実際にはHDDの方がボトルネックになっているはずなので、おそらく結果には関係ない。遅延は若干増えるはずだが、ミリ秒レベル。
再配置中のGet速度
- 結果そのまま:3.4 req/sec
- 通常時は 6.7 req/sec だったので、半分くらいに落ちている