【要約】launchd × BlueSky自動エンゲージ、429エラーと日次上限に詰まった記録 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者がBlueSkyの自動化システムを運用する際、API制限や設計ミスにより運用が停滞した。
- ・APIのレートリミットに抵触し、429エラーが発生した。
- ・短時間の集中アクセスが原因で、制限値に達した。
- ・アンフォロー済みアカウントを再度フォローする設計ミスがあった。
- ・unfollow_logを起動時に読み込んでいなかった。
- ・リストが1万件を超え、処理速度が著しく低下した。
- ・配列への線形探索がボトルネックとなった。
- ・設計段階での整合性確保が不足していた。
// Approach
開発者はシステムの安定性と効率性を確保するため、設定値の調整とコードの修正を行った。
- ・リクエスト密度を下げ、429エラーを回避した。
- ・1セッションの件数を15件に、間隔を1.5秒に設定した。
- ・状態管理の整合性を保つため、起動時にログを統合した。
- ・unfollow_logをfollowedリストへ読み込む処理を追加した。
- ・計算量を削減し、処理の遅延を解消した。
- ・日次カウントを別変数として保持し、全件走査を回避した。
- ・これにより、リソース消費とエラー率を低減させた。
// Result
開発者は適切なパラメータ設定とロジック改善により、エラーのない安定した運用を実現した。
- ・429エラーが発生しない設定値を見出した。
- ・1日80件、1セッション15件の運用を確立した。
- ・再フォロー問題が完全に解消された。
- ・リスト増大時でも、体感できるレベルの高速化を実現した。
- ・データ量が増えても、安定して動作する基盤を構築した。
- ・運用コストの低減と、自動化の継続性を確保した。
Senior Engineer Insight
> API制限が不明瞭な環境では、リクエストの総数だけでなく「密度」を制御すべきだ。また、分散した状態情報の統合(Single Source of Truth)を設計段階で徹底せよ。データ量が増大することを前提とし、計算量を意識したデータ構造を選択することが、実戦的なシステム運用では不可欠である。