High Performance / High Availability
The standard solution for handling a High Performance platform is to divide the different functionalities into separate modules, each executing its own specific task. These processes are a-synchronous which means that all processes work independently from each other. Usually, communication between these different components is made through a message bus such as RabbitMQ. This guarantees both a swift and efficient system.
The storage of large quantities of data needs another approach than a standard relational database. It is possible to use relational databases for sharding or other techniques, but more often NoSQL databases are used for that, as they are specifically intended for this type of use. Each solution has its own advantages and disadvantages (scalability, reading speed, writing speed etc.), which means that each project needs its own specific assessment to identify which database is most suitable.
The larger and more complex systems are, the more difficult it becomes to manually operate them. For these types of systems we often use Continuous Deployment. With this technique (sub) modules are automatically updated under certain conditions. Also, the platform must be properly monitored. By using auto-scaling, additional capacity is automatically added whenever necessary, which ensures optimal performance at any given time.