C++ で実装されている負荷分散された Web 向けアプリケーションのバックエンドとして、GDBM キー値データベースがあります。アプリケーションによって提供されるデータが非常に大きくなったため、管理者は GDBM ファイルを「ローカル」ストレージ (Web サーバー上、またはそのすぐ近く) から大規模な共有のリモート NFS マウント ファイルシステムに移動しました。
これはパフォーマンスに影響を与えました。当社のパフォーマンス テスト (テスト環境) では、ページの読み込み時間が数百ミリ秒 (ローカル ディスクの場合) から数秒 (NFS、ローカル ネットワーク経由) に跳ね上がり、時には 30 秒に達することもあります。問題の大部分は、アプリケーションが GDBM ファイルからランダムな読み取りを大量に行うことであり、NFS ではこれらの読み取りが遅く、本番環境ではさらに悪化すると考えています (フロントエンドとバックエンドでさえそれらの間のより多くのネットワーク ハードウェア) と、データベースがさらに大きくなるにつれて。
これは重要なアプリケーションではありませんが、パフォーマンスを改善し、アプリケーション開発者の時間や Unix 管理者などのリソースを利用できるようにしたいと考えています。私の主な制約は、数週間しかリソースを持てない時間です。
私が見ているように、私のオプションは次のとおりです。
パラメータを調整して、NFS のパフォーマンスを向上させます。私の本能は、これから多くを得ることができないということですが、私は以前に間違っていました.NFSのチューニングについてはあまり知りません.
memcachedbやTokyo Cabinetなどの別のキー値データベースに移動します。
NFS を他のプロトコルに置き換えます (iSCSI について言及されていますが、私はそれに慣れていません)。
この問題にどのようにアプローチすればよいですか?