Google Cloud Platform Japan Blog
最新情報や使い方、チュートリアル、国内外の事例やイベントについてお伝えします。
Cloud Spanner と CAP 定理
2017年2月24日金曜日
グローバルに分散化されたデータを扱い、データの一貫性を維持しながら高可用性をも実現するシステムを構築しようとしたら、それは簡単なことではありません。クラウドの良いところは、誰かがそれを構築して、誰にでも使えるようにしてくれることです。
CAP 定理
によると、データベースは以下の 3 つの望まれる特性のうち、2 つまでしか持てないとあります。
C(Consistency): 一貫性、共有されているデータが唯一の値を持つ
A(Availability): 可用性、読み込みと書き込みの両方で 100% の可用性が確保されている
P(Partition Tolerance): 分断耐性、ネットワークの分断に対する耐性がある
ここから導かれるシステムは 3 種類で、除く文字に応じて CA、CP、AP となります。これは、システムの設計者に 3 つから 2 つを選ぶことを強いるものではなく、実際多くのシステムはこれらのうち 1 つの特性しか持っていないか、あるいはどの特性も持っていません。
ワイド エリアにわたる広域の分散システムでは、あたり前のことだとは言えないものの、一般的に分断が起きることは避けられないと見られています。では、分断が避けられないとするなら、一貫性を犠牲にするか(AP)、可用性を犠牲にするか(CP)選ばなければならないのかと言うと、それも誰も望まない選択です。
CAP 定理の意図は本来、設計者にこのトレードオフを真剣に考えてもらうことにありました。ですが、ここでは 2 つの注意すべきことを挙げます。第 1 に、一貫性や可用性を犠牲にしなければならないのは、実際に分断が起こっている間だけで、その間であっても、それを緩和する方法は多くあるということ。第 2 に、定理には 100% の可用性とありますが、そこで議論すべきなのは、現実的な高可用性の実現に伴うトレードオフについてです。
Spanner が Google Cloud へ
Google Cloud Platform
(GCP)で利用できる
Cloud Spanner
は、Google のグローバルな高可用性 SQL データベースです。データのサイズ、トランザクション量の両面からも、大規模にレプリケーションされたデータを管理します。そこで書き込まれる全てのデータにはグローバルに一貫したタイムスタンプが付与され、クライアントはロックすることなくデータベース全体からデータをグローバルに一貫して読み込むことができます。
Spanner はワイド エリアで扱えるものでありながら、一貫性と高可用性を両立するとありますが、CAP の観点から見ると、多くの人が意外に、あるいは疑わしいとさえ思うでしょう。これは議論すべき題材です。はたして Spanner は CAP で定義されているような CA システムなのだろうかと。端的に答えると、技術的には違いますが、実際のところ CA システムだと考えて構いません。
違うというのは、ネットワークの分断が発生したときで、実際に Google で起こりました。分断が起きると Spanner は C を選択し、A を犠牲にします。つまり技術的に見ると、Spanner は CP システムなのです。
それでも 100% の可用性を実現するシステムはないことから、結局のところ障害が起きることを考えなくてもいいほどの高い可用性が Spanner にはあるのかという問に行き着きます。言い換えると、アプリケーションの障害には多くの原因があるなかで、Spanner がダウンタイムの原因となることが殆どなければ良いということになります。
検証してきたなかで Spanner はこの水準を 99.999% を超える可用性(障害が発生する割合が 105 分の 1 未満)で満たすことがわかりました。それを考慮すると、マルチリージョンの Cloud Spanner の可用性が 99.999% に設定されているのは妥当でしょう。追加された新しい要素があることから、しばらくは多少のリスクが想定されるからです。
Spanner の内側
次の問は、Spanner がこの可用性をどのように達成しているのかということです。
いくつかの要因があるなか、なにより大きな要因は Spanner が Google のプライベート ネットワーク上で稼働しているということです。殆どのワイド エリア ネットワーク、ましてやパブリック インターネットとは異なり、Google が全体をコントロールしているネットワークであることから、ハードウェアや経路の冗長性の確保から、アップグレードや一般的なオペレーションまでも自ら制御できます。それでもファイバの断線や機器の故障はありますが、システム全体としては堅牢に保たれます。
ここに至るには、何年にもわたるオペレーションの改善も大きく、ここ 10 年あまり Google は冗長性、障害の抑制、そして何よりもプロセスを進化していくために改善してきました。その結果、ただでさえ稀な Spanner の障害の中でも、ネットワークが原因となる割合は 10% にも届きません。
世界中をまたがってデータを管理し、データの一貫性を備え、高可用性をも実現するシステムを構築することは可能です、ただし容易なことではありません。クラウドの良いところは、誰かがそれを構築して、誰にでも使えるようにしてくれることです。代わりに、そのシステムを使い構築する、あなたのサービスやアプリケーションの中心となるイノベーションを生み出すことに集中してください。
次のステップ
さらに踏み込んで見ていくなら、Spanner のリリースに合わせて公開された
ホワイトペーパー
で、Spanner とその一貫性と可用性の詳細について新しいデータを交え説明しています。また、グローバルに同期したクロック、TrueTime システムの役割にも触れています。TrueTime も今後 GCP のお客様が直接利用できるようにリリースする予定です。
サンフランシスコで 3 月に開催される
Google Cloud Next '17
では、Cloud Spanner に関連する新しいセッションを追加しています。席に限りがあるので、早めに申し込みを済ませてください。
* この投稿は米国時間 2 月 14 日、Google Cloud の Vice President of Infrastructure である Eric Brewer によって投稿されたもの(投稿は
こちら
)の抄訳です。
- By Eric Brewer, Vice President of Infrastructure, Google Cloud
0 件のコメント :
コメントを投稿
60 日間のトライアル
Labels
.NET
.NET Core
.NET Core ランタイム
.NET Foundation
Access Management
AlphaGo
Anvato
Apache Beam
Apache Maven
API
Apigee
APIs Explore
App Engine
App Engine Flex
App Engine flexible
AppArmor
AppScale
AR
Artifactory
ASP.NET
ASP.NET Core
Attunity
AWS
Big Data
BigQuery
Billing Alerts
Bime by Zendesk
Bitbucket
Borg
BOSH Google CPI
Bower
BreezoMeter
BYOSL
Capacitor
Client Libraries
Cloud API
Cloud Audit Logging
Cloud Bigtable
Cloud Client Libraries
Cloud Console
Cloud Consoleアプリ
Cloud Dataflow
Cloud Dataflow SDK
Cloud Datalab
Cloud Dataproc
Cloud Datastore
Cloud Debugger
Cloud Deployment Manager
Cloud Foundry
Cloud Foundry Foundation
Cloud Functions
Cloud Identity
Cloud Jobs API
Cloud KMS
Cloud Load Balancing
Cloud Machine Learning
Cloud monitoring
Cloud Natural Language API
Cloud Networking
cloud Pub/Sub
Cloud Resource Manager
Cloud Resource Manager API
Cloud SDK
Cloud SDK for Windows
Cloud Source Repositories
Cloud Spanner
Cloud Speech API
Cloud SQL
Cloud Storage
Cloud Storage FUSE
Cloud Tools for PowerShell
Cloud Tools PowerShell
Cloud Translation
Cloud Translation API
Cloud Virtual Network
Cloud Vision
CloudBerry Lab
CloudEndure
Cloudian
Cluster Federation
Codelabs
Cohesity
Coldline
Colossus
Compute Engine
Compute user Accounts
Container Engine
Container Registry
Container-VM Image
CRE
CSEK
Customer Reliability Engineering
Dbvisit
DDoS
Debugger
deep learning
Deployment Manager
Developer Console
Developers
Disney
Docker
Dockerfile
Drain
Dreamel
Eclipse
Eclipse Orion
Education Grants
Energy Sciences Network
Error Reporting
ESNet
Evernote
FASTER
Fastly
Firebase
Firebase Analytics
Firebase Authentication
Flexible Environment
G Suite
gcloud
GCP 移行ガイド
gcsfuse
GitHub
Go
Go 言語
Google App Engine
Google Apps
Google Certified Professional - Data Engineer
Google Cloud Certification Program
Google Cloud Console
Google Cloud Dataflow
Google Cloud Datalab
Google Cloud Datastore
Google Cloud Endpoints
Google Cloud Explorer
Google Cloud Identity and Access Management
Google Cloud Launcher
Google Cloud Logging
Google Cloud Platform
Google Cloud Resource Manager
Google Cloud Security Scanner
Google Cloud Shell
Google Cloud SQL
Google Cloud Storage
Google Cloud Storage Nearline
Google Cloud Tools for IntelliJ
Google Compute Engine
Google Container Engine
Google Data Analytics
Google Data Studio
Google Date Studio
Google Deployment Manager
Google Drive
Google Earth Engine
Google Genomics
Google SafeSearch
Google Service Control
Google Sheets
Google Slides
Google Translate
Google 公認プロフェッショナル
GPU
Gradle
GroupBy
gRPC
HA / DR
Haskell
HEPCloud
HIPAA
Horizon
HTCondor
IaaS
IAM
IBM
IBM POWER9
icon
IERS
Improbable
InShorts
Intel
IntelliJ
Internal Load Balancing
Internet2
IoT
Java
JFrog
JFrog Artifactory SaaS
Jupiter
Jupyter
Khan Academy
Komprise
kubefed
Kubernetes
KVM
Landsat
load shedding
Logging
Looker
Magenta
Managed Instance Group
Maps API
Maven
Maxon Cinema 4D
MightyTV
Mission Control
MongoDB
MQTT
MySQL
Nearline
Network Time Protocol
neural networks
Next
Node
NoSQL
NTP
NuGet パッケージ
OCP
OLDISM
Open Compute Project
OpenCAPI
OpenCAPI Consortium
OpenShift Dedicated
Orbitera
Organization
Orion
Panda
Particle
Percona
Pete's Dragon
Pivotal
Pivotal Cloud Foundry
PLCN
Pokemon GO
Pokémon GO
Poseidon
PowerPoint
PowerShell
Protocol Buffers
Puppet
Pythian
Python
Raspberry Pi
Red Hat
Regional Managed Instance Groups
Rust
SC16
ScaleArc
Security & Identity
Sentinel-2
Serving Websites
SideFX Houdini
SIGOPS Hall of Fame Award
Site Reliability Engineering
SLA
SLI
SLO
Snap
Spaceknow
SpatialOS
Spring
SQL Server
SRE
Stack Overflow
Stackdriver
Stackdriver Debugger
Stackdriver Diagnostics
Stackdriver Error Reporting
Stackdriver Logging
Stackdriver Monitoring
Stackdriver Trace
Stanford
Startups
StatefulSets
Storage & Databases
StorReduce
Streak
Sureline
Sysbench
Tableau
Talend
Tensor Flow
Tensor Processing Unit
TensorFlow
The Carousel
TPU
Trace
Transfer Service
Translate API
Uber
Veritas
Vision API
Visual Studio
Visualization
Vitess
VM
VM Image
VSS
Waze
Webyog
Wide and Deep
Windows Server
Windows ワークロード
Wix
Worlds Adrift
Xplenty
Yellowfin
YouTube
Zaius
Zaius P9 Server
Zipkin
ZYNC Render
アーキテクチャ図
イベント
エンティティ
クラウド アーキテクト
コードラボ
コンピューティング
サポート
ジッター
ショート動画シリーズ
スタートガイド
ストレージ
セミナー
ソリューション: メディア
データ エンジニア
データセンター
ビッグデータ
プリエンプティブル VM
フルマネージド
マイクロサービス
マルチクラウド
ロード シェディング
運用管理
可用性
海底ケーブル
機械学習
月刊ニュース
資格、認定
新機能、アップデート
人気記事ランキング
導入事例
内部負荷分散
認定試験
料金
Archive
2017
2
1
2016
12
11
10
9
8
7
6
5
4
3
2
1
2015
12
11
10
9
8
7
6
5
4
3
2
1
2014
12
11
10
9
8
6
5
4
3
2
Feed
月刊ニュースレターに
登録
新着ポストをメールで受け取る
Google
on
Follow @GoogleCloud_jp
0 件のコメント :
コメントを投稿