LINEヤフー Tech Blog

LINEヤフー株式会社のサービスを支える、技術・開発文化を発信しています。

FractalDB: LINEヤフーのオンプレミス・マルチテナンシー型データベースシステムの紹介

こんにちは、LINEヤフー株式会社でデータベース部門に所属している、今野です。現在は、先日LINEヤフー社内にて提供を開始したFractalDBの開発と運用を担当するチームに所属しています。

FractalDBは、LINEヤフーのオンプレミス環境に向け開発された、データベースプラットフォームです。この記事では、FractalDBの概要として、開発に至った背景や設計目標から、その特徴およびアーキテクチャの概要について紹介します。

また、LINEヤフーでは今夏のインターンシップを募集しています。FractalDBチームも募集してますので、ページの最後の紹介をぜひ確認してみてください。

FractalDBとは

FractalDBは、LINEヤフーのオンプレミス環境に最適化されたデータベースプラットフォームとして開発されています。リレーショナルデータベースとNoSQLデータベースの利点を融合させた、LINEヤフー環境におけるマルチテナンシー型のDBaaS(Database as a Service)です。現在は、Apache Cassandra互換のプラットフォームとして提供を開始し、将来的にはMySQLなどのリレーショナルデータベース互換機能の提供も検討しています。

近年、パブリッククラウドで利用できるDBaaSやOSS(Open Source Software)データベースには多くの選択肢が存在します。しかし、LINEヤフーのサービスにおいては、効率性(性能・集約率)、スケーラビリティ、セキュリティ要件、経済性などの要件が求められており、既成の一部要件のみを満たすDBaaSやOSSデータベースを本格的に採用するには難しい場面があります。

また、OSSデータベースには、コミュニティの持続性の課題や、近年顕著な突発的な利用ライセンスの変更など課題もあり、OSSデータベースへの依存は、サービス継続リスク管理の対象として軽視できない状況となっています。このような背景から、LINEヤフーにおける要件を同時に満たすDBaaSの実現が、FractalDB開発の契機となりました。

技術的な環境の変化も開発を後押ししました。データベースの設計面では、Google Spannerの実証により生まれたTiDBやCockroachDBなどのSpannerクローン、またAzule DocumentDBを源流とするマルチモデル・マルチAPI対応のCosmosDBなどが登場しています。実装面では、ストレージレイヤであるRocksDBやTiKV、FoundationDBなどのOSSが台頭があります。さらに、GoやRustなどの新しいプログラミング言語の隆盛も重なり、データベースの開発における自由度や難易度の変化から、FractalDBの開発が始動しました。

FractalDBの設計目標

FractalDBは、LINEヤフーのオンプレミス環境に最適化されたDBaaSとして開発されました。その設計目標には、安全性、拡張性、互換性、効率性が含まれており、従来のリレーショナルデータベースとNoSQLデータベースの利点を融合させることを目指しています。

FractalDB 設計目標

安全性

安全性においては、利用者が直感的かつ安心・安全なサービス構築が可能になるよう設計されており、例えばデフォルトで強い整合性を提供することで弱い整合性による事故を防ぎます。

さらに、高負荷なクエリを検知して律速することでクラスターを保護する機能なども備えており、利用者に安全かつ信頼性の高い環境を提供しています。

拡張性

拡張性においては、利用者がデータベースの管理にかかる手間を削減し、よりビジネスの成長や需要の変化に柔軟に対応できるようにすることを目指しています。

利用者のスループットやデータ容量に応じてスケールアウトする高い拡張性を備えることで、利用者によるデータベースの需要予測や運用作業を低減し、よりビジネスに影響のある開発に時間を割けるよう設計されています。

効率性

効率性においては、マルチテナンシー環境による提供により、全体最適化されたより少ない計算リソースでシステム全体を運用することを目指しています。

通常のシングルテナントのデータベースでは、各インスタンスにおいて未使用となるキャパシティを、マルチテナンシーにより共有化することで、システム全体の集約率の向上を実現しています。

互換性

互換性においては、既存のCassandra(CQL)、MongoDB、MySQL(SQL)など、業界標準のデータベースAPIに対応できるよう設計されています。既存のデータベース向けの各プログラミング言語ドライバが利用できることで、新規利用者による学習コストの低減および、シームレスな移行を目的としています。

また、データベースAPIを含め、後方互換性を重視して開発・運用されており、通常のデータベース利用時に発生していたOS/DBMSのバージョンアップやハードウェアのマイグレーションなどをユーザーから隠蔽することで、利用者の負担低減を目指しています。

Cassandra互換APIの特徴

FractalDBは最初にApache Cassandra互換APIからの提供を開始しました。このCassandra互換APIは、既存のCassandraクラスターを簡単に移行できるよう設計されていて、無停止で既存のApache Cassandraクラスターのデータ移行するサービスも同時に提供しています。

FractalDBはCassandra互換のデータベースとして機能しつつ、Cassandraの弱点であった結果整合性(Eventual Consistency)の問題と、大きなパーティションを扱いづらいという問題を解決しています。FractalDBでは、強い整合性(Strong Consistency)を持つ順序付き(Ordered)キー・バリューストレージであるFoundationDBを採用しており、FoundationDBの特性によってApache Cassandraの弱点を克服しています。

FractalDB Cassandra互換APIの特徴

FractalDBのCassandra互換APIは、社内のCassandraワークロード分析を基に実装・テストされています。現在、LINEヤフーにおけるワークロードによる評価では、他のCassandra互換プロダクトと比較しても遜色ない高い互換性率を達成しています。

FractalDBのアーキテクチャ

FractalDBは、マルチモデルおよびマルチAPIに対応したデータベースプラットフォームとして設計されており、将来的には複数のデータベースAPIをサポートできるように設計されています。これは、利用者が現在稼働しているアプリケーションと同じデータベースプロトコルまたはAPIを使用できるようにするためです。

FractalDBアーキテクチャ図

また、将来の拡張性とスケーラビリティを考慮して、FractalDBはレイヤー概念に基づいて設計されています。例えば、ストレージクラスタはよりスケーラブルなものに置き換えることが可能です。ストレージクラスタは現在FoundationDBと開発用にBadgerDBに対応しており、例えばTiKVなど特性の異なるストレージに変更できるよう設計面で考慮しています。

FractalDBのストレージエンジンは、シンプルなキー・バリューストレージを基盤とし、クエリ処理、データモデル、インデックス処理を組み込んでいます。さらに任意の数のストレージクラスターをバックエンドに持てるようにすることで、高いスケーラビリティとACIDトランザクションを実現しています。

おわりに

FractalDBは、Cassandra互換APIを提供するデータベースプラットフォームとしての歩みは始まったばかりです。今回は概要の紹介に留まりましたが、FractalDBの詳細や関連する技術情報については、今後の技術ブログや公式ドキュメントを通じて提供していきます。引き続きご注目いただければ幸いです。

インターンシップ情報

今夏にLINEヤフーで開催されるインターンシップでは、FractalDBの開発フェーズを実践的に体験する機会を提供します。この記事を読んでFractalDBに興味を持たれた方は、ぜひご応募ください。

LINEヤフーでは、FractalDB以外にもさまざまなコースを用意していますので、ぜひご確認ください。