YugabyteDBのドキュメントを全部読む Day3
前回からつづいてYugabyteDBのドキュメントを読んでいきます。
前回はArchitecture > Key Concepts > Universeを読みました。 今回はArchitecture > Key Concepts > YB-TServer serviceを読みます。
ドキュメントのバージョンは最新のv2.19 previewです。 また画像は同ドキュメントより引用しています。
それはそれとして技術系の単語をカタカナ表記で誤魔化していて、体系的に学んでいないことがバレてしまう。特にストレージまわりが分からない……
YB-TServer service
YB-TServer(YugabyteDB Tablet Servcer)はユーザからの受けつけたYugabyteDBクラスタへのリクエストのI/Oの 処理をする。
テーブルのデータは一つ以上のTablet peerに分割(シャーディング)される。peerの数はレプリケーションファクターによって決定される。
YB-TServerは一つ以上のTablet peerをホストする。
Tablet peerはRaftグループを形成してグループ間でデータの複製を行ない、タブレットはYB-TServer上で最大の効率になるように管理される。
Server-global block cache
ブロックキャッシュは一つTB-TServer上の異なるタブレット間で共有される。
YB-TServerのメモリ効率は一つのテーブルからの読み込みが多いほど最適化される。
Space Amplification
YugabyteDBではSize-tired Compactionというライトアンプリフィケーション1が小さい圧縮方式を利用している。
Size-tired Compactionはスペースアンプリフィケーション2が大きいという問題があるが、 YugabyteDBではテーブルは複数のタブレットに分割され、タブレット間でのConcurrent Compactionは特定の最大値まで絞られるため問題になりにくい。
YugabyteDBでは凡そ10-20%のスペースアンプリフィケーションにおさまる。
つまりSize-tired Compaction一単位が扱うデータ量を小さく(タブレット化)して、 同時に実行される圧縮処理数を絞ることで特定のタイミングで圧縮に使用されるストレージ容量を抑えているということ?
Throttled compactions
YB-TServerではタブレット間で実行される圧縮処理の同時実行数を制限することで、圧縮処理が多量のリソースを占有することを防いでいる。
この機能は圧縮されるファイル同士のサイズを比べ、実行される圧縮処理が妥当であることを確認することで実現されている。
Small and large compaction queues
YB-TServerでは圧縮処理を大きい圧縮処理と小さい圧縮処理に分けて優先度を決めることで、I/Oが大きな場合でもシステムの機能を保っている。
YugabyteDBでは圧縮処理数を制限することに加え、様々な最適化を実行することで圧縮処理の影響を最小化している。
Manual compaction
YugabyteDBではyb-admin utilityのcompact_table
コマンドにより、
任意のタイミングでテーブルに対して圧縮を実行することが出来る。
この方法はデータが新しく書き込まれない場合や、DDLやTTLの超過によるデータ削除時によりデータが断片化したときに有効である。
Statistics-based full compactions to improve read performance
YugabyteDBでは読み込まれたkey-valueペアをDocDBレベルで監視している。監視対象となる時間軸はauto-compact-stat-window-seconds
で管理されている。
YugabyteDBがデータ読み込み時に多量の廃棄されたデータのスキップを検知した場合、full compactionがトリガーされ不要なキーの削除が行なわれる。
Full compactionがトリガーされる詳細な条件は対象の時間軸で以下が満された時である。
- 廃棄されたキーとアクティブなキーが読まれる割り合いが
auto-compact-percent-obsolete
で定義された閾値を超たとき。 - 廃棄されたキーの読み込み
auto-compact-min-obsolete-keys-found
で定義された閾値を超たとき。
この機能はTTLを設定したテーブルと互換性があり、TTL file expirationが有効なテーブルではスケジュールされた圧縮を実行しない。
Scheduled full compactions
YugabyteDBでは全てのデータに対するデータ圧縮をスケジュール実行することが出来る。
スケジュール実行はscheduled-full-compaction-frequency-hours
と
scheduled-full-compaction-jitter-factor-percentage
のフラグで管理される。
この機能は大量のDELETE
とUPDATE
を定常的に実行するワークロードでのパフォーマンスとディスクスペースの再割り当てに有効である。
スケジュール化したデータ圧縮はTTLと互換しているが、TTL file expirationとは互換していない。 つまりスケジュールされた圧縮は実行されない。
Server-global memstore limit
Server-global memstore limitは一つのYB-TServer上のタブレット間でシェアされるメモリサイズを追跡し、強制する。
この機能はタブレット間の書き込みに偏りがある場合に有効である。
一つのテーブルに書き込みが集中しているばあい、メモリ制限以上のメモリを割り当てることでパフォーマンスを向上させることが出来る。
Auto-sizing of block cache and memstore
Block Cacheとmemstoreは何れも多量のメモリを使用している。
これらはtablet-peer間で共有されるリソースのため、メモリ管理とこれらのコンポーネントの様々な環境に合せたサイジングを容易にしている。
YB-TServerでは自動で特定の割合のメモリをBlock CacheとMemstoreに割り当てる。
Distributing tablet load uniformly across data disks
複数のSSDを利用するハードウェアでは、テーブルのデータ(SSTable)とWALはテーブル毎に利用可能なディスクに均等に分散される。 このストライピングと呼ばれる負荷分散は、それぞれのディスクがそれぞれのテーブルの負荷を均等に処理することを保証する。