This is the first installment of a five-part series about HubSpot’s year-long project to rework our platform for multi-region support.
In July 2021, HubSpot launched an EU data center. Prior to that, HubSpot systems were deployed to a single AWS region (spread across 3 availability zones in us-east-1). The EU launch was the culmination of a year-long project to rework our platform for multi-region support. Requiring more than 10,000 pull requests, this project utilized contributions from nearly all of our 1,000+ engineers. A project of this scale required collaboration and partnership across the organization, making various design decisions and creating solutions to challenges we encountered along the way.
As with any project, we first needed to understand the motivations and goals for the project to help inform all of the design decisions and trade-offs. When we started the multi-region project, we laid out four primary goals:
Based on these goals, we decided that our multi-region design should move HubSpot towards a "pod" architecture. This would allow us to have multiple, independent copies of the entire HubSpot platform, each serving a subset of our customers. Normally, each of these copies would be called a pod. However, to avoid confusion with Kubernetes Pods, we invented a HubSpot-specific term: Hublet. Here are some of the basic guardrails we established:
In the long term, you can imagine dozens of Hublets spread around the world. This gives our customers relatively granular control over where their data is processed and stored. It also improves performance of the HubSpot product, by bringing the data closer to the customer. And because each Hublet is well-isolated from the others, outages will only affect a small fraction of our customers. Finally, we can define self-imposed scaling limits. As we near these limits in a particular Hublet, we can stop adding customers to that Hublet and launch a new one.
However, this design isn't without its own set of trade-offs. Because each Hublet is isolated and hosted in a single AWS region, region-level outages will still cause downtime (for the subset of HubSpot customers hosted in that region). Also, each HubSpot customer needs to choose a single location to host their account. For larger companies with employees around the world, there's no single location that will provide low latency to everyone. We decided that these limitations are acceptable for now, but we may try to mitigate them in the future.
While the long term plan is to have dozens of Hublets spread around the world, we decided to take a more incremental approach to the project. The first milestone would be to launch a new Hublet in the EU, named eu1. To do so, we had to "Hublet-ize" all of our systems, which was a one-time cost that will make future launches much more straight-forward.
In future posts, we'll talk about the details of this project and some of the technical challenges we had to overcome.
Other multi-region blog posts:
These are the types of challenges we solve for on a daily basis at HubSpot. If projects like this sound exciting to you, we’re hiring! Check out our open positions and apply.