4 min read
Hydra is using industry-standard infrastructure in order to guarantee a 24/7 99.999% uptime and full stability. In the following article we'll briefly explain what services Hydra uses and what specifications our servers have.
It seems that you're curious on what Hydra uses to run that smooth, right? We're trying to stay up to date with the latest technology available in the industry that we're operating in. That includes container-orchestration systems for automated computer application deployment and management, cloud native edge routers, standard protocol routing load balancer implementations, a variety of real time series databases, multiple data and metrics analytics platforms, distributed version control and source code management tools, continuous integration and deployment pipeline services, secure, reliable and highly available cloud databases, in-memory data structure stores, flexible and vertically scalable DNS services, binary and build artifact management solutions and a lot more.
In order to form a nice and well-rounded network we had to integrate a few self-made microservices to operate on high scale and load. We're mainly using Java as our backend language here. As these are more or less privately integrated services we can't cover more details for now.
If we'd not be using all of that stuff mentioned above we probably wouldn't understand it either, so let's cover a few of the services that we make use of.
Kubernetes is probably the most helpful and interesting part of the list. It allows us to horizontally scale our service as we grow. That means that we can just introduce more replicas of Hydra (including all subservices as well) when needed. Kubernetes is hosted on our bare metal cluster of servers which we'll cover later in this article.
Our Kubernetes cluster wouldn't really function that well without Traefik since it allows us to easily route external traffic into our cluster of services. It's not directly needed to communicate with Discord but it gives us the ability to integrate all these other services that we use to form a well-rounded network.
One of our real time series databases is InfluxDB. We use it to not only monitor Hydra's status and health but also to analyze growth related to various events like Discord outages or other issues. Other statistics and metrics like server health and spread of services in our cluster is monitored by Prometheus.
In order to guarantee persistent data storing of for example your server settings we use a high available and enormously stable cloud database hosted in the Google Cloud.
Since latency is a well required key factor we need to serve various data via a caching cluster like Redis. This also helps us to decrease load on our database systems.
Persistently storing our source code is very important since this is what Hydra is built on. GitHub allows us to use private repositories in our own organization to keep things clean and simple. We're also able to integrate a CI/CD pipeline if needed.
As already mentioned above we're maintaining our own bare metal Kubernetes cluster. We're using GalaxyGate to host multiple dedicated servers allowing us to have some overhead. They've each got 128 gigabytes of ECC RAM and 2 E5-2650V2 CPUs with 16 cores and 32 threads. Since Hydra uses a lot of CPU for en- and decoding audio streams and we don't want to limit any of our users we need a lot of computing power in that regard. Dedicated servers are perfect for that approach since we're not sharing resources with other people. Kubernetes also allows to add more and more servers to our cluster as we grow.
In order to be protected against any kind of attack we're using Cloudflare as our DNS proxy service. It includes massive DDoS protection and other useful tools for improving user-experience.
That was a lot of information and we surely hope that you got a broad overview now of what we're using to run Hydra stable and performant. If you got any questions left we can answer them in our support server.