データベースの新しい試験がβリリースされたので、チャレンジ!
https://cloud.google.com/certification/guides/cloud-database-engineer
受験に向けた勉強のメモです。
試験の結果はまだまだ判らないし、試験を受けてみて過不足はあったものの、全く的外れではなかった気がするので、誰かの役に立てればと共有しておきます。
※具体的な試験問題がどうだったかとかは、規約違反になるためここでは触れません。
勉強は以下の流れでやることにしました。
公式の学習プログラムも提供されているので、そっちの方が効率的かもですが、今回はクレジットを節約するため、学習プログラムも自前で検討しました。
- 求められる知識のセルフチェック → 知識が曖昧なこと(重点学習箇所)をピックアップ。あまりに網羅率が低ければ試験をリスケ。
- 重点学習箇所を"英語で"調べる → β試験は英語なものの、英語苦手なので慣れるため。
- 日本語で改めてドキュメントを読み直し答え合わせ → 英語読解のミス洗い出しと関連知識の補填。
知識のセルフチェックは試験の概要に記載の内容から、出題範囲を確認するとともに、自分自身の理解が弱そうなところに当たりをつけました。
Databaseサービスの種類
Relational databases
Cloud SQL, Cloud Spanner, Bare Metal。
ACID特性。
Non-Relational databases
ACID特性でない。ただし、Firestoreは特殊な形でACIDを提供。
Document DB: Firestore
Key-value: Bigtable, Memorystore
In-memory: Memorystore
Wide-column DB: Bigtable, (Cassandra, HBase)
Graph DB: (JanusGraph + )Bigtable <ストレージとして使用>
() ... 非Google Cloudサービス
移行
Database Migration Service。様々なソースDBからCloudSQLへの移行
Datastream。サーバーレスで使いやすい変更データキャプチャ(CDC)とレプリケーションのサービス。OracleやMySQLなどから様々なDBサービスへの取り込み。
※ DatastreamはDMSを包含するように見えるが、ユースケース例では、GCSに取り込むまでで、DataflowやPub/Subと組み合わせていることが多い。使い分けについてもう少し理解が必要。
選択基準
このページを眺めておく。
サービス一覧
各サービスのドキュメントから別表にまとめる。
Categories | Points | Cloud SQL | Cloud Spanner | Bare Metal | Firestore | Memorystore | Cloud Bigtable | Firebase Realtime Database |
---|---|---|---|---|---|---|---|---|
Availabity | Choices | - Single Zone - High HA |
Region - Multi Region - Single Region Replica - Read / Write - Read - Witness |
N/A | - Multi-Region - Regional |
- Basic tire (no Read Replica) - Standard tire (Read Replica on the other Zone) |
Multi-cluster Instance Replication - Multi Region - Multi Zone |
TBA |
Availabity | Fail Over | Not available for a minutes | Automaticaly with no disable time. But you can change leader region. | N/A | Automaticaly. You can't change default region. | Automaticaly. Not available for any secounds and disconnected existing connection. | - Multi-cluster automatic failover. - Single-cluster manual failover. |
TBA |
Encryption | At rest | - client-side Row-level. Use 'Tink' library. - CMEK Instance-level. |
- CMEK | SVM | - server-side AES-256 - client-side Both O.K. |
- client-side Use 'Tink' library with KMS. |
CMEK | TBA |
Encryption | In transit | Use SSL/TLS certification | API default encripted. | Interconnect, VPN | TLS | TLS (limit by Instance Type) | TLS | TBA |
Cost | Factor | CPU, Memory, Storage, Type(MySQL, Postgres, or SQL Server) | Compute, Storage, NW Egress | Subscribe. Contct sales. | Storage, Bandwidth, Operation(Write, Read, Delete) | Tire, Storage, Region, Num of Nodes | Type(SSD, HDD), Num of Instances, Storage, Egress NW(Free same region) | TBA |
Cost | Commited Usage | Yes (1Year, 3Years) | Yes (1Year, 3Years) | ? | No | No | No | TBA |
Authentication | IAM Role | cloudsql.xxx (admin, editor, viewer, client, instanceUser) client ... from Auth Proxy and GAE use tags. |
spanner.xxx (admin, backupAdmin, backupWriter, databaseAdmin, databaseReader, databaseUser, restoreAdmin, viewer) |
baremetalsolution.XXX (admin, editor, viewer, instanceXXX, storageadmin, networksadmin, nfsshareXXX) |
datastore.xxx (owner, user, viewer, importExportAdmin, indexAdmin) |
redis.xxx memcache.xxx (admin, editor, viewer, instances.xxx, locations.xxx, operations.xxx) |
bigtable.xxx (admin, user, reader, viewer, locations.xxx, instances.xxx, appProfiles.xxx, backups.xxx, clusters.xxx, tables.xxx, keyvisualizer.xxx) |
TBA |
Authentication | Connect as DB Usser | - Cloud SQL user (=root@) - MySQL(or else) user - IAM database authenication |
- API - psql (with PGAdapter) |
N/A | Security Rules | Redis AUTH | N/A | TBA |
Backup | Managed | - On-demand / Automated Retain up to 365 days. - Point-in-time Recovery 1 day. |
- On-demand / Automated Retain up to 365 days. - Point-in-time Recovery 1 day. |
N/A | N/A (For automate, export using Cloud Scheduler) |
N/A (For automate, export using Cloud Scheduler) |
Table backup. | TBA |
Backup | Import / Export | CSV / Dump files | Arvo / CSV | N/A | LebelDB | RDB Backup | Arvo, Parquet, Sequence | TBA |
Monitoring | Primary Cloud Monitoring metrixis | CPU, Storage, e.t.c. | CPU, Latency, e.t.c. | N/A | Document xxx, Active Connection, e.t.c. | memory usage | CPU, Disk usage | TBA |
Monitoring | Not Cloud Monitoring | - Instance Logs(Cloud Logging) - Recommender - Insight |
- Key Visualizer - OpenCensus (Client-side) |
- gcloud (bms XXX describe) | - Key Visualizer - Usage DashBoard - Security Rule Usage - Daily Quota |
N/A | log4j | TBA |
データベースサービスごとのメモ
Cloud SQL
フルマネージドなSQLデータベースサービス。
MySQL, PostgreSQL, SQL Serverに対応。
ストレージの自動拡張可能あり。
データベースフラグ
データベースエンジンのパラメータ。
変更することで再起動されることもある。レプリカも同様。
データベース認証
パスワード認証とIAM認証(MySQL, PostgreSQL)がある。
IAM認証
期限は1時間。SSL必須。
リードレプリカを作る場合は、作成時に明示的に有効にする必要がある。
バックアップから復元する場合は、同一プロジェクトでは同じ設定が引き継がれるが、別プロジェクトでは新たに設定する必要がある。
プリンシパル
ユーザーアカウントとサービスアカウントのみ。Groupなどはサポートしない。
Role
cloudsql.instances.login
リソース
デフォルトはプロジェクトレベル。
IAM
roles/cloudsql.client
Cloud SQL Client
Connectivity access to Cloud SQL instances from App Engine and the Cloud SQL Auth proxy. Not required for accessing an instance using IP addresses.
cloudsql.instances.connect
cloudsql.instances.get
roles/cloudsql.instanceUser
Cloud SQL Instance User Role allowing access to a Cloud SQL instance.
cloudsql.instances.get
cloudsql.instances.login
Best Practice
SSL / TLS
サーバー証明書
インスタンス作成時に自動的に生成。server-ca.pem。
10年の期限。期限までに管理は不要(差し替え可能だが、しなくてもいい)。
クライアント証明書
インスタンスごとに10個まで作成可能。
Cloud SQL Admin IAM ロールが必要。
クライアント側の証明は必須ではないが、相互証明を推奨。
Cloud SQL Auth proxy
安全にCloud SQLに接続する仕組み。GAEからは不要。
IAM認証が可能になる。
また、private IPアドレスでアクセスできる。
Cloud SQLと同じVPCにデプロイする必要がある。
暗号化
クライアントサイド暗号化
暗号化してから書き込む。列レベルの暗号化では必須。
KMSとTink(ライブラリ)で実現。
CMEK
既存のインスタンスには不可。
レプリカ・クローンに引き継がれる。
インポート/エクスポートするために、GCSバケットにCMEKを設定しておく。
Backup
Point-in-time Recovery
gcloud sql instances clone SOURCE_INSTANCE_NAME \
NEW_INSTANCE_NAME \
--point-in-time 'TIMESTAMP'
Spanner
Replica
Read/Write Replica
- 全データ持ち
- 書き込み可能
- Leader昇格可能
Read-only Replica
- 全データ持ち
- 書き込み不可
- Leader昇格不可
Witness Replica
- データなし
- 書き込み可能
- Leader昇格不可
Failover
Quantity
100 ~ 1,000。
パフォーマンス
- ホットスポットの削減
- UUIDv4の使用
- ハッシュ結合の検討
- ある程度まとめてコミット
- パーティションをノード数の10倍
Backup
Backup
- パフォーマススに影響なし
- 期間最大1年
Inport / Export
- パフォーマススに影響あり
- 期間無制限
暗号化(CMEK)
- 作成時に指定(既存のDBには適用できない)
- Backupにも使われる
エミュレータ
コストの節約のため、ローカルでのAPI検証が可能なエミュレータが提供されている。
Firestore
Mode
- Datastore
- Native
ベストプラクティス
- 1秒に1回以上、一つのドキュメントを更新しない
- ホットスポットを避ける
Refernce vs Snapshot
前者は参照(更新などの操作可能)。後者はデータのコピーのため操作不能。
Memorystore
Type
- for Redis
- for Memcached
Upgrade
Basic tireでは一時的に利用不可。RDB Snapshotを使わない場合は、一度全てデータが消える。
Standard tireでは可用性は維持。
Bigtable
構成
インスタンス、クラスタ、ノードで構成(左ほど上位)。クラスタはゾーンに依存。
暗号化(CMEK)
- 作成時に指定(既存のDBには適用できない)
- Backupにも使われる
- Cluster単位(テーブルなどには指定できない)
TLS
SSD vs HDD
通常はSSD。10TB以上でレイテンシが遅くてもいい場合のみHDD(安い)を検討。
Convert
直接的にはできない。Backupデータ経由。
FailOver
- 数秒間の遮断
- エンドポイントは引き継がれるのでアプリ側の変更は不要
接続
- Direct peering ... VPC Peering
- Private services access ... Shared VPC, Inter connect, VPN
IAM
reader vs viewer
viewerはデータにアクセスできない
Garbage Collection
期限切れデータの削除
移行
Database Migration Service
オンプレDBからCloud SQLや、GCSへ移行するサーバーレスサービス。
Datastream
OracleからCloud SQL for MySQLへ移行などのようなサーバーレスサービス。
Data Fusionとの比較
移行先ごとのパターン
to Cloud Spanner
DynamoDB to Spanner
バッチ処理
- S3にロード
- S3からCloud Storageに移行(DMS)
- Cloud StorageからDataflowへ
- DataflowでSpannerへ
ストリーム処理
- LambdaでPub/Subへ
- Pub/SubからDataflowへ
- DataflowでSpannerへ
HBase to Bigtable
- snapshot と hash を Cloud Storageに格納
- Bigtableで空のテーブルを作る
- snapshotをインポート
- hashで検証
参照
https://cloud.google.com/architecture/running-janusgraph-with-bigtable
https://cloud.google.com/blog/topics/developers-practitioners/your-google-cloud-database-options-explained