単語の再生の流れについては、多くの学生に見知らぬ人が、様々な理由なしの練習のための会社の大半noです、最も現実的な理由は、全体の流れリンク再生大量の書き込み操作を行うことが原因で、システムの変革を伴うためにバインドされています、データ処理および他の脱感作、技術的な困難やリスクが比較的高い、アリババなどのすべての企業は、システムの変革に大きな流れと同じシナリオが完了状況ではないされていない、入力と出力の間の不均衡があり、これだけではなく、技術の問題ですが、また文化のサポートを必要とする、我々はまだビューの個人的な観点からいくつかのシミュレーションを行うことができますが、この時間は、私は軽量なツールフローgoreplay再生使用とまとめ。
まず、goreplayワークフローの下に簡単な説明:
どのような状況下では、我々はそれを確認するためにgorepaly使用することができますか?
プレリリース環境で1.回帰と検証機能を行う実際のトラフィックを必要とします。
帯域幅のトラフィックのしきい値ことを確認します。2.
フラックス対3.真のオンライン検証
検証するには?
ソースコードのダウンロードパッケージ、注意提供:使用goreplayはsudoの権限またはroot権限を使用して行われました。
https://pan.baidu.com/s/1cfBnfbLaQntak4SMD8YPKwパスワード:jcfl
1.解凍をダウンロード
タールあるxv gor_1.0-RC2_x64.tar.gz
出力端子から2キャプチャと流れ
sudoの./goreplay --input-生:8003 --output-STDOUT
上記のコマンドは、出力端子とstdoutを通じて、ポート8003上のすべてのトラフィックを監視します。あなたは、ブラウザのポート8003またはカールを介してアクセスした後、ターミナルのすべてのHTTP要求GOR出力を表示することができます。
別のマシンへ3.キャプチャトラフィックとリアルタイム同期
sudoの./goreplay --input-生:8003 --output-のhttp = "のhttp://例:8005"
リアルタイム同期8003ポートの訪問のhttpの上記のコマンドの流れ://例:8005サーバーでは、ときに最初にアクセスサーバー、あなたは第二段階に同じ順序要求にトラフィックが表示されます。
4.ファイルを保存へのトラフィックをキャプチャして、他のマシンにリリースされ、リアルタイムモードを使用することをお勧めします
Goreplayモードを保存した後、この最初のリリースを提供しますので、時々トラフィックは、リアルタイムの同期を達成することは非常に困難です。
--output-ファイルを通る流れを節約する最初のステップ:
sudoの./goreplay --input-生:8003 --output-ファイル= requests.gor
上記のコマンドは、ポート8003を流れ、ファイルに保存requests.gor(接尾辞は、接尾辞のリリースによって測定されるような他の問題がある、こと.gorなければなりません)。
私たちは、要求内容のすべてを(下図のように)を保持しているゴア開いているファイルの発見を、記録が終了しました:
第二段階は、保存したフローチャートとして、私たちは道に元のリリースを実行することができます。
./goreplay --input-ファイルrequests.gor --output-HTTP = "のhttp:// localhostを:8005"
上記のコマンドは、HTTPを介した同じ時系列にリリースされ、サーバrequests.gorに保存されているすべての要求を解放します:// localhostを:8005。
添付一般的に使用されるパラメータは説明しました:
生---inputキャッチに#HTTPトラフィックは、IPアドレスとポートを指定する必要があります
--input-ファイル#は--output-ファイルトラフィックによって保存されたファイルを受け取ります
--input-TCP#Goreplayトラフィック集約インスタンスGoreplayを取得するために複数のインスタンスを
--output-STDOUT#出力端子
--output-TCPの#取得したトラフィックは、別の例Goreplayに転送しました
--output-HTTPは#リリース対象サーバを流したときに指定した、あなたは、IPアドレスとポート--output-ファイル#フローレコードストアファイルを指定する必要があります
Goreplay速度の加速機構と要求フィルタ
速かどうかは、両方の実用的な意義を加速するだけでなく、ハイライトの一つは、トラフィックの再生します:
1.レート制限メカニズム:
直接テストサーバーの同期に本番サーバーへのすべてのトラフィックは現実的ではありませんので、本番サーバーの設定は、テストサーバーの設定よりも一般的にはるかに高いため、goreplayの提供2つの戦略:
1秒あたりの要求数を制限
sudoの./goreplay --input-TCP:888 --output-HTTPは "http://staging.com | 20" #(リミット秒以下あたり20のリクエスト)
sudo ./goreplay --input-raw :80 --output-tcp "replay.local:888|20%" # (每秒请求数限制20%以内)
基于Header或Url的参数限制一些请求,为指定的header或者url的请求设定限制的百分比。
sudo ./goreplay --input-raw :80 --output-tcp "replay.local:888|20%" --http-header-limiter "X-API-KEY: 20%"
sudo ./goreplay --input-raw :80 --output-tcp "replay.local:888|20%" --http-param-limiter "api_key: 20%"
2.可以限制一些流量,我们就可以进行流量翻倍,也就是我刚刚提到的流量加速:
./gor --input-file '696_0.gor|1000%' --input-file-loop --output-http 'http://www.xxx.com' --output-http-workers 10 --stats --output-http-stats
1000%等于翻了10倍,workers代表消费的进程数,流量翻倍建议梯度缓慢增加,防止造成应用直接宕机的情况;
3.请求过滤:
当你需要捕捉指定路径的请求流量时,可以使用该机制, 如只同步/api路径下的请求
sudo ./goreplay --input-raw :8080 --output-http staging.com --http-allow-url /api
这样的方法可以对单请求进行压测,也是非常实用
另外还有其它一些参数用法:
--http-disallow-url #不允许正则匹配的Url
--http-allow-header #允许的 Header 头
--http-disallow-header #不允许的 Header 头
--http-allow-method #允许的请求方法,传入值为GET, POST, OPTION
执行结果查看:
./gor --input-file '696_0.gor|1000%' --input-file-loop --output-http 'http://www.cctester.com' --output-http-workers 10 --stats --output-http-stats
执行结果的查看,在很多文档中,并没有对执行结果有详尽的阐述,但结果的查看对性能测试具有最直接的意义,性能测试人员一般会从客户端工直接获取结果,不过相对成熟的互联网公司一般不会局限于此,我们有更多的服务端工具进行统计,很多公司会自己去研发,也有付费的工具如听云等,goreplay提供的结果相对简单(如下图),最后一列为取样数,倒数第二列为取样/时间,可以理解为我们常见的qps;
更多交流关注公众号:猿桌派