Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Spanner Low Level APIは何が「Low」なのか

Keke
September 18, 2019

Spanner Low Level APIは何が「Low」なのか

Keke

September 18, 2019
Tweet

More Decks by Keke

Other Decks in Technology

Transcript

  1. $ WHO I AM Keke (Twitter: @_k_e_k_e) New Grads Merpay.inc

    SRE Team Cashless and Chaos engineering are my interest Twitter: https://twitter.com/_k_e_k_e
  2. Cloud Spanner Low Level API を知ることによって Spanner について理解を深め Client Library

    について興味を持ってもらうこと Spanner 界隈が盛り上がると嬉しい:)
  3. 1 Self Introduction Todays Talk API Level 2 3 Spanner

    Client 4 Raw gRPC 5 Spanner Low Level API
  4. MERPAY'S 4 LAYER ARCHITECTURE 5-Step Ordering Process 1 Client, Merchant

    2 API Gateway 3 API Service 4 Backend Service
  5. 02 03 04 01 ⽤途に応じてラッピング ラッパーパッケージ googleapis/google-cloud-go/spanner Spanner Client google.golang.org/genproto/googlea

    pis/spanner/v1 Spanner Low Level API gRPC のレベルからSpanner Low Level API を叩く Raw gRPC API LEVELS
  6. 02 03 04 01 ⽤途に応じてラッピング ラッパーパッケージ googleapis/google-cloud-go/spanner Spanner Client google.golang.org/genproto/googlea

    pis/spanner/v1 Spanner Low Level API gRPC のレベルからSpanner Low Level API を叩く Raw gRPC よく使うのはSpanner Client かラッパー
  7. 02 03 04 01 ⽤途に応じてラッピング ラッパーパッケージ googleapis/google-cloud-go/spanner Spanner Client google.golang.org/genproto/googlea

    pis/spanner/v1 Spanner Low Level API gRPC のレベルからSpanner Low Level API を叩く Raw gRPC ラッパーはSpanner Client を ラッピングため多種多様
  8. 02 03 04 01 ⽤途に応じてラッピング ラッパーパッケージ googleapis/google-cloud-go/spanner Spanner Client google.golang.org/genproto/googlea

    pis/spanner/v1 Spanner Low Level API gRPC のレベルからSpanner Low Level API を叩く Raw gRPC 基本的にはSpanner Client を使う
  9. 02 03 04 01 ⽤途に応じてラッピング ラッパーパッケージ googleapis/google-cloud-go/spanner Spanner のクライアントパッケージ google.golang.org/genproto/googlea

    pis/spanner/v1 Spanner Low Level API gRPC のレベルからSpanner Low Level API を叩く Raw gRPC API LEVELS メリットなし
  10. Session とは gRPC ChannelとSpanner Sessionの関係 (引用: 「gRPC Channel と Cloud

    Spanner Session の関係」 詳解 google-cloud-go/spanner — セッション管理編 http://bit.ly/2QeroOk)
  11. Session とは Low Level API でできること ・ CreateSession ・ Session

    を作成 ・ GetSession ・ Session を作成 ・ DeleteSession ・ Session を削除 ・ ListSession ・ Session を列挙
  12. Session とは Session が増減するタイミング ・ Session Pool Manager によって作成・削除 ・

    DB オペレーションの Read / Write に応じて Session を保持する理由 ・ Session は⾼価である Session の注意点 ・ Session リークなど ・使わない Session を Session Pool に返さない
  13. Session とは Session が増減するタイミング ・ Session Pool Manager によって作成・削除 ・

    DB オペレーションの Read / Write に応じて Session を保持する理由 ・ Session は⾼価である Session の注意点 ・ Session リークなど ・使わない Session を Session Pool に返さない データベースが保持する全 Session の ApproximentLastUseTime などを モニタリングして、リークしてそうな、または使⽤頻度の悪い Session を削除する
  14. Transaction ReadWriteTransaction() → Apply() 1. BeginTransactionRequest 2. ExecuteSQLRequest 3. CommitRequest

    ReadTransaction() → Single() 1. BeginTransactionRequest 2. ExecuteSQLRequest → CommitRequest → ExecuteSQLRequest Temporary な Transaction 。 API 的には Transaction を指定していないだけ
  15. ExecuteSQL Query Mode 1 3 実⾏結果だけ返ってくる NORMAL 実⾏計画が返ってくる PLAN 実⾏計画

    + 実⾏結果 + 統計情報が返ってくる PROFILE 2 3 ExecuteSQL Query Mode https://cloud.google.com/spanner/docs/reference/rpc/goo gle.spanner.v1#google.spanner.v1.ExecuteSqlRequest.Qu eryMode
  16. RAW GRPC から実装するメリットとデメリット メリット ・特にない デメリット ・⾃分で DialOptions を設定する必要がある ・

    Credentials 関連 ・ func WithPerRPCCredentials(creds credentials.PerRPCCredentials) DialOption ・ func WithTransportCredentials(creds credentials.TransportCredentials) DialOption ・ User Agent の設定 ・ func WithUserAgent(s string) DialOption
  17. メリット デメリット ・特にない ・⾃分で DialOptions を設定する必要がある ・ Credentials 関連 ・

    func WithPerRPCCredentials(creds credentials.PerRPCCredentials) DialOption ・ func WithTransportCredentials(creds credentials.TransportCredentials) DialOption ・ User Agent の設定 ・ func WithUserAgent(s string) DialOption まとめてくれる Google のサービスを呼び出すための gRPC クライアントを使う google.golang.org/api/transport/grpc RAW GRPC から実装するメリットとデメリット
  18. 02 03 04 01 ⽤途に応じてラッピング Rapper Client googleapis/google-cloud-go/spanner Spanner Client

    google.golang.org/genproto/googlea pis/spanner/v1 Spanner Low Level API gRPC のレベルからSpanner Low Level API を叩く Raw gRPC API LEVELS メリットなし
  19. 02 03 04 01 ⽤途に応じてラッピング ラッパーパッケージ googleapis/google-cloud-go/spanner Spanner Client google.golang.org/genproto/googlea

    pis/spanner/v1 Spanner Low Level API gRPC のレベルからSpanner Low Level API を叩く Raw gRPC API LEVELS
  20. 何が「Low 」だったのか ・ Session は勝⼿に作られるものだった ・ gRPC のコネクションを繋いだ移⾏を操作できる ・ Session

    を指定して Transaction を⾛らせることも ・ Session の Metadata を取得などなど Session レベル 1. 2. Transaction レベル ・ Transaction を作る → Close するだけだった ・データベースの Transaction 操作 ・ Transaction ID で⼀意に決まってるので、それをもとに ・ トランザクションの中の複数 gRPC リクエストが存在していた