[ GCP ] メガネと学ぶ GCP (12) Cloud SQL と Spanner の比較 ~ 共通点、差異、料金 ~

[ GCP ] メガネと学ぶ GCP (12) Cloud SQL と Spanner の比較 ~ 共通点、差異、料金 ~

こんばんは。七色メガネです。

今日は、GCPのデータベースサービスにおける Cloud SQL と Spanner について、その共通点や差異についての比較を行ってみたいと思います。

Cloud SQL と Spanner の概要については過去の記事でまとめていますので、そちらをご覧ください。

[ GCP ] メガネと学ぶ GCP (8) ストレージ・サービスの特徴を知る

 

共通点について

この2つのデータベースの主な共通点としては、次のようなものがあります。

RDBである

GCPには数多くのストレージサービス、またはデータベースサービスがありますが、従来用いられていたようなRDBの機能を純粋な意味で持ち合わせているのは、Cloud SQL と Spanner しかありません。これら以外は、NoSQL に該当するようになります。

複雑なクエリを発行できる

Spanner は、RDBとNoSQLの特徴を備えたRDBであると謳っています。本来、NoSQLではSQLクエリを発行できませんが、Spannerでは可能であるため、Cloud SQL と遜色のない操作を行うことができます。

なお、Cloud Datastore もNoSQLでありながら、簡単なSQLクエリに対応しています。ただし、Darastore の場合は結合操作などの複雑なクエリは実行不可能です。

Strong Consistecy (強整合性)

この2つのデータベースは、強整合性を持ちます。
強整合性とは、データ更新直後から常に最新のデータを取得することができることを保証する性質のことです。ただしトレードオフとして、データの更新完了までに少し時間がかかることがあります。

対の概念として、Eventual Consistecy (結果整合性) があります。これは Datastore などに見られる考え方で、データの更新後、必ずしも最新のデータが返されないという性質のことです。その代わり、データの処理が常に高速で行われます。

Cloud SQL の特徴

既存RDBのサポート

Cloud SQLでは、次の既存のRDBの機能をサポートしています。従って、運用実績という意味では Spanner に勝ります。

・MySQL

・Postgre SQL

・Microsoft SQL Server

垂直スケール

Cloud SQL は従来のRDBと同じようにスケールアップが可能であり、最大64 個のプロセッサコアと 400 GB 以上の RAM へと機能を向上させることができます。
また Read Replica を使用することで、スケールアウトも実現できます。

自動フェイルオーバー

Failover Replica 機能が備わっており、マスターインスタンスの障害時にフェイルオーバーすることで障害を回避することができます。

Spanner の特徴

大規模水平スケーリング機能

Spanner は RDB でありながらNoSQLの特徴を備えているため、水平スケールに対応しています。
つまり、RDBのようにリードレプリカ (read専用のノード)を増やすことで処理増加に対応するのではなく、read も write もどちらも行えるノードを用意することで処理増加に対応します。(Cloud SQL の場合は、writeを行えるのは基本的に1つのマスターインスタンスのみ。例外としてシャーディングは可能)

CAP定理を全て実現

基本的にCAP定理 [Consistency(整合性) / Availability(可用性) / Partion-Tolerance(分断耐性)] の全てを一度に実現することができないとされていましたが、Spanner では全てを実用レベルで実現することができている、唯一のデータベースです。

マルチリージョン対応

Cloud SQL とは異なり、単一リージョン、あるいはマルチリージョンを選択することができます。
単一リージョンを選択した場合のSLAは 99.99 、マルチリージョンを選択した場合のSLAは 99.999 です。
ただし、マルチリージョンの方が料金が高くなります。

料金体系について

Cloud SQL と Spanner に対する課金について、インスタンス(ノード)とストレージの観点からまとめます。本来はネットワークにも料金が発生しますが、今回は扱わないものとします。

インスタンス(ノード)に対する課金

Cloud SQL

CloudSQL の場合、インスタンスの性能を選択することができますので、それにより課金額が変わります。次の表は、東京リージョンにおける第二世代 Cloud SQL を使用する場合の、1時間あたりの料金表の一部です。

当然ですが性能が高いほど料金は高くなります。ここでは db-n-standard64 までしか表示していませんが、さらに性能が上の highmem 対応も存在します。

