システムを設計していて、機能だけでなく、パフォーマンスとスケーラビリティも決定するテストの作成を開始したいとします。さまざまな環境で大量のデータを処理するために共有できる手法はありますか?
5 に答える
パフォーマンスとスケーラビリティのテストに取り組む前に、機能テスト (開発ワークフローとして TDD を使用) を優先することを強くお勧めします。TDD は、コードが適切に設計され、疎結合であることを保証します。これにより、自動化されたパフォーマンスとスケーラビリティを作成することが非常に簡単になります。コードが疎結合の場合、依存関係を制御できます。依存関係を制御できるようになったら、記述したい高レベルのテストに必要な構成を作成できます。
さまざまな種類のテストを分離します。
- 機能テストを最初に行い、少量の模擬データを使用して単体テストを開始する必要があります。
- 次に、データ ストア内の少量のデータを使用して統合テストを行いますが、明らかに大きなデータ セットを含むストアと同じインスタンスではありません。
- パフォーマンスとスケーラビリティのテストを一緒に行うことで、開発の労力を削減できる可能性があります。
1 つの重要なヒント: テスト データ セットは、できるだけ現実的なものにする必要があります。本番データを使用し、必要に応じて匿名化します。ビッグ データのパフォーマンスはデータの統計的分布に依存するため、合成データは使用しません。たとえば、基本的に同じユーザー情報を持つ偽のユーザー データを 100 万回使用すると、値が広く分布している実際の乱雑なユーザー データとは大きく異なるスケーラビリティの結果が得られます。
より具体的なアドバイスが必要な場合は、使用しているテクノロジーを知る必要があります。Hadoop では、MRUnit を見てください。RDB の場合、DBUnit。Apache Bigtop は、特定のアプリケーション レベルのプロジェクトではなく、Hadoop のコア プロジェクトを対象としていますが、インスピレーションを与えることができます。
いくつかの機能テストを行います。いくつか検討してください リスク管理手法は、この投稿を参照してくださいビッグデータでリスク管理を処理する方法これは役に立ちます。
パフォーマンスのテストと測定には、静的データ ソースと入力を使用できます (巨大なダンプ ファイルまたは sqlite DB である可能性があります)。
テストを作成して統合ビルドに含めると、特定の関数呼び出しに X 秒以上かかるようになり、エラーがスローされます。
システムを構築するにつれて、その数が増加し、テストが中断されることがわかります。
機能の 80% を得るために時間の 20% を費やすことができ、残りの 80% はパフォーマンスとスケーラビリティに費やされます :)
スケーラビリティ - サービス指向のアーキテクチャについて考える