Home

Awesome

circuit-benchmarks

This repository does benchmarking for cep21/circuit.

Benchmarking

Circuit is more efficient than go-hystrix in every configuration. It has comparable efficiency to other implementations, faster for most when running with high concurrency. Run benchmarks with go test -v -benchmem -run=^$ -bench=. . 2> /dev/null.

I benchmark the following alternative circuit implementations. I try to be fair and if there is a better way to benchmark one of these circuits, please let me know!

> go test -v -benchmem -run=^$ -bench=. . 2> /dev/null
goos: darwin
goarch: amd64
pkg: github.com/cep21/circuit-benchmarks
cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
BenchmarkCiruits
BenchmarkCiruits/cep21-circuit
BenchmarkCiruits/cep21-circuit/Hystrix
BenchmarkCiruits/cep21-circuit/Hystrix/passing
BenchmarkCiruits/cep21-circuit/Hystrix/passing/1
BenchmarkCiruits/cep21-circuit/Hystrix/passing/1-12       	 1469689	       849.6 ns/op	     240 B/op	       4 allocs/op
BenchmarkCiruits/cep21-circuit/Hystrix/passing/75
BenchmarkCiruits/cep21-circuit/Hystrix/passing/75-12      	 4492564	       258.4 ns/op	     240 B/op	       4 allocs/op
BenchmarkCiruits/cep21-circuit/Hystrix/failing
BenchmarkCiruits/cep21-circuit/Hystrix/failing/1
BenchmarkCiruits/cep21-circuit/Hystrix/failing/1-12       	 4487305	       272.3 ns/op	      16 B/op	       1 allocs/op
BenchmarkCiruits/cep21-circuit/Hystrix/failing/75
BenchmarkCiruits/cep21-circuit/Hystrix/failing/75-12      	17190705	        78.92 ns/op	      16 B/op	       1 allocs/op
BenchmarkCiruits/cep21-circuit/Minimal
BenchmarkCiruits/cep21-circuit/Minimal/passing
BenchmarkCiruits/cep21-circuit/Minimal/passing/1
BenchmarkCiruits/cep21-circuit/Minimal/passing/1-12       	 4412586	       273.3 ns/op	       0 B/op	       0 allocs/op
BenchmarkCiruits/cep21-circuit/Minimal/passing/75
BenchmarkCiruits/cep21-circuit/Minimal/passing/75-12      	16031582	        73.30 ns/op	       0 B/op	       0 allocs/op
BenchmarkCiruits/cep21-circuit/Minimal/failing
BenchmarkCiruits/cep21-circuit/Minimal/failing/1
BenchmarkCiruits/cep21-circuit/Minimal/failing/1-12       	 4413255	       235.4 ns/op	      16 B/op	       1 allocs/op
BenchmarkCiruits/cep21-circuit/Minimal/failing/75
BenchmarkCiruits/cep21-circuit/Minimal/failing/75-12      	28415378	        51.44 ns/op	      16 B/op	       1 allocs/op
BenchmarkCiruits/cep21-circuit/UseGo
BenchmarkCiruits/cep21-circuit/UseGo/passing
BenchmarkCiruits/cep21-circuit/UseGo/passing/1
BenchmarkCiruits/cep21-circuit/UseGo/passing/1-12         	  859346	      1338 ns/op	     272 B/op	       5 allocs/op
BenchmarkCiruits/cep21-circuit/UseGo/passing/75
BenchmarkCiruits/cep21-circuit/UseGo/passing/75-12        	 4132455	       277.2 ns/op	     272 B/op	       5 allocs/op
BenchmarkCiruits/cep21-circuit/UseGo/failing
BenchmarkCiruits/cep21-circuit/UseGo/failing/1
BenchmarkCiruits/cep21-circuit/UseGo/failing/1-12         	  722814	      1685 ns/op	     304 B/op	       7 allocs/op
BenchmarkCiruits/cep21-circuit/UseGo/failing/75
BenchmarkCiruits/cep21-circuit/UseGo/failing/75-12        	 3615490	       333.8 ns/op	     304 B/op	       7 allocs/op
BenchmarkCiruits/GoHystrix
BenchmarkCiruits/GoHystrix/DefaultConfig
BenchmarkCiruits/GoHystrix/DefaultConfig/passing
BenchmarkCiruits/GoHystrix/DefaultConfig/passing/1
BenchmarkCiruits/GoHystrix/DefaultConfig/passing/1-12     	  230498	      4716 ns/op	    1249 B/op	      22 allocs/op
BenchmarkCiruits/GoHystrix/DefaultConfig/passing/75
BenchmarkCiruits/GoHystrix/DefaultConfig/passing/75-12    	  477273	      2650 ns/op	    1290 B/op	      24 allocs/op
BenchmarkCiruits/GoHystrix/DefaultConfig/failing
BenchmarkCiruits/GoHystrix/DefaultConfig/failing/1
BenchmarkCiruits/GoHystrix/DefaultConfig/failing/1-12     	  318826	      3800 ns/op	    1270 B/op	      23 allocs/op
BenchmarkCiruits/GoHystrix/DefaultConfig/failing/75
BenchmarkCiruits/GoHystrix/DefaultConfig/failing/75-12    	 1000000	      1095 ns/op	    1245 B/op	      24 allocs/op
BenchmarkCiruits/rubyist
BenchmarkCiruits/rubyist/Threshold-10
BenchmarkCiruits/rubyist/Threshold-10/passing
BenchmarkCiruits/rubyist/Threshold-10/passing/1
BenchmarkCiruits/rubyist/Threshold-10/passing/1-12        	  731997	      1497 ns/op	     372 B/op	       6 allocs/op
BenchmarkCiruits/rubyist/Threshold-10/passing/75
BenchmarkCiruits/rubyist/Threshold-10/passing/75-12       	 2178349	       649.3 ns/op	     346 B/op	       5 allocs/op
BenchmarkCiruits/rubyist/Threshold-10/failing
BenchmarkCiruits/rubyist/Threshold-10/failing/1
BenchmarkCiruits/rubyist/Threshold-10/failing/1-12        	10023756	       111.5 ns/op	       0 B/op	       0 allocs/op
BenchmarkCiruits/rubyist/Threshold-10/failing/75
BenchmarkCiruits/rubyist/Threshold-10/failing/75-12       	 1000000	      1146 ns/op	     335 B/op	       5 allocs/op
BenchmarkCiruits/gobreaker
BenchmarkCiruits/gobreaker/Default
BenchmarkCiruits/gobreaker/Default/passing
BenchmarkCiruits/gobreaker/Default/passing/1
BenchmarkCiruits/gobreaker/Default/passing/1-12           	 5648436	       192.4 ns/op	       0 B/op	       0 allocs/op
BenchmarkCiruits/gobreaker/Default/passing/75
BenchmarkCiruits/gobreaker/Default/passing/75-12          	 2886820	       426.9 ns/op	       0 B/op	       0 allocs/op
BenchmarkCiruits/gobreaker/Default/failing
BenchmarkCiruits/gobreaker/Default/failing/1
BenchmarkCiruits/gobreaker/Default/failing/1-12           	11147300	       110.4 ns/op	       0 B/op	       0 allocs/op
BenchmarkCiruits/gobreaker/Default/failing/75
BenchmarkCiruits/gobreaker/Default/failing/75-12          	 5916306	       172.0 ns/op	       0 B/op	       0 allocs/op
BenchmarkCiruits/handy
BenchmarkCiruits/handy/Default
BenchmarkCiruits/handy/Default/passing
BenchmarkCiruits/handy/Default/passing/1
BenchmarkCiruits/handy/Default/passing/1-12               	  960382	      1081 ns/op	       0 B/op	       0 allocs/op
BenchmarkCiruits/handy/Default/passing/75
BenchmarkCiruits/handy/Default/passing/75-12              	  959074	      1118 ns/op	       0 B/op	       0 allocs/op
BenchmarkCiruits/handy/Default/failing
BenchmarkCiruits/handy/Default/failing/1
BenchmarkCiruits/handy/Default/failing/1-12               	 1000000	      1037 ns/op	       0 B/op	       0 allocs/op
BenchmarkCiruits/handy/Default/failing/75
BenchmarkCiruits/handy/Default/failing/75-12              	 1164082	      1023 ns/op	       0 B/op	       0 allocs/op
BenchmarkCiruits/iand_circuit
BenchmarkCiruits/iand_circuit/Default
BenchmarkCiruits/iand_circuit/Default/passing
BenchmarkCiruits/iand_circuit/Default/passing/1
BenchmarkCiruits/iand_circuit/Default/passing/1-12        	15529444	        75.03 ns/op	       0 B/op	       0 allocs/op
BenchmarkCiruits/iand_circuit/Default/passing/75
BenchmarkCiruits/iand_circuit/Default/passing/75-12       	 8886270	       134.2 ns/op	       0 B/op	       0 allocs/op
BenchmarkCiruits/iand_circuit/Default/failing
BenchmarkCiruits/iand_circuit/Default/failing/1
BenchmarkCiruits/iand_circuit/Default/failing/1-12        	65668842	        16.09 ns/op	       0 B/op	       0 allocs/op
BenchmarkCiruits/iand_circuit/Default/failing/75
BenchmarkCiruits/iand_circuit/Default/failing/75-12       	474891303	         2.462 ns/op	       0 B/op	       0 allocs/op
PASS
ok  	github.com/cep21/circuit-benchmarks	50.511s

Limiting to just high concurrency passing circuits (the common case).

BenchmarkCiruits/cep21-circuit/Minimal/passing/75-12      	16031582	        73.30 ns/op	       0 B/op	       0 allocs/op
BenchmarkCiruits/GoHystrix/DefaultConfig/passing/75-12    	  477273	      2650 ns/op	    1290 B/op	      24 allocs/op
BenchmarkCiruits/rubyist/Threshold-10/passing/75-12       	 2178349	       649.3 ns/op	     346 B/op	       5 allocs/op
BenchmarkCiruits/gobreaker/Default/passing/75-12          	 2886820	       426.9 ns/op	       0 B/op	       0 allocs/op
BenchmarkCiruits/handy/Default/passing/75-12              	  959074	      1118 ns/op	       0 B/op	       0 allocs/op
BenchmarkCiruits/iand_circuit/Default/passing/75-12       	 8886270	       134.2 ns/op	       0 B/op	       0 allocs/op