I need help creating a skill-based matchmaking system

So I’m thinking of making a game where, if it gets big enough, I would add a skill-based matchmaking system to it. SBMM gets a lot of bad rep due to it being pretty inaccurate in games like Fortnite and Warzone (I am also pretty sure they are always switching up the way it works), however, I think mine would be OK since it would try to pair you with servers/matches where your average Kill/Death Ratio was similar to the average one in that server.

I’m aware you would use MessagingService for this, and I’ve used it before; however, I have not used MessagingService for back-and-forth communication between servers, I have only used it for doing things like changing the music in all servers after someone bought a developer product to do so.

How my SBMM system would work:

---Player joins game.
---Is player following a friend?
------If yes, send them straight to their friend's server. 
------If no, proceed.
---Are there more than 5 active servers?
------If yes, proceed to SBMM. 
------If no, send player to a random server. No point in continuing.
---Does player have a decent number of kills and deaths to be able to compare?
------If no, then send them to a random server.
------If yes, proceed.
---Find player's KDR. 
---Use MessagingService to communicate to all servers the player's KDR
------Depending on how many servers there are, it might be a good idea to limit this to 50-100
--------How would I do this? MessagingService is supposed to communicate to ALL servers
---Script in a different server would get this information and perform math on
---Find average KDR in that server
---Is it equal to the KDR of the player we are comparing?
------If no, subtract the player's KDR from the server's average KDR.
-------Find absolute value of it.
-------Find the percent difference of the server's average KDR to the player's KDR
---This is the part where I'm confused. How would I send back information from all the servers that were a match of some sort to the specific server that created this request?
---Return the server ID + the percent difference of the average KDR there to the player's.
---Get back all server IDs + the % number they were compared to the player's KDR.
------When getting them back, look at each one. The one with the lowest % in comparison will be stored in a variable

When all comparing is done, send player to the server. Ideally, the % difference between the average server KDR and the player’s KDR will be less than 20%-25%, making the match somewhat fair.

I apologize for the weird formatting of my design matrix. Doing it this way was the only way I was able to visualize it in a clearer way

I was also thinking of allowing players to turn it on or off. If I did that I feel like a lot of players would simply turn it off, making this pointless and perhaps a statement on if this should even be featured at all in the game.

That being said, a non-invasive SBMM would be good to stop newer players from getting destroyed by seasoned ones, therefore chasing them away from the game.

How I would do this is by having a host server. The host server will store the data of all match servers made and that data will include the avg K:D. To create a host server, you would have a datastore which saves the job id of the host server. When the the host server closes, it will send a message to a random server and that will be the new host. A key in the datastore will be changed to the jobid of the new host server. Whenever a server wants to communicate with the host it can grab the jobid from the datastore.

Instead of using messaging service for the queue, I would use MemoryStoreService. When you grab a player from the queue, communicate with the host server which will do all the calculations for you. The host server will reply back with the code for the server which avg K:D is most similar to the players.

https://developer.roblox.com/en-us/api-reference/class/MemoryStoreService