Skip to content
This repository was archived by the owner on Nov 7, 2022. It is now read-only.

Commit 1ce867d

Browse files
authored
Publish initial performance numbers (#436)
* Add initial performance numbers
1 parent 6d4c33d commit 1ce867d

2 files changed

Lines changed: 68 additions & 1 deletion

File tree

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ lint:
4848

4949
.PHONY: install-tools
5050
install-tools:
51-
go get -u golang.org/x/lint/golint
51+
go get golang.org/x/lint/golint
5252

5353
.PHONY: agent
5454
agent:

PERFORMANCE.MD

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# OpenCensus Service Performance
2+
3+
The performance numbers that follow were generated using version 0.1.3 of the
4+
OpenCensus Service, are applicable primarily to the OpenCensus Collector and
5+
are measured only for traces. In the future, more configurations will be tested.
6+
7+
Note with the OpenCensus Agent you can expect as good if not better performance
8+
with lower resource utilization. This is because the OpenCensus Agent does not
9+
today support features such as batching or retries and will not support
10+
tail-sampling.
11+
12+
It is important to note that the performance of the OpenCensus Collector depends
13+
on a variety of factors including:
14+
15+
* The receiving format: Jaeger thrift (14268) or Zipkin v2 JSON (9411)
16+
* The size of the spans (tests are based on number of tags): 20
17+
* Whether tail-sampling is enabled or not
18+
* CPU / Memory allocation
19+
* Operating System: Linux
20+
21+
## Testing
22+
23+
Testing was completed on Linux using the [Synthetic Load Generator
24+
utility](https://github.com/Omnition/synthetic-load-generator) and results can
25+
be reproduced in your own environment. It is important to note that this utility
26+
has a few configurable parameters which can impact the results of the tests. The
27+
parameters used are defined below.
28+
29+
* FlushInterval(ms) [default: 1000]
30+
* MaxQueueSize [default: 100]
31+
* SubmissionRate(spans/sec): 100,000
32+
33+
## Results without tail-based sampling
34+
35+
| Span<br>Format | CPU<br>(2+ GHz) | RAM<br>(GB) | Sustained<br>Rate | Recommended<br>Maximum |
36+
| :---: | :---: | :---: | :---: | :---: |
37+
| Jaeger Thrift | 1 | 2 | ~14K | 12K |
38+
| Jaeger Thrift | 2 | 4 | ~27.5K | 24K |
39+
| Zipkin v2 JSON | 1 | 2 | ~10.5K | 9K |
40+
| Zipkin v2 JSON | 2 | 4 | ~22K | 18K |
41+
42+
If you are NOT using tail-based sampling and you need higher rates then you can
43+
either:
44+
45+
* Divide traffic to different collector (e.g. by region)
46+
* Scale-up by adding more resources (CPU/RAM)
47+
* Scale-out by putting one or more collectors behind a load balancer or k8s
48+
service
49+
50+
## Results with tail-based sampling
51+
52+
> Note: Additional memory is required for tail-based sampling
53+
54+
| Span<br>Format | CPU<br>(2+ GHz) | RAM<br>(GB) | Sustained<br>Rate | Recommended<br>Maximum |
55+
| :---: | :---: | :---: | :---: | :---: |
56+
| Jaeger Thrift | 1 | 6 | ~11.5K | 10K |
57+
| Jaeger Thrift | 2 | 8 | ~23K | 20K |
58+
| Zipkin v2 JSON | 1 | 6 | ~8.5K | 7K |
59+
| Zipkin v2 JSON | 2 | 8 | ~16K | 14K |
60+
61+
If you are using tail-based sampling and you need higher rates then you can
62+
either:
63+
64+
* Scale-up by adding more resources (CPU/RAM)
65+
* Scale-out by putting one or more collectors behind a load balancer or k8s
66+
service, but the load balancer must support traceID-based routing (i.e. all
67+
spans for a given traceID need to be received by the same collector instance)

0 commit comments

Comments
 (0)