マシンタイプ 仮想 CPU 数 RAM(GB) 最大ストレージ容量 最大接続数 料金(米ドル) HA 料金(米ドル) 継続利用価格(米ドル) 継続利用価格 HA(米ドル)
db-f1-micro* 共有 0.6 3,062 GB 250 $0.0195 $0.0390 $0.0137 $0.0273
db-g1-small* 共有 1.7 3,062 GB 1,000 $0.0650 $0.1300 $0.0455 $0.0910
db-n1-standard-1 1 3.75 30,720 GB 4,000 $0.1255 $0.2509 $0.0878 $0.1756
db-n1-standard-2 2 7.5 30,720 GB 4,000 $0.2509 $0.5018 $0.1756 $0.3513
db-n1-standard-4 4 15 30,720 GB 4,000 $0.5018 $1.0036 $0.3513 $0.7025
db-n1-standard-8 8 30 30,720 GB 4,000 $1.0036 $2.0072 $0.6485 $1.4050
db-n1-standard-16 16 60 30,720 GB 4,000 $2.0079 $4.0157 $1.4055 $2.8110
db-n1-standard-32 32 120 30,720 GB 4,000 $4.0151 $8.0301 $2.8105 $5.6211
db-n1-standard-64 64 240 30,720 GB 4,000 $8.0301 $16.0602 $5.6211 $11.2421

Spanner

対してSpannerはインスタンス(ノード)の性能を指定する必要がありませんので、インスタンスに対する課金は一律です。

リージョン構成 説明 1 時間あたりのノードごとの費用
asia-northeast1 東京 $1.17
比較


つまり Cloud SQL はインスタンスの性能に対して課金が行われ、Spanner は使用するノード数によって課金が行われるため、どっちが安価であるか、という比較を行うことはできません。

が、仮に二つを並べて見るのであれば、次のような図になります。
Cloud SQL は継続利用なしで、HA 料金ではないものとします。

X 軸が Cloud SQL におけるインスタンスの性能と Spanner におけるノード数、Y 軸左が CPU 数 (Cloud SQL のみ)、Y 軸右が1時間あたりに発生する料金です。

ここから、最安価は Cloud SQL の standard 1 ~ 8 であるが、それ以上の性能であれば必ずしも Spanner よりも安いとは言えない (= Spanner でノード数を抑えた方が安く済む場合がある)ということがわかります。

データ使用量に対する料金表

次の図とグラフでは、GB / 月 に課金される料金を示したものです。データ使用量に対する課金
基本的には Spanner の方が高額であることがわかります。特に MultiRegion タイプのストレージについては、他を倍以上引き離す料金設定になっています。

料金表
Name Cloud SQL Cloud SQL Spanner Spanner
Region Tokyo Tokyo Tokyo nam-eur-asia1
Type HDD SSD Region Multi Region
Payment(GB/month) $0.117 $0.221 $0.39 $0.90

 

 

まとめ

・GCPでRDBを使いたい時には、選択肢として Cloud SQL と Spanner が挙げられる。

・Cloud SQL での読み込みは、リードレプリカを使用することで処理を分散することができる。(インスタンスを増やせば、自動的にリードレプリカとなる)
対して書き込みは、マスターインスタンスでしか行えない。したがって、書き込み性能を上げるためにはマスターインスタンスの性能を上げるしかない。

・Spanner は NoSQL 的なRDBであり、データを分散させて処理することができる。つまり、読み込み処理も、書き込み処理も、分散させて行うことができる。つまりインスタンスの性能を上げなくても、高負荷な書き込み処理に対応できる。(もちろん、分散するためのノード数は一定数必要だが)

・Cloud SQL の料金は、インスタンスの性能 + ストレージ料金 + ネットワーク料金 で算出される。

・Spanner の料金は、ノード数 + ストレージ料金 + ネットワーク料金で算出される。

・Cloud SQL と Spanner の料金を比較するとしたら、まずストレージに関しては Cloud SQL の方が間違いなく安いと言える。しかし書き込み能力に関しては、インスタンスの性能とノード数の比較になるため一概にどちらが安いとは言えない。

参考

料金計算

https://cloud.google.com/products/calculator/?hl=ja#id=7d9a6e3a-edde-4a45-a355-bfb0b845951e

Cloud SQL について

https://cloud.google.com/sql/pricing?hl=ja#2nd-gen-pricing

Spanner について

https://cloud.google.com/spanner/pricing?hl=ja

おすすめ書籍

Google Cloud Platform エンタープライズ設計ガイド

Google Cloud Platform 実践Webアプリ開発 ストーリーで学ぶGoogle App Engine

プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで

GoogleCloudPlatformカテゴリの最新記事