前回の記事の流れで、久しぶりにリリースチェッカーの改善を進めている。ここ数日で実施した内容は以下の通り。
- 発売日の表示バグを修正した。発売年以外未登録の商品の発売日が「2017T」のように表示されていた。
- Googleアナリティクスを導入した。多くの方にリリースチェッカーを使っていただくべく、分析のために入れた。
- モバイル用のCSSを調整した。見やすくなったはず。
- RSSに含まれる和書の数を増やした。PA-API v5のドキュメントには、Search Indexを「Books」にすると和書が返ってくると書かれている。だが、実際には洋書も返ってきてしまう。なので、2ページ目(ItemPage = 2)まで検索し、不足分を補うようにした。
- CircleCiでDockerイメージをビルドするようにした。Docker Hubの自動ビルドを使っていたのだが、開始まで10分以上待たされるのが我慢できなくなった。
- PA-API呼び出し失敗時の404エラーを修正した。PA-API v5では呼び出し回数の制限が厳しくなっている。呼び出し失敗が続いた場合、リリースチェッカーでは503エラーを返していたつもりだった。が、実際には404が返っていた。
- RSSクローラーのアクセス数を制限した。Apacheのプロセスが不足し、タイムアウトすることがあった。前段に置いているNginxのngx_http_limit_req_moduleを使って制限したところ、サービスが安定した。
ぼくとしては「クローラーのアクセス数制限」が会心だった。Nginxの設定ファイルを抜き書きすると、こうなる。
limit_req_zone $limit_req_per_ip zone=rss_per_ip:10m rate=1r/s; server { location /rss { limit_req zone=rss_per_ip burst=2 nodelay; limit_req_status 429; set $limit_req_per_ip $binary_remote_addr; if ($http_x_requested_with = XMLHttpRequest) { set $limit_req_per_ip ""; } } }
クローラーだけを制限対象にしたいので、ブラウザからXMLHttpRequestでRSSにアクセスした場合は除外している。
ngx_http_limit_req_moduleのことは初めて知った。便利。
リリースチェッカーにはまだまだ改善ポイントがあると思う。引き続きやっていく。