Hyperscale Minecraft Server Blueprint

minecraftly

Administrator
Joined
Sep 4, 2014
Messages
411
Reaction score
0
Points
0
Website
m.ly
Credits
0
Introductions
I've thought about a solution for this for quite a long time. I've come to a conclusion that we should make something we can be very proud of, and extend the Minecraft experience like no one has ever done before. Hyperscale Minecraft survival server is possible. Imagine the followings as references of what I'm talking about:
  • Each player owns one world. The world is their own land with the size of 1024 x 1024 or more.
  • "World" includes normal world, nether and the end
  • He/she can only set home, set warps, etc.. inside his world.
  • He or she can only chat inside his world (including nether and the end)
  • He/she can private message other players anywhere. (Use BungeeCord to handle messing)
  • He/she can teleport to other players, or /tpahere other players to him/her.
  • He/she can manage who can build in his own world, ban, kick other players from his world.
BungeeCord
(Acting as load balancer, and handles cross world interaction)

|
|
|
Spigot instances
(10 to 50 instances per dedicated server)
(holding 20 to 80 players each)

|
|
|
Each player owns one world
|
|
|
Centralized Storage using Distributed File System
(Ceph, GlusterFS, XtreemFS, etc..)

Features
  • Each player (UUID) owns his own world, world_nether, world_the_end that he can /sethome, /home at locations he wishes, fight mobs, get achievements. It's like single player with add-ons.
  • The feeling of being on a server is there when players can private message others.
  • Players can teleport to each other (each other's world) and hang out, co-op.
  • Each world has rules for whitelist, max players, permission for owner to ban, kick others.
  • World can be reset by owner via /reset command.
  • Have the potential to scale to thousands of players without fail, with terabytes of storage.

Distributed File System
I've found a way to create a centralized hard drive, by combining hard drives of multiple dedicated servers via the recently widely adopted cloud infrastructure called Distributed File System. There are quite a few softwares that can do the job, they're Ceph, GlusterFS, XtreemFS, MooseFS, BeeGFS, mhddfs. I'm doing research to choose the best one for performance.

Each dedicated server will have 1TB of Enterprise SATA II hard drive space. We currently have 2 dedicated servers from PhoenixNAP, which give us the capacity of 2TB at the moment, more than enough to provide this service for a few while to test this proof of concept.

MySQL
Currently, MySQL is hosted by MCProHosting, utilizing their SSD.

Store player inventory, handling /trade transactions, money transfer, interactions in game, bungeeperms, etc..

Because we're now using HDD instead of SSD, most dynamic data should be on MySQL utilizing SSD for fast accessing of entries.

BungeeCord Plugins
  • Chat
BungeeCord (and future Redis intergration) will be used to handle cross world private messaging.​

  • Teleport
    • BungeeCord can handle this quite easily
  • Home
    • /sethome: Set a home inside his world. Can only be set inside his own world, nether, or the end. Cannot be set in another player's world.
    • /home brings player to his own world at predefined set home location.
    • If it is a new player, /home simply generates new world for him, and bring him to his world.
Scalability
  • Currently, we have 2 dedicated servers at PhoenixNAP.
  • Each dedicated server will run 5 survival instances, total is 10.
  • Each survival instance will hold maximum of 40 players. This number will be increased or decreased based on how the server performs.
  • For minigames, each dedicated server will run 1 instance of Hunger Games, 1 instance of Slenderman, and 1 instance of Turf Wars. The number will be scaled up based on demand.
  • Regarding BungeeCord instance and Spawn instance, they're currently handled via our generous MCProHosting partner nodes, so we don't have to worry about it. (Please note that BungeeCord and Spawn instances are running on Java 7, the dedicated servers are running on Java 8).
Folder Hierachy
/home
/minecraftly
/bungeecord1
/modules
/plugins
BungeeCord.jar
config.yml
locations.yml
modules.yml
server-icon.png
start.sh​
/bungeecord2
/modules
/plugins
BungeeCord.jar
config.yml
locations.yml
modules.yml
server-icon.png
start.sh
/survival1
/logs
/plugins
/timings​
/survival2
/logs
/plugins
/timings​
...
/survival20
/logs
/plugins
/timings
/worlds (central world folder for all survival instances)
/{UUID1}
/world
/world_nether
/world_the_end​
/{UUID2}
/world
/world_nether
/world_the_end​
...
/{UUID}
/world
/data
/region
level.dat
uid.dat​
/world_nether
/data
/region
level.dat
uid.dat​
/world_the_end
/data
/region
level.dat
uid.dat
/hungergames1
/hungergames2


/slenderman1
/slenderman2


/turfwars1
/turfwars2

Game Plan
  1. Create proof of concept for survival.
  2. Open beta for players to join and play.
  3. Once there's no performance issue, we'll ask for funding for further advertisement.
  4. As we establish ourselves of doing the nearly impossible and solve the scalability problem, we'll go to Kickstarter and raise fund.
  5. The fund will be used to pay for advertisement on MinecraftServers.org, minecraft-server-list.com, etc.. and pay for hosting, developers for further development of the project.
Monetization
  • World border: Each player's world has a size of 1024 radius, which is 2048 x 2048. Each region file is 4.2MB average, so we'll have 67.2MB each player max.
 

iKeirNez

New member
Joined
Sep 4, 2014
Messages
5
Reaction score
0
Points
0
Credits
0
This looks like an amazing idea!

I think we'd do this with a BungeeCord plugin that places the player in temporary server whilst their server is being loaded up (if it's not already loaded) and then connects them to the server (possibly with their own set of plugins?).

I think drtshock has done something similar to this awhile back, although I can't remember what the server was called :/
 

minecraftly

Administrator
Joined
Sep 4, 2014
Messages
411
Reaction score
0
Points
0
Website
m.ly
Credits
0
This looks like an amazing idea!

I think we'd do this with a BungeeCord plugin that places the player in temporary server whilst their server is being loaded up (if it's not already loaded) and then connects them to the server (possibly with their own set of plugins?).

I think drtshock has done something similar to this awhile back, although I can't remember what the server was called :/

It is quite different tho. The instances are always running, if a new player joins, it simply loads up {uuid}/world, {uuid}/world_nether, {uuid}/world_the_end for that player with associated chunks. In a way, it's no different than one instance of survival server. We can't have own set of plugin yet tho, still need to uniform and scale the process.

drtshock made the realms plugin for Minetime, I know the owner Collin from that server, he uses PhoenixNAP servers too.
 

Windows_Dog

Moderator
Joined
May 19, 2015
Messages
355
Reaction score
4
Points
0
Credits
0
Well due to the beta server. I see that chatting to people they have to come to your world or you have to go to their world, so i am saying to reduce the amount of griefing, I want to say that for people to come, the world must be claimed by the player that owns this region.
 

Viet York

Administrator
Staff member
Joined
Dec 6, 2021
Messages
21
Reaction score
3
Points
3
Credits
406
After 7 years, this is still relevant to this day. Going to circle back and use this blueprint to develop something for Lecverse