Git Product home page Git Product logo

tocloud9's Introduction

ToCloud9

ToCloud9 provides a variety of microservices that operate alongside AzerothCore/TrinityCore and enable clustering support, making the system scalable and highly available.

Architecture

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.

Current state

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

Deployment

Kubernetes Cluster

Utilize the helm chart to seamlessly deploy the solution in your Kubernetes cluster. Kudos to @2o1o0 for the solution.

Docker-Compose

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:

  1. Fill in .env file with relevant data.
  2. 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

Without Docker/Orchestration

For Windows & AzerothCore use this guide.

For Linux and Mac - TBD.

You can utilise Perun tool to simplify managing of all apps/microservices.

Community

We have the next Discord channel where you can ask any questions and share your feedback.

License

See LICENSE.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.