
2026/01/14 4:56
**Dicer のオープンソース化:Databricks の自動シャーダー**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Databricks のオープンソース自動シャーダ Dicer は、データをポッドにわたって自動的にパーティション化し、低レイテンシーでスケーラブルかつ信頼性の高いサービスを提供します。
Dicer は SliceKeys を通じて論理キーを動的に割り当て、ヘルスメトリクス、ロードレベル、およびその他のシグナルに基づいてスライスを継続的に分割・結合・複製・再割り当てします。そのアーキテクチャは、Assigner(コントローラ)、Slicelet(サーバ側割り当てキャッシュ)、そして Clerk(クライアント側キー検索)の3つの主要コンポーネントで構成されています。
実際のユースケースでは以下のような効果が確認されています:
- インメモリ/GPU サービング環境において、Unity Catalog がデータベース呼び出しを 90–95 % 削減しつつ、高いキャッシュヒット率を維持。
- SQL Query Orchestration Engine は再起動時もダウンタイムゼロで稼働し、自動スケーリングを実現。
- Softstore のリモートキャッシュはノードのローリングアップデート中でも約 85 % のヒット率を維持。
Dicer は無料でダウンロード可能で、README / ユーザーガイドにサンプルコードとドキュメントが掲載されています。今後のリリースでは Java/Rust ライブラリ、より強固な一貫性保証、および拡張された状態転送機能が追加される予定で、レイテンシーのさらなる低減、稼働時間の向上、そして高性能分散システム構築におけるメンテナンス負荷の軽減が期待できます。
本文
1. お知らせ
本日、Databricks の最重要インフラコンポーネントの一つである Dicer:Databricks の自動シャーダー をオープンソース化することを発表できることに大変喜びを感じております。Dicer は低レイテンシ、スケーラブルかつ高い信頼性を備えたシャードサービス構築の基盤となるシステムであり、Databricks の主要プロダクトすべての背後に存在しています。これにより、一貫して高速なユーザー体験を提供しながら、フリート効率の向上とクラウドコストの削減が実現できます。Dicer はシャード割り当てを動的に管理することで、再起動・障害発生・ワークロード変化に直面してもサービスをレスポンシブかつレジリエントに保ちます。
Dicer の主な利用ケースは次の通りです:
- 高性能サービング
- ワークパーティショニング
- バッチングパイプライン
- データ集約
- マルチテナンシー
- ソフトリーダー選出
- AI ワークロード向け GPU 効率化
Dicer を広範なコミュニティへ公開することで、業界や学術界と協力しながら、堅牢で効率的かつ高性能な分散システム構築の最先端を推進できることを期待しています。本投稿では、Dicer の動機付けと設計哲学、Databricks での導入成功事例、そして自ら試すためのインストール・実験ガイドをご紹介します。
2. 動機:ステートレス/静的シャーディングアーキテクチャを超えて
Databricks はデータ処理、分析、AI の分野で急速に拡大する製品群を提供しています。これをスケールで支えるためには、大量の状態を扱いつつレスポンス性を維持する数百のサービスを運用しなければなりません。過去、Databricks のエンジニアは二つの代表的なアーキテクチャに頼っていましたが、サービス規模が拡大すると両者とも重大な問題を抱えるようになりました。
2.1 ステートレスアーキテクチャの隠れたコスト
ほとんどのサービスはステートレスモデルから始まりました。典型的なステートレスモデルでは、アプリケーションがリクエスト間でインメモリ状態を保持せず、毎回データベースからデータを再読み込みします。この構造は本質的に高コストです:
- ネットワークレイテンシ – すべてのリクエストでキャッシュ層へのネットワークホップが発生
- CPU オーバーヘッド – (非)シリアライズサイクルが CPU を浪費し、データをキャッシュとアプリ間で移動
- オーバーリード問題 – サービスはキャッシュから全オブジェクトまたは大きなバイオを取得するが、その一部しか使用しない
遠隔キャッシュ(Redis, Memcached)を追加するとスループットは向上しますが、これらの非効率性を解消できません。
2.2 静的シャーディングの脆弱性
Dicer 前は、シャードサービスは静的シャーディング技術(例:一貫性ハッシュ)に依存していました。これは三つの重大な問題を生み出しました:
- 再起動・オートスケーリング時の不可用 – クラスター管理者との調整が欠如し、ローリングアップデートやダイナミックスケーリング中にダウンタイムまたは性能低下
- 分裂脳と障害時のダウンタイム – 中央協調がないため、クライアントはバックエンドポッドの不整合ビューを持つ可能性
- ホットキー問題 – 静的シャーディングではロードシフトに応じてキー割り当てやレプリケーションを動的再バランスできない
2.3 シャードサービス物語の再定義
静的シャーディングの本番リスクとステートレス化のコストが対比され、重要なサービスは難しいジレンマに直面しました。ステートレス化すると大きな性能低下とクラウドコスト増を招くためです。そこで Dicer を構築し、アプリケーションヘルス・ロード・終了通知などのシグナルに基づいてシャード割り当てを継続的かつ非同期で更新するインテリジェント制御プレーンを導入しました。これにより、ローリング再起動、クラッシュ、オートスケーリングイベント、極端なロードスキュー時でもサービスは高可用性とバランスを保ちます。
3. Dicer:高性能・可用性のためのダイナミックシャーディング
3.1 概要
Dicer はアプリケーションを「論理キーに紐づくリクエスト(または作業)」としてモデル化し、サービスが常に高い可用性とロードバランスを保つよう、キーをポッドへ継続的に割り当てます。
- SliceKey – アプリケーションキーのハッシュ。連続範囲が Slice を形成
- Assignment – キースペース全体を網羅する Slice の集合で、それぞれ一つまたは複数のリソース(ポッド)に割り当てられる
Dicer はシグナルに応じてスライスを分割・統合・レプリケート・再割り当てし、健康なポッドが過負荷にならないようにすべてのキーを受け取ります。 - ホットキーは専用スライスに隔離され、複数ポッドにレプリケーション
3.2 アーキテクチャ
- Slicelet – サーバー側ライブラリで、Dicer から最新の割り当てを取得しローカルキャッシュし、リスナー API を通じてアプリへ通知。さらにキーごとのロードを集計し非同期に Dicer に報告
- Clerk – クライアント側ライブラリで、重要経路で高速なキー検索ができるようローカル割り当てキャッシュを保持
- Assigner – コントローラサービスで、ヘルスとロードシグナルに基づき割り当てを生成・配布。最小限の調整(分割・統合・レプリケーション)を実施し、キーが健康なポッドへ割り当てられつつバランスを維持
4. Dicer が恩恵をもたらすアプリケーション領域
Dicer はワークロードと特定のポッド間に親和性を生み出し、顕著な性能向上を実現します。主なカテゴリは以下の通りです:
- インメモリ・GPU サービング – キーバリューストアがサブミリ秒レイテンシを達成;LLM 推論ワークロードが GPU 間で状態フルセッションキャッシュを維持
- 制御・スケジューリングシステム – クラスター管理者やクエリオーケストレーションエンジンがタイムリーなスケール決定のためにローカル監視状態を保持
- 遠隔キャッシュ – 高性能分散キャッシュがヒット率低下なく自動スケール可能
- ワークパーティショニング・バックグラウンド作業 – ガーベジコレクタなどのサービスがポッド間でタスクを分割し重複作業を防止
- バッチングと集約 – 関連レコードを同一ポッドへルーティングし、永続化前にインメモリバッチング
- ソフトリーダー選出 – 重いコンセンサスオーバーヘッドなしでシャードごとのプライマリーコーディネータを指定
- ランデブーと協調 – リアルタイム協調が必要なクライアントを同一ポッドへルーティングし、ローカル状態同期を可能に
5. 成功事例
| サービス | 課題 | Dicer の解決策 | 結果 |
|---|---|---|---|
| Unity Catalog | ステートレス設計で高読取量が発生し、データベースアクセスの繰り返しによりレイテンシとコストが増大 | Dicer を利用したインメモリ状態フルキャッシュをシャード化;90–95 % のヒット率達成 | データベース呼び出しの劇的削減、応答性向上 |
| SQL Query Orchestration Engine | 静的シャーディングにより手動再シャーディングが必要で、再起動時に可用性低下 | Dicer のダイナミックオートシャーディング;再起動・スケーリングイベント中のゼロダウンタイム | 可用性損失を排除、CPU スロットリング削減、一貫した性能 |
| Softstore Remote Cache | ロールアウト時に状態喪失とヒット率低下が発生 | Dicer のステート転送機能でポッド間のデータ移行を実現 | 再起動中も約 85 % のヒット率維持、キャッシュ性能への影響はほぼゼロ |
6. 試してみる
Dicer をローカルにダウンロードし、単一クライアントと複数サーバーを用いた簡易デモで実験できます。詳細手順は README とユーザーガイドをご覧ください。
7. 今後の機能・記事予定
以下のような内容をさらに発表していきます:
- Java および Rust ライブラリ(クライアント/サーバー向け)
- ステート転送機能の拡張
皆様からのフィードバックは非常に貴重です。ご期待ください!
8. 参考文献
- Ziming Mao ら, Rethinking the cost of distributed caches for datacenter services, 2025.
- Atul Adya ら, Fast key‑value stores: An idea whose time has come and gone, HotOS ’19, 2019.
- Atul Adya ら, Centrifuge: Integrated Lease Management and Partitioning for Cloud Services, NSDI 2010.
- Atul Adya ら, Slicer: Auto‑Sharding for Datacenter Applications, OSDI 2016.
- Sangmin Lee ら, Shard Manager: A Generic Shard Management Framework for Geo Distributed Applications, SOSP 2021.
- Atul Adya & Jonathan Ellithorpe, Stateful services: low latency, efficiency, scalability — pick three, HPTS 2024.