デプロイ時に急上昇する API レイテンシを解決する - Djagno + Gunicorn の事例
- バックエンドシステムは Django + Gunicorn で構成されていた
- デプロイするたびに API レイテンシが急激に上昇する問題を発見した
- Gunicorn の仕組みを確認すると、コールドスタートが発生する箇所が存在した
- Django の内部コードを分析したところ、master worker process で fork する際、preload オプションを指定していても一部で事前ロードされない要素があることを発見し、問題を解決した
学んだこと
- Django のように多くのユーザーが使っている Web フレームワークは、ほとんどの動作が高い信頼性を持っているため、実際に使うユーザーもそう考えがちである
- しかし実際にコードを見ると、問題となるコードがあることを発見し、使っているフレームワークを盲信してはいけないと学べた
- API レイテンシ問題を解決する過程は、適切なドキュメント不足 + 内部構造および動作に対する深い理解不足 + オープンソースプロジェクトのコードベースを深く掘ることを避けがちな点のため、簡単には把握しにくかった
- この過程では複雑な問題がいくつも絡み合っていて、容易に把握しにくい面もあった
- 最終的には Django の内部コードを見ながら解決できた
- この過程で、使っている Django ツールへの理解をさらに深められただけでなく、内部コードを見ることが一部の難しい問題の解決策を見つける助けになることを学べた
- 問題の根本原因を把握することは重要だ。
- Health Check の成功条件をより多くの回数、あるいはより長い時間に調整する方法で API レイテンシの発生頻度は下げられるが、根本的な問題解決にはならなかったはずだ
- 集団知を活用すると、より早く注目すべきポイントと多様な知識を得られる
- API レイテンシに関する問題を組織にすばやく共有し、さまざまなエンジニアから原因だと推測される意見をもらった
- こうした意見をすばやく取りまとめ、どこに注目して見るべきかという知見を迅速に得られた
- 問題を解決するための症状再現環境をセットアップすることは重要だ
- ローカルで同じ問題の再現に成功し、それを通じて問題がきちんと解決されたか確認できた
- 問題解決のために症状再現が重要であることを認識できた
1件のコメント
リンクをたどって読んでみたら、記事の内容がとても良かったですね。