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.

tocloud9's People

Contributors

2o1o0 avatar dolefir avatar noisiver avatar walkline avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

tocloud9's Issues

Community?

I'm new to Go, but I'd like to help. Is there a discord server?

Gameservers crash recovery

This is a very good project, thank you for all your hard work!
I was wondering if I could use just one of the Gameservers crash recovery features, applied so that when the game server crashes, players will be redirected to another available game server.
Sorry, I can only use the translation software.
Also discord is not invited
Thanks again!

Typo in the guide for build without docker

I was trying both forms of installation and in the process without docker I discovered a small typo

go build -o bin/authserver.exe apps/authserver/cmd/authserver/main.go
go build -o bin/charserver.exe apps/charserver/cmd/charserver/main.go
go build -o bin/chatserver.exe apps/chatserver/cmd/chatserver/main.go
go build -o bin/game-load-balancer.exe apps/game-load-balancer/cmd/game-load-balancer/main.go
go build -o bin/servers-registry.exe apps/servers-registry/cmd/servers-registry/main.go
go build -o bin/guidserver.exe apps/guidserver/cmd/guidserver/main.go
go build -o bin/guildserver.exe apps/guildserver/cmd/guildserver/main.go
---> go build -o bin/groupserver.exe apps/guildserver/cmd/groupserver/main.go <----
go build -o bin/mailserver.exe apps/mailserver/cmd/mailserver/main.go

It should be
go build -o bin/authserver.exe apps/authserver/cmd/authserver/main.go
go build -o bin/charserver.exe apps/charserver/cmd/charserver/main.go
go build -o bin/chatserver.exe apps/chatserver/cmd/chatserver/main.go
go build -o bin/game-load-balancer.exe apps/game-load-balancer/cmd/game-load-balancer/main.go
go build -o bin/servers-registry.exe apps/servers-registry/cmd/servers-registry/main.go
go build -o bin/guidserver.exe apps/guidserver/cmd/guidserver/main.go
go build -o bin/guildserver.exe apps/guildserver/cmd/guildserver/main.go
---> go build -o bin/groupserver.exe apps/groupserver/cmd/groupserver/main.go <-----
go build -o bin/mailserver.exe apps/mailserver/cmd/mailserver/main.go

The issue was with the group server.
but after checking things over this fixes the go build process.

I hope this helps some
Thank you so much for your hard work.
Hopefully once I fully understand the framework I will be able to assist you in this project.
This is very close to how Blizz Servers are structured.

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.