# Temporal performance with golang microservice, Cassandra & Elasticsearch

**URL:** <https://community.temporal.io/t/temporal-performance-with-golang-microservice-cassandra-elasticsearch/4770>\
**Category:** Community Support\
**Tags:** go-sdk, elasticsearch, cassandra, docker, performance\
**Created:** [May 23, 2022, 12:51pm UTC](https://community.temporal.io/t/temporal-performance-with-golang-microservice-cassandra-elasticsearch/4770 "2022-05-23T12:51:11Z")\
**Posts on this page:** 1\
**Showing post:** 6

<div class="post-metadata">

**Author:** ![tihomir](https://sea2.discourse-cdn.com/flex016/user_avatar/community.temporal.io/tihomir/32/6580_2.png) [@tihomir](https://community.temporal.io/u/tihomir)\
**Post date:** [May 25, 2022, 12:03am UTC](https://community.temporal.io/t/temporal-performance-with-golang-microservice-cassandra-elasticsearch/4770/6 "2022-05-25T00:03:20Z")

</div>

> Is there any more configuration that can be configured to improve the throughput?

One thing you can check is your persistence latencies. Try Prometheus query:

`histogram_quantile(0.95, sum(rate(persistence_latency_bucket{}[1m])) by (operation, le))`  
for CreateWorkflowExecution, UpdateWorkflowExecution, UpdateShard operations. You will have to establish your own base line for these latencies, but is a good thing to look at.

Another thing to consider is worker capacity (number of pollers).  
See [this](https://community.temporal.io/t/i-want-to-use-temporal-workers-as-runners-for-my-multi-tenant-platform/4768/4) post and our [worker tuning guide](https://docs.temporal.io/operation/how-to-tune-workers/) for more info.

Regarding shard count, try looking at shard lock contention:

`histogram_quantile(0.99, sum(rate(lock_latency_bucket{operation="ShardInfo"}[1m])) by (le))`

if this latency is too high indicates that your did not set enough shards.

How many frontend servers do you have handling client requests? Typically you want to have a L7 load balancer to round-robin client load among available frontend servers.

Another thing you could look at are resource exhausted issues.  
Prometheus query:  
`sum(rate(service_errors_resource_exhausted{}[1m])) by (resource_exhausted_cause)`

Look for error causes: RpsLimit, ConcurrentLimit, and SystemOverloaded. These are per service instance.

---

_[View the full topic](https://community.temporal.io/t/temporal-performance-with-golang-microservice-cassandra-elasticsearch/4770)._
