Update 10: Quick Tech Overview
Hello everyone!
We receive a number of questions during the livestreams about our tech stack, so Ali was kind enough to jot down a few notes.
We’ll try to keep this updated as we go.
And as always, if you have any questions, please feel free to hit us up on the stream or in Discord.
Simplicity
The stack is designed to be simple and straightforward. For rapid development and easy operation.
Database
For the Proof of Concept, we have standardized the database to MySQL. All server processes connect to MySQL.
Connectivity
Client and all services are connected via reliable UDP. We utilize the library LiteNetLib.
Client
The client is a straightforward dumb viewer of Server state.
Unity
The servers live both within and apart from Unity. They use Unity services without using Unity’s entity management or other core systems. These are handled by custom systems that are Ticked by Unity’s Update method.
Method of Operation
The processes are pseudo-EntityComponentSystem design. They are vintage in their design but for good reason. Older designs were efficient. Older designs make good use of CPU cache. Older designs were modular.
Each System loops through all required entities (such as NPCs or Clients) and does its operations on them.
Model-Entity Design
Data is held in data objects which map to Database records. Models are accessors and Context. Systems hold logic which operate on the Models.
Infrastructure Design
Designed to run on commodity hardware, stateless. Can live on metal, containers, Kubernetes, or whatever else the future holds.
Scalability
Again, this is a bit old-school, but by keeping all communication via rUDP sockets, we are eliminating many possible bottlenecks. There is minimal load and communication between processes. Zones are designed to run independently once a Client is assigned to one.
This means that while a Zone might bottleneck, it will not affect other Zones or processes.
Sharding
There is no current plan to shard zones (ie. creating instances). However, there is nothing preventing enabling that if it becomes necessary.