1. 序章

アプリケーションを展開する前にテストするとき、理想は実際の予想される条件にできるだけ近いものをエミュレートすることです。 したがって、コーナーケースを含むすべての可能な条件を適切に実行する入力データのセットを設計する必要があります。 また、アーキテクチャ的に本番環境に近いテスト環境をセットアップします。 多くの場合、私たちはストレスをかけようとさえします。 予測された負荷の下でアプリケーションがどのように動作するかについての洞察を提供します。 さらに、アプリケーションが過酷な環境条件に耐える必要があると予想される場合は、過酷な環境条件を再現するように努める必要があります。 たとえば、モバイルアプリケーションは、接続損失、高いパケットエラー率、重複したパケット、遅い帯域幅などの接続の問題から回復できるように準備する必要があります。 このクイックチュートリアルでは、ネットワークの状態と使用する可能性のあるいくつかのツールをいつどのようにシミュレートできるかについて説明します。

2. 特定のネットワーク条件をシミュレートする理由/時期

通常の状況では、極端なネットワーク条件または一般的でないネットワーク条件についてアプリケーションをテストするのはやり過ぎかもしれません。 たとえば、アプリケーションバックエンドと同じサブネットワークにあるデータベースとの間の通信で高いエラー率を期待することは意味がありません。 ただし、それらが大陸から離れており、衛星リンクを介して接続されている場合は、より高い遅延とエラー率を考慮する必要があります。 したがって、特定のネットワーク条件シミュレーションの必要性を確認するには、ソリューションの各コンポーネントが互いにどのように接続されるかを理解することをお勧めします。 通信パスごとに、パフォーマンス要件、スループット、遅延、接続速度、堅牢性、同時実行性などを確立する必要があります。 また、パフォーマンス要件が満たされない可能性のあるネットワークを通過する通信フローに注意する必要があります。 適切な候補は、当社のガバナンス下にないネットワーク(たとえば、インターネット、顧客自身のISPなど)または非理想的なコンポーネント(衛星または無線リンク、高ノイズの物理層、混雑したネットワークなど)に依存するネットワークです。 次の図は、エンドユーザーとプレゼンテーション層の間のネットワークトラフィックを調整できるトラフィックシェーピングプロキシのアーキテクチャ上の配置を示しています。

3. 遅いリンクとエラーのシミュレーション

通信フローに応じて、特定のシミュレーション条件を追加したいと思います。 いくつかの解決策があります。 エンドユーザーの観点からWebアプリケーションの帯域幅制限をシミュレートするだけでよい場合は、Webブラウザーを使用できます。 Chrome、Edge、Firefoxなどの多くのWebブラウザーには、開発者のモード設定でトラフィックを抑制する構成があります。 パケットエラーと遅延については、他のソリューションを使用する必要があります。 より多くの異なる条件のテストが必要な場合、またはソリューション内のソフトウェアコンポーネント間の問題をシミュレートするために、一部の仮想マシン環境では、帯域幅が制限されているか、パケット損失がある仮想ネットワークを作成できます。 さらに制御するために、ソフトウェアコンポーネント間にルーターとして動作する仮想ホストを追加して、遅延、パケットの重複、無秩序化などの他の効果を追加できます。 これらのルーターでは、パケットフィルタリングまたはトラフィックシェーピングプロキシを使用できます。 ソフトウェアコンポーネント間のトラフィックを形成するために使用する可能性のあるソリューションのいくつかは次のとおりです。

3.1. インホストファイアウォールまたはパケットフィルタリング

多くのパケットフィルタリングソリューションには、特定のネットワークの問題をシミュレートできるスロットリングおよびパケット破棄ルールを追加するオプションがあります。 場合によっては、Linuxの iptablesやBSDベースのシステム(FreeBSD、NetBSD、macOS X)の pf など、オペレーティングシステムの組み込みパケットフィルターを使用しても実行できます。 、Windowsの clumsy dummynet (さまざまなOS)などのサードパーティソフトウェアを使用する必要があるかもしれません。

3.2. ネットワークプロキシアプリケーション

柔軟性と構成オプションを高めるために、 NetEm(ネットワークエミュレーション)Wondershaperなどのネットワークプロキシアプリケーションを使用する場合があります。 これらのプログラムは、パケットの複製や並べ替えなど、さらに広範なネットワークの問題を再現できます。 Webアプリケーションの場合、CharlesFiddlerなどのWebデバッグプロキシを使用することもできます。 低速接続のシミュレーションを可能にするだけでなく、ストレステストの作成を容易にするためにテストケースを保存および再生するツールもあります。

3.3. Webブラウザ開発者モード

エンドユーザーエクスペリエンスのみを評価する必要がある場合は、Webブラウザーのネイティブ開発者モードコンソールを使用できます(例: chrome devtools )。 これらのツールには、さまざまなデバイスや画面サイズをエミュレートできるだけでなく、ネットワーク調整機能もあります。 このようにして、帯域幅が制限されているユーザーのユーザーエクスペリエンスをシミュレートできます。

3.4. 仮想マシンソフトウェア

VMwareESXHyperVなどの多くの仮想マシンソフトウェアには、ソフトウェア定義の仮想スイッチがバンドルされています。 仮想ポートのスループットを制限するだけでなく、ソフトウェアで複雑なネットワーク構成を再作成することもできます。

4. 結論

このチュートリアルでは、特定のネットワークの問題と条件の下でアプリケーションの動作を調査する必要がある条件について説明しました。 特定のネットワーク条件のシミュレーションが必要ないと感じた場合でも、少なくとも一般的なネットワークの問題(接続の損失やタイムアウトなど)についてアプリケーションをテストする必要があります。 しかし、場合によっては、さらに先に進む必要があります。 多くのアプリケーションドメインでは、システムが信頼性の低いネットワーク条件で動作できることを確認することが不可欠です。 それらについては、適切にシミュレートしてテストしてください。