Carpe Diem

備忘録

Workload IdentityでPodからのGCPリソースアクセスをセキュアにする

概要

GKEのPodといったWorkloadからGCPのリソース(GCS、PubSubなど)にアクセスする場合

  • GKE NodeのService Accountの権限でアクセスする
  • 権限を持ったService AccountのJSONキーを使う

の2通りあります。

それぞれの問題点の理解と、その解決策としてのWorkload Identityの説明・導入方法を紹介します。

環境

続きを読む

GoGo Protobufのメリット・デメリット

概要

Golangでprotobufのコードを生成する際には公式のgolang/protbuf以外にgogo/protobufが候補に挙がると思います。

メリット

大きなメリットはパフォーマンスとカスタマイズ性です。

marshalling と unmarshalling が高速

去年のベンチマークですが、公式より2.5~3倍近くパフォーマンスが良いことがわかります。

benchmark iter time/iter bytes/op allocs/op
BenchmarkGoprotobufMarshal-8 5000000 337 ns/op 96 2
BenchmarkGoprotobufUnmarshal-8 3000000 533 ns/op 200 10
BenchmarkGogoprotobufMarshal-8 10000000 132 ns/op 64 1
BenchmarkGogoprotobufUnmarshal-8 10000000 187 ns/op 96 3

2019-08-28 Results with Go 1.12.6 darwin/amd64 on a 2.8 GHz Intel Core i7 16GB

ref: GitHub - alecthomas/go_serialization_benchmarks: Benchmarks of Go serialization methods

続きを読む

Go でサーバレスポンスの内容を表示

概要

開発中にサーバレスポンスの内容を表示したい時があると思いますが

  • クライアントが受け取ったレスポンス
  • サーバが送ったレスポンス

のそれぞれをログなどで表示する方法を紹介します。

環境

  • go 1.14.3

クライアントが受け取ったレスポンスを表示

クライアントでは受け取ったレスポンスはio.ReadCloserです。
なので一度読み込むと以降は読み込めなくなるのでそこだけ注意が必要です。

io.Reader系で実処理ではreadする処理がほぼ必ず入るので、io.TeeReader を使うと良いです。

f:id:quoll00:20200603013559p:plain

ref: Goのioパッケージのメソッドを図示 - Carpe Diem

続きを読む

Goのioパッケージのメソッドを図示

概要

Golangのioパッケージにはio.Readerio.Writerのインタフェースを有効活用するため以下のような便利なメソッドが用意されています。

しかし普段から使っていないと、これらメソッドの方が簡単にかけるのに忘れて遠回りな書き方をしがちです。
なのでイメージ化して覚えやすいようにします。

続きを読む

CPU CFS Quotaを制限している場合の適切なGOMAXPROCS

概要

christina04.hatenablog.com

以前上の記事でGOMAXPROCSはCPU数程度が適切に動くという話をしました。

これはこれで正しいのですが、一方でdockerのようにcgroupsでCPU Quotaを制限するケースではこれに当てはまらなくなります。

Kubernetesでいうと

Kubernetesのresource requests, limits - Carpe Diem

のようにlimitsを設定した場合ですね。

今回はその検証と対応方法についてまとめます。

環境

  • go 1.14.2
  • docker 19.03.8
続きを読む

PrometheusがStatsDより優れているところ

概要

新しい技術というのは既存の技術にある課題を解決するために生まれてきます。

入門 監視 ―モダンなモニタリングのためのデザインパターン

入門 監視 ―モダンなモニタリングのためのデザインパターン

  • 作者:Mike Julian
  • 発売日: 2019/01/17
  • メディア: 単行本(ソフトカバー)

はStatsD&Graphiteを中心に説明されており、同時期に読んだ

と比較して、メトリクス系ツールの古株であるStatsDより後発のPrometheusは、StatsD&Graphiteのどんな課題を解決しているかをまとめます。

続きを読む

Go Module MirrorとChecksum Database

概要

Go 1.13から、goコマンドはデフォルトでGo Module MirrorとChecksum Databaseを使用してモジュールをダウンロード&認証するようになりました。

環境

  • go 1.14.1

Module Mirror (Module Proxy)

Module Mirrorは公開モジュールをキャッシュし、go modでのダウンロードを高速化するためのProxyです。
ProxyのURLはGOPROXYにセットされています。

$ go env GOPROXY
https://proxy.golang.org,direct
続きを読む