【要約】正拳突き人形を“ほっといても動き続ける”ようにする ── 運用編 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者が、作成したプロトタイプを実用的な製品として運用しようとした際、以下の技術的課題に直面した。
- ・開発用サーバー(Werkzeug)のセキュリティ脆弱性と、同時接続への対応力の低さ。
- ・WebSocket通信において、ワーカーのタイムアウトやメモリ共有問題により通信が切断される現象。
- ・電源再投入時やプロセス異常終了時に、手動での再起動が必要となる運用上の大きな負荷。
- ・開発用フラグの消し忘れによる、意図しないコード実行のリスク。
- ・開発環境と本番環境の構成の混在による、起動プロセスの不安定さ。
// Approach
開発者は、システムの自律稼働と通信の安定性を確保するため、以下の構成を採用した。
- ・WSGIサーバーとしてGunicornを採用し、非同期ワーカー
geventを用いてWebSocket接続を維持。 - ・
--timeout 0設定により、WebSocketのアイドル状態による強制切断を防止。 - ・
-w 1設定により、ワーカー間のメモリ不整合による通信不全を回避。 - ・
systemdサービスファイルを作成し、Restart=alwaysにより自動復旧を実現。 - ・環境変数を用いて、デバッグモードの切り替えを構造的に管理。
- ・サーバーとクライアントの依存関係を、構成に応じて適切に設計。
// Result
これらの対策により、システムは手動操作を必要としない運用状態へと到達した。
- ・電源投入のみで、サーバーとクライアントが自動的に立ち上がる状態を実現。
- ・プロセス異常時も、
systemdにより自動で復旧する堅牢性を確保。 - ・開発用スイッチを排除し、本番環境におけるセキュリティリスクを低減。
- ・手動でのSSHログインやコマンド実行を不要にする運用フローを確立。
- ・ただし、単一ワーカー構成のため、スケーラビリティには課題が残る。
Senior Engineer Insight
> エッジコンピューティングにおける「動く」と「運用できる」の境界線を明確に示している。特に、WebSocketの特性を考慮したGunicornのオプション選定は、実戦的な判断だ。スケーラビリティを捨てて整合性を取る判断も、リソースの限られたラズパイ環境では合理的である。ただし、将来的な拡張にはRedisを用いた分散管理への移行が不可欠となる。