最近読んだもの 36 - Understainding Software Dynamics 3 章まで、puma のアーキテクチャなど
英語版 Richard L Sites (著) 形式: Kindle版
- Understanding Software Dynamics
- Chapter 3 まで読んだ
- 本番環境で一部のリクエストのレイテンシが悪化するケースの原因特定と対処をメインテーマにしている本
- こうしたケースの原因究明は難しいしツールも出揃っていない
- 例えば「常に遅い api」はスコープ外。開発環境などで再現して対処できるので
- まずは cpu とメモリの仕組みと測定方法から話が始まっているが、早くも難しくてついて行けてない
- 自信がない人は パタヘネ で復習してから読み始めたほうがいいよと冒頭に書いてあり嫌な予感がしたが、そのとおりだった
- cpu、メモリのハードウェアレベルでの最適化方法の説明を 50 年代のナイーブな実装だった時点から時代を経ながら説明。そのあと C (高級言語) のレイヤから速度を測定する際に、そうした最適化が意図した計測の妨げになるので、どうやって計測処理を実装するのが良いかの説明をしている
- このあとの章で計測ツールを実装するので、アセンブリではなく C で頑張っている
- 個人的には、内容そのものが難しいものの英語で詰まりはせず読めているのはよかった
- 技術系の英文ならば一定の長さでも集中力が持つようになってきているように感じた。こうして面白そうな本に翻訳を待つことなくアクセスできているのも嬉しいし、「最近読んだもの」を続けてきた甲斐があった
- puma/architecture.md at master · puma/puma
- tcp backlog の他に puma 側でもリクエストの buffer を持っているらしい
- オプションでオンオフはできる
- puma/kubernetes.md at master · puma/puma
- k8s のローリングアップデートの際に、シャットダウン予定の pod がサービスから抜かれる前に、コンテナ内のプロセスに SIGTERM が送られることがあるらしい
- そうなると SIGTERM を受けて新規リクエストは受け付けない web サーバにリクエストがルーティングされて 5xx が起こってしまう
- pre-stop hook で sleepするワークアラウンドが必要
- Kubernetes best practices: terminating with grace | Google Cloud Blog
- pod の termination について
- SIGTERM と preStop hook
- Container Lifecycle Hooks | Kubernetes
- hook は ENTRYPOINT と非同期で実行されたり、at least once であるなど、注意点が書かれていた