403と429エラーから学んだ、自動データ収集における「行儀の良さ」
YouTubeからのデータ収集でアクセス制限を受けた失敗と、その対策についてお話しします。システム運用で大切なのは、一気に大量の処理を行うのではなく、相手に負担をかけない「行儀の良い」設計にすることだと学びました。
突然のアクセス拒否とシステムの停止
ASMRの「音」を数値化するためには、日々たくさんの動画から音源や字幕データを集める必要があります。ある日、いつものようにシステムを動かしていると、突然データの取得ができなくなりました。
原因を調べてみると、音源を取得しようとした際には「403(Forbidden:アクセス権限がないというエラー)」が、字幕データを取得しようとした際には「429(Too Many Requests:短時間にアクセスしすぎたというエラー)」が返ってきていました。システムが短時間に何度も繰り返しYouTubeへアクセスしたため、一時的なブロックを受けてしまったのです。
原因は「一気に集めようとした」こと
これまでのシステムは、新しく追加されたメディア一覧の動画情報を、見つけた端からどんどん処理していく仕組みになっていました。早くデータを集めたいという思いから、システムに対して一気にアクセスしすぎる設定をしてしまっていたのが直接の原因です。
「毎日少しずつ」を前提とした安全設計への改修
この失敗を受けて、データ収集の仕組みを根本から見直すことにしました。新しい設計の原則は「一気に大量」ではなく「毎日少しずつ」です。
具体的には、次のような対策をシステムに組み込みました。
- アクセスの間隔を空ける:連続してデータを取得しないよう、処理と処理の間に十分な待ち時間を設ける
- 1日の上限を設ける:1日に取得するデータ量に制限をかけ、無理なアクセスを防ぐ
- 自動で安全に停止する:データの取得に連続して失敗した場合は、システムが異常を検知して自動的に動作を止める
また、字幕データの取得方法も工夫しました。以前は複数の手順を踏んで取得していましたが、動画のメタ情報(動画に付随するデータ)に含まれるURLを利用し、1回のアクセスで取得できるように変更しました。さらに、もし取得に失敗した場合は「バックオフ再試行(失敗するたびに待ち時間を徐々に長くして再挑戦する仕組み)」を導入し、全体のアクセス回数を大きく減らしています。こうした調整を経たデータは、音響指標の読み方に基づいて計算され、少しずつサイトに反映されていきます。
この日の学び
- 自動化のプログラムは、相手への配慮を持った「行儀よく、保守的な」設定にすることが重要です。
- 処理を急いでブロックされてしまうより、制限を受けたらシステムを休ませる設計にする方が、結果的にいちばん早くデータを集められます。
- システムの失敗は、より安全で壊れにくい仕組みに育てていくための大切なステップになります。