アプリケーションとDBが遠隔地にあってはパフォーマンス的に大変きついことになります。
一回一回のオーバーヘッドというのももちろんなのですが、それによってトランザクション時間が長くなります。
SELECTしてその結果をもとにUPDATEなりINSERTなりDELETEしたりしてって処理、ありますよね。これで海を越えて何往復もする間トランザクションが続いて関連テーブルがロックされているわけですから、他のセッションが待たされる時間が長くなり、すぐに性能劣化する結果になります。
Webサーバ・アプリケーションサーバ・DBサーバの3つの役割にマシンを分けることで対処すべきかなと思います。
おそらく質問文中の「Webサーバ」というのがスクリプトなりサーブレットなりの動くサーバになると思うのですが、これを
- スクリプトなりサーブレットの動くサーバ:アプリケーションサーバ
- 静的コンテンツは即座に自分で返すが、動的なページ・APIへの要求はアプリケーションサーバへ丸投げするWebサーバ
の2層に分けようということです。そうすることによってアプリケーションサーバとDBサーバを一箇所にまとめることができます。Webサーバだけが現地設置。
Webサーバとアプリケーションサーバの間をどうつなぐかですね。VPNが張れれば運用的にも楽ですが、無理ならHTTPSでとなります。
アプリケーションサーバではクライアントのIPアドレスがわからなくなりますが、大丈夫でしょうか。もし必要なのならば、X-Real-IpまたはX-Forwarded-ForなどのHTTPヘッダを付加してWebサーバからクライアントIPを通知することで対処します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。