じゃあ、おうちで学べる

本能を呼び覚ますこのコードに、君は抗えるか

「Cloud Native Go」の読書感想文

近況

2021年6月1日に転職したのですが現職では週2回のエンジニアの共有会があるので、そちらで共有する資料を作ったのですがついでに自分のブログにもポストしておこうとおもいます。 あと、転職してから周りも優秀でよく褒められるしいい会社に転職できたと思います。

syu-m-5151.hatenablog.com

ここから下が共有会の資料。

Cloud Native Goを読んだ。

輪読会ではなく共有会としての読書感想文を記載しました。本当に素晴らしい書籍だと思うので共有会を通して皆さんに共有したいと思います。本書にはインフラや実行環境の変化に合わせてアプリケーションにはどのような変化が必要なのか?についてと偉大なるGo言語に関しての言及がされております。嬉しいですね。

Cloud Native Go

learning.oreilly.com

cloud-native-go/examples

github.com

誰が読むべきか?

  • Webアプリケーションエンジニア
  • DevOps スペシャリスト
  • Site Reliability Engineer

どんな本なのか?

アプリケーションの設計、構築、および展開の方法は変化しています。アプリケーションレイヤーの変化に合わせてどのようなインフラの概念に精通すれば良いのかの指針になるのではないかと思う。特にスリーシェイクは、モダンなインフラレイヤーの技術力を強みにしているので読んで損はないと思う。

また、どんな本ではないのか?

Kubernetes が学べる本ではない

主要なコンテナオーケストレーターであるKubernetesを本番環境で動かすために役立つベストプラクティスやKubernetes の概念が学べる本ではない。

Production Kubernetes

learning.oreilly.com

Kubernetes で必要なYAMLが学べる本ではない

GoのアプリケーションをKubernetes に載せるためなどの具体的な課題に対して必要なYAMLや概念を学べる本ではない。

Kubernetes Patterns

learning.oreilly.com

Kubernetes を拡張する本ではない

Kubernetes の機能をGo言語を利用して拡張して課題を解決したいクラスタ運用者や気鋭なアプリケーション開発者のための本ではない。

Programming Kubernetes

learning.oreilly.com

Golang に入門できる本ではない

3章では入門書籍っぽいことが書かれているが入門書としては全然足りない。これを読んでGo言語かける人間はかなり強いと思う。Go言語入門とかみんなのGoとかで勉強しましょう。

The Go Programming Language

learning.oreilly.com

改訂2版 みんなのGo言語

gihyo.jp

マイクロサービスに関する本ではない

マイクロサービスのためのシステム分割や設計のレベルから解説する本ではない。

マイクロサービスパターン 実践的システムデザインのためのコード解説 - インプレスブックス

book.impress.co.jp

各章ざっくりまとめ

Part I. Going Cloud Native

1. What Is a “Cloud Native” Application? (19:33 mins)

  • コンピューティングの歴史とクラウドネイティブなアプリケーションに関する言及

2. Why Go Rules the Cloud Native World (19:33 mins)

  • Go言語がいかにクラウドネイティブな価値観において素晴らしい言語なのかについて 熱弁していて良い

II. Cloud Native Go Constructs (01:09 mins)

3. Go Language Foundations (54:03 mins)

ざっくり、Go言語に関する入門(本にも限界があるので!)

4. Cloud Native Patterns (52:54 mins)

1番、最初にみんな大好きな分散コンピューティングの落とし穴に関する言及があるのですが本書には「Services are reliable: services that you depend on can fail at any time」という一文も追加されております。Goでの分散コンピューティングの落とし穴をアプリケーション層で回避する為のパターンに関する言及がある。Context の言及や使い方に関しては入門としても非常に分かりやすいので読んでみてほしいです。

5. Building a Cloud Native Service (87:24 mins)

net/httpgorilla/muxを用いてRESTfulな簡単なKey-value アプリの設計、実装する。 そして、いろんなパターンや想定をもとに再実行やサーキットブレイカーの実装などを変更追加していってセキュリティとDocker化をやっていく的なストーリー

III. The Cloud Native Attributes (01:09 mins)

6. It’s All About Dependability (39:06 mins)

信頼性に関する考察や言及やマインドがまとめられた章。実際の実装はない。Twelve-Factor Appの言及があるがそれに基づいた実装の記載などはない。この章は口で言うのは簡単ですが理解するのと実装と運用していくのがめちゃくちゃ難しい。SREの骨子のような章。

7. Scalability (46:00 mins)

スケーリングにおける様々な条件と要件、スケールアウトが多くの場合で最良の長期戦略であることに関する言及をしました。状態の有無、アプリケーションの状態が本質的に「アンチスケーラビリティ」である理由について。また、様々な実装について効率的なメモリ内キャッシュとメモリリークを回避するためのライブラリなどの紹介を行いモノリシック、マイクロサービス、サーバーレスアーキテクチャなどの紹介について。

8. Loose Coupling (66:42 mins)

コンポーネントが密に結合されていることを確認できる方法と、それらの密結合された各コンポーネントを管理する方法についての言及及びメリットデメリットに関する実装を交えた言及。これ、本物の地獄さ混沌さがサンプルだと足りない。

9. Resilience (57:30 mins)

復元力や回復力に言及している章。インフラエンジニア的にはヘルスチェックのエンドポイントだけやっていれば良いかもしれないですが連鎖的な障害を事前に検証するための実装や検証方法に関して言及する章。実際に最高のSREサービスを目指すなら確実に習得が必要でかなり、いかつい章。

10. Manageability (59:48 mins)

どのようにしてソフトウェアの保守性を上げるかの問題。前職でもめちゃくちゃ悩んでいた。 Go言語で一つ以上のアプリケーションを書いた場合にはしっくりくると思う。実際の実装まで言及できる能力があると良いと思いました(知らんけど)。

参照サイトのこれとか分かりやすかった。

Manageability(管理性)とは?

www.ni.com

11. Observability (92:00 mins)

可観測性に関する言及をする時にインフラエンジニアにとってログとメトリクスは馴染み深いですがトレーシングに関しては正直、馴染みがありません(ほんまか?)。この章では可観測性についてのおおまかな概要と各種三本柱の実装についてまとめられてます。トレーシングは概要ですら本当にためになるのでぜひ、読んでほしいです。 「データは情報ではなく、情報は知識ではなく、知識は理解ではなく、理解は知恵ではありません。」という最初の一文が良すぎます。知恵を共有できる人間になりたいです。

このエントリー以降キャッチアップできていないので情報をキャッチアップして知恵にできる

OpenTelemetryについての現状まとめ (2020年6月版) - YAMAGUCHI::weblog

ymotongpoo.hatenablog.com

ちなみに共有会は明日。

輪読会ではなく共有会での資料になります。関心ごとをもっとフォーカスして良いと思いました。

さいごに

日本語の翻訳本が出てほしい。