これはすべて、世界をリッスンする外部Webサーバーで行われます(nginxまたはlighttpdをお勧めします)。
レート制限に関しては、nginxは制限することができます。つまり、IPごとに50 req /分で、カスタマイズ可能な503ページ全体を取得できます。
予想される一時的なダウンに関しては、railsの世界では、これは特別なmaintenance.htmlページを介して行われます。Railsアプリサーバーがダウンしたときにそのファイルを作成またはシンボリックリンクするある種の自動化があります。ファイルの存在ではなく、アプリサーバーの実際の可用性に依存することをお勧めします。
しかし、実際には、接続をまったく失うことなくサービスを開始/停止することができます。つまり、異なるUNIXソケット/ IPポートでアプリサーバーの個別のインスタンスを実行し、バランサー(nginx / lighty / haproxy)にその新しいインスタンスも使用させることができます。次に、古いインスタンスをシャットダウンすると、すべてのクライアントに新しいインスタンスのみが提供されます。接続が失われることはありません。もちろん、このシナリオは常に可能であるとは限りません。新しいバージョンで導入した変更の種類によって異なります。
haproxyはバランサーのみのソリューションです。ファーム内のアプリサーバーへのリクエストのバランスを非常に効率的にとることができます。
非常に大きなサービスの場合、次のような結果になります。
- ラウンドロビンNバランサーに解決されるapi.domain
- 各バランサーは、静的コンテンツの場合はM Webサーバーに、動的コンテンツの場合はPアプリサーバーに要求をプロキシします。そうですね、RESTAPIには静的ファイルがありませんね。
非常に小規模なサービス(2K rps未満)の場合、すべてのバランシングは1〜2台のWebサーバー内で行われます。