-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Integrate with FastHTTP (massive performance gains) #486
Comments
I played with this before and the reason I haven't pursued it further is that it'd break backwards compatibility at the library and CLI level (i.e. lack of HTTP2 support). If you're trying to benchmark (max load) rather than load test (how does this perform at this load point), then vegeta may not be the ideal tool. I'd recommend something like wrk2, or any other tool that can achieve those high request rates. On the other hand, yeah, it'd be nice if vegeta could yield higher request rates. But I don't think breaking backwards compatibility is worth it. |
@tsenart, it's possible to make an abstraction over HTTP client and use |
A lot of the functional options for the |
@tsenart, for example? |
@tsenart, I get it, my proposal is to make an abstraction layer over HTTP client and use fast library for HTTP1 and the standard one for HTTP/2. FastHTTP has HTTP/2 in roadmap btw. |
Yes, I understand, but that would be a non backwards compatible change. Unless you think of a way to maintain backwards compatibility while introducing that abstraction layer. |
@tsenart, hmm, you mean backwards compatibility of the API of |
Of the API surface of the library. Vegeta is not only a CLI but a library. |
@tsenart, hmmm, perhaps we could create a wrapper over FastHTTP which would implement net.HTTP interface? |
I'm not sure. My intuition is that would be very hard to do. |
@tsenart, Vegeta is much easier to use and more lightweight than JMeter, it already saved me a lot of time. And unlike wrk/wrk2/siege it is actively maintained. It is a very appealing idea to me to make it able to produce really huge loads. |
@AndreiPashkin, @blakewatters: PTAL #500, let's try to solve the open issues together. |
Proposal
We have been testing a number of load testing tools. One of my colleagues was able to generate significantly higher levels of load with
fasthttploader
than I was with Vegeta. After spending a bit of time drilling in, I figured out that the difference was entirely attributable to the use of the FastHTTP library.So I decided to do a quick and dirty port Vegeta to FastHTTP. The performance impacts are staggering:
I couldnt output a load above ~60k req/s on the stock net.HTTP implementation. I totally hacked the shit out of the codebase to get it running and there are trade-offs (loss of HTTP/2 in particular) but I pulled this off in an afternoon so I'd imagine we could land this in a few days worth of work.
There's probably an adapter approach to bifurcate the backing client. The biggest amount of work was around the wildly divergent Header implementations.
But these performance numbers are just nuts and I've verified the load from the server-side. It just absolutely cooks
The text was updated successfully, but these errors were encountered: