本記事ではインターリーブテーブルを使いこなす、ちょっとしたテクニックを紹介します。
Cloud Spanner では SELECT AS STRUCT 構文をサブクエリに使うことで、親のテーブルとインターリーブされたテーブルのレコードを一発で高速に取得することができます。更に Cloud Spanner の CPU 使用率も抑えることができるので非常に効率的にクエリできます。
Cloud Spanner ではインターリーブと呼ばれる、あるテーブルのレコードの物理的な配置を別のテーブルのレコードの配下に置ける仕組みがあります。この仕組みを使ってテーブル間に親子関係を作ることで、複数のテーブル間に参照整合性制約を持たせたり、パフォーマンスを向上させることができます。
このインターリーブですが、親のテー …
NEG (Network Endpoint Group) というと Container-native Load Balancing の文脈で話されることが多く、パフォーマンスを向上させるためのものという認識が強いと思います。もちろん結果としてパフォーマンス向上が見込まれる場面もあると思いますが、それと同じく個人的に重要だと思うのが、NEG には Kubernetes の世界とその外のプラットフォーム (GCP) を繋ぐ大事な役割があるという点です。
本記事では NEG とは何か、なぜ重要なのかというのを一から説明したいと思います。
尚、NEG には大きく分けて Zonal NEG と Internet NEG という2種類がありますが、本記事では Zonal NEG に絞って記載します。ま …
GAE 2nd-gen では X-Appengine-Inbound-Appid ヘッダの代わりに、ID Token + Identity-Aware Proxy を使った方式をサービス間認証に使えます。
GAE でマイクロサービスを構成する場合、各サービス同士を呼び合うときに同一 GAE アプリからのリクエストであるかを確認したい場面があります。シンプルな例だと、サービスがフロントエンドとバックエンドに別れていて、バックエンドはフロントエンドからしか呼び出せないようにしたい場合です。
GAE 1st-gen では X-Appengine-Inbound-Appid ヘッダという魔法のヘッダがありました。このヘッダは URLFetch を使用して別の GAE サービスにアクセスする時に、GC …
前回 は google-cloud-go/spanner のセッション管理について見てみました。セッション管理だけでも Session Pool や Session のライフサイクルの管理など、やっていることは非常に多岐に渡っていましたね。
今回はそのセッションの上でどのように Cloud Spanner のトランザクションが動くのか、クライアントライブラリの実装を元に見ていきたいと思います。
具体的には以下のような点について述べます。
前回と同じく google-cloud-go の v0.38.0 時点のものを参照して記述しています。実装に踏 …
Cloud Spanner では各言語ごとにライブラリが提供されており、アプリケーションはそれを使うことで非常に簡単にデータベースにアクセスすることができます。しかし Cloud Spanner の性能を最大限引き出すためには、クライアント側の設定値をチューニングしたりなど、クライアントライブラリの挙動を知っておくことが不可欠です。そこで本記事では Go 言語のクライアントライブラリ (google-cloud-go) を例に、クライアントライブラリがどのような処理をしているかをじっくりと紐解いてみたいと思います。
全てを一度にカバーすると結構なボリュームになってしまうので、まずは本記事で Spanner の「セッション管理」の部分について説明します。本記事を通して ClientConfig …
GKE の L4 Load Balancer と L7 Load Balancer でパケットの流れをキャプチャして追ってみたので、どのように IP:Port が切り替わってパケットが流れていくか、メモがてら結果を残しておきます。尚記載されている IP:Port は自分が試した時のものなので環境によって変わります。
その他の設定値:
GCP にはあらかじめ HTTP のエンドポイントを登録しておくと、そこに対して HTTP リクエストが送られてくるようなプロダクトがいくつか存在します。
どれも非同期系の処理を行うプロダクトであり、非同期処理を行う Worker を HTTP の Web サーバとして記述できるのが大きなメリットになっています。
しかしそれらの Web サーバはパプリックなエンドポイントとして用意することも多いことから、送られてきた HTTP リクエストが本当に GCP の特定のプロダクトから送られてきたものなのか?という「認証」をどうやるかが長らく問題になっていました。
既存のやり方としては Web サーバの実装方式によっていくつか …
Cloud Spanner offers the strictest concurrency-control with external consistency. This guarantees for multiple transactions to run concurrently without the possibility of inconsistencies.
In this article, I’m going to demonstrate how the following 6 transaction isolation phenomenon aren’t allowed in Cloud Spanner.
We’re going to use the interactive CLI tool called spanner-cli to run multiple transactions. With spanner-cli we can interactively run arbitrary SQL statements similar to using the mysql command.
You can find the source code on GitHub at https://github.com/yfuruyama/spanner-cli
$ spanner-cli…
本記事は Google Cloud Platform その2 Advent Calendar 2018 の4日目の記事です。
Cloud Spanner はトランザクションの一貫性保証のレベルに External Consistency を採用しており、複数のトランザクションが一貫性のある状態で並行に走れるよう制御されています。
ではその一貫性保証とは、具体的にどのような問題 (Anomaly) を防いでくれるのでしょうか。
本記事では、一貫性保証のレベルが弱い時に起こりうる以下の様々な Anomaly を Cloud Spanner ではどのように防いでくれるか、実際に複数のトランザクションを実行して検証していきたいと思います。
Cloud Spanner is a Google-managed horizontal scalable relational database.
There are lots of official client implementations such as,
but it is missing some handy tools…, yes, the interactive command line interface!
So I have created spanner-cli, which is an interactive command line tool for controlling Spanner databases.
This GIF demonstrates what spanner-cli looks like.
As you can see, you can use idiomatic MySQL commands in this tool, such as
Strategic Cloud Engineer @Google Cloud. Opinions are my own and not the views of my employer.