私は現在、一連のリクエストとシステムの状態に基づいてスケジュールを決定するシステムを使用しています。
実際の入力のストリームを取得し、一部のコンポーネントをモックアウトして、残りのコンポーネントに対してシミュレーションを実行したいと思います。アイデアは、システム容量に関する計画(つまり、特定のコンポーネントをいつスケーリングするか)、特定の障害モードの追跡、およびコードベースへの変更の影響の分析(つまり、バージョンAのシミュレーションとバージョンBのシミュレーションの比較)に使用することです。 。
適切な入力ストリームを生成することを除いて、これに関連するすべてを行うことができます。本番環境からの正確な入力を再生することは、私が見つけようとしている動作の一部を引き出すのに十分な長さのデータストリームを取得するのが難しいため、あまり役に立ちませんでした。言い換えれば、300日の入力で生産が失敗した場合、それが失敗するまで、私はそれを見つけるのに十分なデータを持っていません。同じ入力セットを繰り返すことが考慮されています。しかし、最初の数回の試行の後、開発者は全員、シミュレーションが「よりランダムに必要」であるように見えることに同意します。
この特定のシステムについて:
- 入力は、一連の不規則な間隔のイベント(つまり、離散時間と連続状態空間を伴う確率過程)です。
- プロパティは互いに独立していません。
- プロパティからさらに独立しているのは、他のプロパティの複合体であり、本質的に、私には常に見えません(マルチモーダル分布につながります)。
- リクエスト間隔は他のプロパティから独立していません(つまり、少量のリソースに対する大量のリクエストがバッチで処理されますが、大きなリクエストは処理されません)。
- その中にフィードバックループがあります。
- それはおそらく混沌としている。
それで:
さまざまなプロパティ(間隔を含む)の特定の分布を持つ入力イベントのストリームが与えられた場合、独立していない多数のプロパティにわたって同じ分布を持つイベントの無限のストリームを生成するにはどうすればよいですか?
周りを見回して、マルコフ連鎖モンテカルロシミュレーションを行う必要があると思います。私の問題は、既存の入力データからマルコフ連鎖を構築する方法を理解することです。