sezaru

sezaru

Hello there.

I have a question regarding how to handle load balancing and zero downtime in case of server crashes for my specific use case.

First I will explain what my system architecture looks like as show in the image bellow:

So, my Server A consists in a bunch of elixir nodes, one node is the Phoenix node which my clients can make requests.

The Fetcher node is in charge of connecting to third-party endpoints (via rest and websocket) and fetch new data from them. This new data is processed and will be sent to the Notification node.

The Notification node is in charge of sending push notifications to the clients. First the client sends its app token to the Phoenix node and a list of type of notifications he is interested in receiving, next the Phoenix node sends this token and list to the Notification node so it knows to who send the new data received from the Fetcher node when it arrives.

Server A is inside one server hardware right now (due to budget constraints), but this is not good since if this hardware goes down for some reason the whole system goes down too. So I was thinking on how could I duplicate this structure inside another server so if one goes down the other is used, something like this:

Now I have Server A and Server B, if one goes down the other will still (hopefully) be working. Also, both Fetcher Node A and Fetcher Node B would be connected to the same third-party endpoints, so both will receive the same external data.

The issue that I can see with this approach is in the Notification nodes.

The first one is that both of them will be sending notifications to the clients, so the clients will receive duplicated notifications. To fix that I need some way to elect one of the two Notification nodes to be the master and allow only this node to send notifications. Also I need to know if the master node goes down so the slave one can start sending the notifications until the master node goes up again.

The second issue is about synchronization of client tokens and list of desired notifications. Since the load balancer will distribute the client requests between both servers, I need a way to keep data about the client tokens, desired notifications synced between both Notification nodes.

Do you guys have any suggestion of what is the best way to handle these cases in Elixir?

Thanks for the help.

Update:

I just found a library called ra from rabbitmq which implements the Raft concensus algorithm.

Seems like a great possible solution for my case. There is a great talk about it here btw: link

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
apz
I’m new to elixir and just tried to install the elixirLS extension for VScode(ium) and it is throwing some errors that I would like help ...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews