より良いアプリの構築のセッションで、Anant Pingle氏とNaïm Achahboun氏がDatabricks上でのアプリ設計に共通する原則と実践を解説した。エージェント型、解析型、トランザクション型など用途は多様だが、共通の基盤を正しく設計することで堅牢で高性能なアプリを実現できる。
※サイトの更新により、リンクが無効になる可能性があります。
― エーピーコミュニケーションズ GDAI部 Lakehouse
共通の課題
開発現場でよく見られる課題は次の通りだ。データエンジンの選定ミスはパフォーマンスやコストに直結する。認証・識別管理をサービスプリンシパルへ安易に集約すると、誰がいつどのデータにアクセスしたかの監査性が損なわれる。Unity Catalogのきめ細かな権限設定を適切に活用することが重要だ。Unity Catalogの権限設計ガイドも参照するとよい。
また、AIエージェントによるコード生成はプロトタイピングを加速する一方で、本番で求められる堅牢性やセキュリティ要件を自動で満たすわけではない。性能問題に直面した際に原因を特定せずに単にコンピュートを増やすと、無駄なコストが発生する。
アーキテクチャの基本原則
Databricksでの設計は、接続性・識別・エージェント実装・性能対策の4点に集約できる。
- 接続性:クエリ特性に応じてエンジンを使い分ける。低遅延のポイントルックアップやセッション管理にはOLTP向けのサービスを、集計や大規模スキャンにはDBSQLやLakehouseのOLAP機能を検討する(OLTPの説明はDatabricksのOLTPドキュメント、OLAPの概念はOLAP解説を参照)。
- 識別:ユーザー固有の権限を尊重するため、可能な限りユーザー権限での実行(OBO(On-Behalf-Of)など)を採る設計が推奨される。サービスプリンシパルはバックグラウンド処理やシステムタスクに限定するとよい。
- エージェント実装:プラットフォーム上のモデルやゲートウェイを活用するパターンが紹介された。外部LLMを使う場合は、AI Gateway経由でガードレールやオブザーバビリティを確保し、資格情報はUnity CatalogのConnectionなどで集中管理する。
- 性能対策:非同期I/O、接続プール、並列クエリ、キャッシュ戦略などを組み合わせて応答性を改善する。スケーリングはボトルネック特定→垂直スケール優先→必要に応じ水平スケールの順が一般的だ。
技術的要点
LakeBaseや同種の低遅延ストレージは、UIの応答性が重要なユースケースに向くと紹介された。一方、DBSQL/Lakehouseは集計や複雑な分析に強い。DBSQLとOLTPデータの組み合わせでリアルタイムと履歴分析を融合する設計は効果的だが、実装時はデータ整合性とクエリ形状を慎重に設計する必要がある。
セキュリティ面では、ユーザーのIDでクエリを実行できる設計により、行レベルセキュリティや列マスキングが期待通りに機能し、監査の精度が高まる。エージェント開発では、開発用ライブラリやUIキットを活用するとボイラープレートを減らせるとの指摘があった。外部資格情報の一元管理やAI Gateway経由でのアクセス制御は、運用上のメリットが大きい。
I/Oバウンドなアプリでは、Pythonの非同期処理や接続プール、ブラウザやアプリ側のローカルキャッシュを組み合わせることで単一ワーカーあたりのスループットを向上できる。静的ファイルはアプリ側にキャッシュしてネットワーク呼び出しを減らすと効果的だ。
実例と効果
紹介されたフライトトラッカーのような例では、ストリーミングでのリアルタイム処理、低遅延トランザクション層、履歴分析層を組み合わせることで複雑なユースケースを実現している。エージェントやカスタムUIを統合すると、ユーザーが直感的に高度な分析結果へアクセスできるようになる。
まとめと推奨事項
要点をまとめると次の通りだ。まずクエリ形状に合ったエンジン選定を行い、ユーザー権限を尊重する設計を優先する。エージェントはアプリの一部として安全に組み込み、外部サービスの資格情報は中央で管理する。性能問題は必ずプロファイリングで特定してから対策を行う。これらを徹底することで、堅牢で安全かつ応答性の高いDatabricksアプリを構築できる。
参考リンク:DatabricksのAIエージェント解説、OLTPドキュメント、Unity Catalogの権限設計、DBSQLのプロファイル解説、Genie紹介。


