ToCloud9 provides a variety of microservices that operate alongside AzerothCore/TrinityCore and enable clustering support, making the system scalable and highly available.
The primary concept underlying the current architecture is to enhance the scalability of TrinityCore/AzerothCore with minimal modifications on their end.
To fulfill these objectives, a game-load-balancer microservice has been developed. Functioning akin to an API Gateway, the game-load-balancer analyzes packets and strategically routes them to the Gameserver or generates requests to other services for handling.
The simplified architecture described below.
If you'd like to read more, you can take a look at the pillars that form the foundation of ToCloud9 here.
Currently, it is possible to play the game, but some functionalities still do not support a distributed architecture (clustering). Here is a list of features/tasks that, once completed, will enable it to replace the widely used unscalable monolith (vanilla TrinityCore/AzerothCore). The status is relevant for integration with AzerothCore.
Feature/Task | Status | Comment |
---|---|---|
Gameservers and other services discovery | ✅ | |
Services communication with NATS and gRPC | ✅ | |
Redirect players from one gameserver to another on map change | ✅ | |
Gameservers crash recovery | ✅ | Players would be redirected to the another available gameserver |
Automatic load balancing maps between gameservers | ✅ | |
Shared pool of GUIDs | ✅ | Sharing Players, Items, Instance GUIDs |
"Who" opcode handling | ✅ | |
Whispering in cluster support | ✅ | |
Guilds in cluster support | 90% | Guild creation functionality is missing |
Guild bank in cluster support | 0% | |
Mail in cluster support | ✅ | |
Auction house in cluster support | 0% | |
Friends list in cluster support | 0% | |
Global channels in cluster support | 0% | |
Parties and raids in cluster support | 80% | Not implemented: ready checks, instances reset on player request, prolonging instance bind, moving raid members between groups, and updating group members state like health when on different maps |
Battlegrounds in cluster support | 0% | |
Arenas in cluster support | 0% | |
LFG in cluster support | 0% | |
Sync transports between gameservers | ✅ | |
Helm chart support | ✅ |
Utilize the helm chart to seamlessly deploy the solution in your Kubernetes cluster. Kudos to @2o1o0 for the solution.
Prerequisites:
- Database for TrinityCore or AzerothCore;
- TrinityCore or AzerothCore data folder (dbc, vmaps, mmaps) and config (ect folder).
- Docker & docker-compose (for 'Docker-compose' approach);
Steps:
- Fill in
.env
file with relevant data. - Apply migrations to the characters DB from this folder - sql/characters/mysql/*
# For TrinityCore:
$ docker-compose --profile tc up -d
# For AzerothCore:
$ docker-compose --profile ac up -d
For Windows & AzerothCore use this guide.
For Linux and Mac - TBD.
You can utilise Perun tool to simplify managing of all apps/microservices.
We have the next Discord channel where you can ask any questions and share your feedback.
See LICENSE.