Live data from Hacker News

How we built an auto-scalable Minecraft server for 1000+ players

worldql.com

51–60 of 145 posts

Re: How we built an auto-scalable Minecraft server for 1000+ players

#51
post #10
post #9

Earlier quoted context omitted.

Curious how you plan to handle Redstone and hostile mobs.

Thanks for your question! Redstone is still WIP but will follow: 1. An optimistic execution strategy (the servers can run their own redstone) 2. A locking system allowing only one server to have redstone current in a given chunk at once. 3. A rollback-based system to repair race conditions caused by (1)'s optimism. Hostile mobs are ALSO still WIP and: 1. Are only synced if two players are near each-other on two diffe…

Re (2): Wouldn't that cause wonky redstone behavior on chunk borders?

Re: How we built an auto-scalable Minecraft server for 1000+ players

#52
post #15
post #7

Earlier quoted context omitted.

This is very impressive work! Do you plan to make WorldQL highly available? It seems like if it died you'd loose the server.

Thank you for your kind words! WorldQL uses Postgres under-the-hood to store permanent information. I was inspired by companies like TimescaleDB which build new functionality on top of Postgres’s rock-solid base. Any high-availability solution for Postgres will also be available for WQL.

Do you use postgis for spatial queries?

Re: How we built an auto-scalable Minecraft server for 1000+ players

#54
post #29

Earlier quoted context omitted.

If you look at the developer blogs for EVE Online, you'll have endless reading about massive scale multiplayer servers. Possibly the most technically impressive massively multiplayer experience

EvE is one of the worst architecture for an MMO, there is almost nothing to do and yet they need to slow down the simulation loop when there are too many players. I mean when you gameserver is based on Python what else can you do?

Is there another game that supports direct interaction between everyone in a group of as many players as EVE supports?

Re: How we built an auto-scalable Minecraft server for 1000+ players

#55
post #15

Earlier quoted context omitted.

Thank you for your kind words! WorldQL uses Postgres under-the-hood to store permanent information. I was inspired by companies like TimescaleDB which build new functionality on top of Postgres’s rock-solid base. Any high-availability solution for Postgres will also be available for WQL.

Do the clients of WorldQL (the workers) know how to gracefully fail over when WorldQL fails?

No. They fail very ungracefully. But it’s something I’m planning to implement in the future.

Re: How we built an auto-scalable Minecraft server for 1000+ players

#56
post #11

Is there any chance of this supporting modded servers? Performance is universally the limiting factor on modded minecraft; if you're not careful you can start having performance problems only thirty hours into a single-player world, and I've never seen a modded server support more than three or four players without severe lag setting in quickly.

I've never ended up playing modded multi-player. I mostly play skyblock type packs, and it doesn't feel like a good match to that experience.

It would be cute if Azure credits could be paying for a VM that's just running Compact Machines I never visit the inside of anyway, while the places my character actually goes are running near me. For example, once you've built it, who visits the inside of that first Compact Machine in Claustrophobia that's just a self-powering battery full of uranium, water and thermoelectric generators? You'd drown in there anyway if you visit for more than a few seconds. But it still needs simulating.

Re: How we built an auto-scalable Minecraft server for 1000+ players

#57
I used to play on a pretty popular MMO-style server called [CivCraft](https://www.reddit.com/r/Civcraft/) that unfortunately became a victim of its own success due to the large player count. It would often have 250+ players who would build these massive redstone machines and the server TPS would grind to a halt making it unplayable.

After a few years it attempted a re-launch using an approach similar to to the first one mentioned in the article. There were multiple worlds and as you approached the border of one world it would teleport you to another adjacent world. It was cool, but was jarring and suffered from its own complexity issues.

Anyway, this project is super cool. I would have loved to see something like it 10 years ago.

Re: How we built an auto-scalable Minecraft server for 1000+ players

#58
post #40

I'm always amazed by how so much Minecraft innovation is driven entirely by hobbyists. For years Minecraft was unplayable on many machines without the Optifine plugin. Even with a huge corporation behind it, Microsoft didn't build the capacity for large-scale servers, and the very large paid servers seem to use region based sharding with portals. This project is truly exciting.

I liked to hack around with Minecraft in the past but I'd always end up in despair at the state of the game from a technical POV. The Java version of the game is just horribly slow and unoptimised. The game doesn't even have a real modding API, it's all reverse engineered. Seeing chunks pop in really takes away from the experience. The C++ version ("Bedrock") performs much better but is not compatible with the Java edition, doesn't have the same player count, isn't moddable, and is heavily Xbox-inated and Microsoft-ened.

Re: How we built an auto-scalable Minecraft server for 1000+ players

#59
post #52
post #15

Earlier quoted context omitted.

Thank you for your kind words! WorldQL uses Postgres under-the-hood to store permanent information. I was inspired by companies like TimescaleDB which build new functionality on top of Postgres’s rock-solid base. Any high-availability solution for Postgres will also be available for WQL.

Do you use postgis for spatial queries?

No. All spatial queries use WorldQL’s in-memory k-d tree implementation and are not used for permanent world alterations.

For the Minecraft world catch-up example, it’s as simple as querying Postgres for block records in a certain chunk after a certain timestamp. No fancy spatial stuff happens on the Postgres side.

Post reply on HN