Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Second redis service is redundant #73

Closed
zavermax opened this issue Feb 21, 2017 · 4 comments
Closed

Second redis service is redundant #73

zavermax opened this issue Feb 21, 2017 · 4 comments

Comments

@zavermax
Copy link

There are two redis services and one worker service. Worker service would start, resolve redis host name to an ip and use this ip until stopped. Second redis service is never going to be talked to.

@alexsandro-xpt
Copy link

I saw something like this at docker-stack.yml but I have some question about Redis IP used at Worker Services to connect to Redis.

There are twice Redis instance, I thing, Worker never discover a second Redis instance. May be, Redis shoud be configured as node of Redis if is possible.

Another thing is about Redis host name, the Vote App and Worker Services connect at redis host name. If at cluster have twice Redis instance, Vote every time connect to what Redis instance?

Some times when I vote, the vote is not computed, I guess, my vote was at another Redis which is not connected by Worker Services.

What you think about that @zavermax ?

@gesellix
Copy link

gesellix commented Mar 26, 2017

If I understand the .NET worker correctly, it tries to reconnect on failure. So a changed ip address might be compensated. The Java worker doesn't seem to be resilient on connection errors, yet.

The fact that a worker can only connect to a single Redis instance indeed arises problems when votes go to the "other" instance. The worker just won't see any votes. I see several options here:

  1. reduce the Redis replicas to a single instance
  2. implement a Redis cluster, so that data will be synced between all replicas
  3. enforce reconnects on the worker side, so that each Redis instance will be read over time. This wouldn't be the most elegant solution, but it has certain adavantages (no-cluster Redis setup, built-in resiliency)
  4. always have a worker for each Redis instance (well, that's probably the worse "solution", enforcing symmetry between services and their replicas)

@alexsandro-xpt
Copy link

alexsandro-xpt commented Mar 27, 2017

@gesellix At my demo enviroment I reduce the Redis replicas to a single instance and all work fine.

But, I guess the better solution is implement a Redis Cluster like you told us.

Another bad thing I see at .NET worker is that while(true) https://github.com/docker/example-voting-app/blob/master/worker/src/Worker/Program.cs#L29 it's cost lot of CPU unnecessary. May be implement something better.

I think change Redis for a RabbitMQ.

@ManoMarks
Copy link
Contributor

Fixed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants