MENU

Cassandra — Facebook発、無停止運用を支える分散NoSQL

Cassandra アイキャッチ
Cassandra

Apache Cassandraは、2008年にFacebookがInbox検索のために内製し、その後Apacheへ寄贈した分散型NoSQLデータベースです。Amazon Dynamoの分散モデルとGoogle Bigtableのデータモデルを掛け合わせた設計が特徴で、ノードを足すほど書き込み性能が線形に伸びる「スケールアウト前提」の思想で知られます。Netflix、Apple、Instagramといった巨大サービスが採用しており、本記事ではその核となる仕組みと運用上の癖を整理します。

目次

この記事の目次

  1. Cassandraを特徴づける三本柱
  2. Facebookから巣立つまでの歩み
  3. 得意なワークロードと使い所
  4. 他のNoSQLとの立ち位置
  5. まとめ

Cassandraを特徴づける三本柱

Cassandraを特徴づける三本柱

Cassandra最大の特徴は、特定のマスタを持たないリング型クラスタです。全ノードが対等で、どのノードでも読み書きを受け付けられるため、単一障害点が原理的に存在しません。リング上のハッシュ範囲を各ノードが分担し、レプリカは隣接ノードへ複製されます。Netflixが2011年にOracleから移行を進めた背景には、この「夜中に呼び出されないDB」という運用面の魅力がありました。

CAP定理でいえば、Cassandraは可用性とパーティション耐性を取り、強い整合性は捨てる設計です。ただしクライアントごとに ONE/QUORUM/ALL といった整合性レベルを選べるため、金額計算では QUORUM、閲覧履歴では ONE、というふうに用途ごとに調整できます。「いつでも書き込めて、後から揃える」という考え方が肌に合うシステムで真価を発揮します。

Facebookから巣立つまでの歩み

Facebookから巣立つまでの歩み

誕生は2008年、Facebookのアヴィナシュ・ラクシュマンとプラシャント・マリックの手によるものです。Inbox検索で日々増え続けるメッセージを捌くため、Dynamoの分散と Bigtable のカラム指向を組み合わせる発想が採られました。翌2009年にはApache Incubatorに寄贈され、2010年にトップレベルプロジェクトへ昇格しています。

商用面では2010年設立のDataStaxがエンタープライズ版とサポートを提供し、Cassandraの普及を後押ししました。近年は2021年公開の4.0でJava 11対応とテスト基盤刷新、2023年の4.1でACID寄りのトランザクション機能(Accord)への布石が打たれ、「結果整合のNoSQL」というイメージを少しずつ更新しつつあります。

得意なワークロードと使い所

得意なワークロードと使い所

Cassandraが輝くのは「書き込みが多く、行単位での参照が中心」のワークロードです。LSMツリーをベースにしたストレージは追記中心のためランダム書き込みに強く、Apple社内では数万台規模のクラスタで日々膨大なイベントを受け止めていると公表されています。Discordが2017年に数十億件のメッセージをCassandraに移し、2022年にScyllaDBへ再移行した話も知られています。

一方で、結合(JOIN)や集計を多用する分析系には向きません。クエリの形に合わせてテーブルを設計する「クエリドリブンモデリング」が前提のため、RDB感覚で正規化を進めると性能が出ない、というのが初学者が最初にぶつかる壁です。事後集計や分析にはSparkやPresto、Trinoとの連携が定番になっています。

他のNoSQLとの立ち位置

他のNoSQLとの立ち位置

比較されやすいのはAWSのDynamoDBですが、Cassandraはオンプレでも自由に走らせられる点が決定的に違います。マルチクラウドや自社データセンターを跨いだレプリケーションを組みたい場合、選択肢は実質Cassandra一択になりがちです。ScyllaDBはCassandra互換のままC++でリライトした製品で、レイテンシをさらに削りたい現場で採用が進んでいます。

MongoDBやCouchbaseのようなドキュメント志向DBとは、データモデルがそもそも別物です。Cassandraはワイドカラム(行×可変列)であり、CQL(Cassandra Query Language)というSQL風DSLでアクセスします。RDBからの乗り換えを検討するなら、PostgreSQLやMySQLでまかなえる規模なのか、本当に分散が要るのかを先に見極めることが、後悔しない選定の出発点になります。

まとめ

Cassandraは「書き込みが止まらず、ノードを足せば応えてくれる」運用感が魅力の分散NoSQLです。結合や強整合を捨ててでも可用性を取りたい巨大サービスの心臓部として、いまも現役で動き続けています。

※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次