/httpbench

Fine tuned http/s benchmark framework with synchronization across requests and detailed trace.

Primary LanguageGoApache License 2.0Apache-2.0

[TOC]

Purpose

Fine tuned http/s benchmark framework with synchronization across requests and detailed trace.

Motivation

In order to reliably test invocation latency and benchmark FaaS providers, a benchmark tool with fine grained control over the request and the results. The major issue with current benchmarking tools is that they didn't allow us to synchronize between the stages of request while testing.

For example, a simple test of 3 concurrent requests with a delay of 20ms to an endpoint resulted in an unreliable invocation latency results, because it took into affect the dns resolve time, the tcp handshake and tlshandshake time, and the delay didn't have the desired effect, requests invoked the endpoint in random times.

This was due to the fact that the invocation accord AFTER the tlshandshake.

httpbench allowed us to wait for the 3 concurrent requests to finished the tls handshake, and then release each one with 20ms delay between them.

Hooks

Hooks

	GetConn
	DNSStart
	DNSDone
	ConnectStart
	ConnectDone
	TLSHandshakeStart
	TLSHandshakeDone
	GotConn
	WroteHeaders
	WroteRequest
	Got100Continue
	GotFirstResponseByte
	Wait100Continue

Presets

Over time presets where added to enable more test types:

RequestPerDuration

RequestPerDuration

ConcurrentRequestsUnsynced

ConcurrentRequestsUnsynced

ConcurrentRequestsSynced

ConcurrentRequestsSynced

ConcurrentRequestsSyncedOnce

ConcurrentRequestsSyncedOnce

RequestsForTimeGraph

RequestsForTimeGraph

ConcurrentForTimeGraph

ConcurrentForTimeGraph

Test

Should trust the included private key in order to run locally (or add your own trusted one) Integration tests cannot run parallel at the moment (TODO: add different server process for each test in order to run parallel)