Font Awesome

Under the Hood: Font Awesome’s Scalability Overhaul and the Power of Container Orchestration

by Font Awesome

Goodbye, past. Hello, future. Time to bring out the big guns!

If you can believe it, the Font Awesome crew is only 21 people (which includes a couple folks who recently came aboard Shoelace). Not to be braggadocious (it’s a real word, honest), but we think we manage to crank out a whole lot of awesomeness for such a lean crew. But there’s more to Font Awesome than icons and dev tools. As we’ve grown the team, we’ve brought non-devs and designers aboard the Font Awesome bus, too. Including our very own DevOps guy, Tim Crowell who helps us stay organized, and deliver great software. 

In this blog we’ll share some of the great work Tim has done that enables Font Awesome’s seamless expansion.

Scaling up: the journey begins

When Tim joined the company, he embarked on a mission to evaluate the existing infrastructure and determine the necessary steps for enhancing its performance. While new features took center stage in the early days, administrative aspects took a back seat. But as the company grew, it was clear that scaling up was essential for Font Awesome’s continued success.

Out with the old: introducing container orchestration

4 duotone icons: stack of balls, upwards trending chart, merge arrows, shield with checkmark on a navy blue background.

Font Awesome’s original infrastructure included a group of machines serving as the origin behind our content delivery network. Each machine was responsible for its own service and the CDN cached and distributed copies of that content to our millions of customers worldwide. While this got the job done initially, future growth demanded a beefier solution. Enter container orchestration with HashiCorp Nomad.

Tim led the charge in migrating to upgraded infrastructure that allowed for flexible deployment across multiple machines at the origin. Additional firepower could be added to our Nomad clusters as needed without downtime or changes to the way our applications were deployed. Font Awesome’s upgraded platform could now scale to handle increased traffic while using blue-green deployments for seamless version upgrades. The high-availability design ensured that even if an entire datacenter experienced downtime, the website would remain unaffected — like a safety net that keeps the show going!

The benefits of container orchestration

Container orchestration can help companies get a leg up when it comes to scalability, so they can easily adjust the size of their applications to match the demand. For example, if a company suddenly gets a lot of traffic flooding in, they can quickly add more containers to handle the load. And when the demand eases up, they can scale down to save resources and cut costs. 

These tools make the whole process smooth and automated, so companies like ours can respond to changing needs in real-time. This allows us to adjust application size based on demand, run different types of applications at the same time, and automate, deploy, scale, and manage containers. They also help us distribute workloads smartly, and get the support and service tools we need when we need them.

Getting set up with a flexible infrastructure

Tim took the lead in upgrading our infrastructure to enable flexible deployment across multiple machines right from the start. With this upgrade, our Nomad clusters could handle additional workload without any downtime or changes to how our applications were deployed. Font Awesome’s upgraded platform now has the power to handle increased traffic, and it can smoothly upgrade versions using blue-green deployments. Even if one of our data centers goes down, our website remains unaffected thanks to the high-availability design. It’s like having a safety net that keeps the show going no matter what!

Building Blocks: terraform comes to the rescue

To make this big change, Tim juiced the power of Terraform. Rather than clicking buttons and manually building out new infrastructure, he made use of infrastructure as code. With code-driven provisioning, the team could replicate the entire platform across multiple instances with less hassle. The bonus? Once a mistake was made (we’re all humans after all), it could be fixed in the code, which stops repeat errors. Fix a problem once, and it’s fixed foreverah — W00t! Sounds like a developer’s dream!

Customized Kits: the catalyst for change

4 duotone icons: suitcase, zipped field, cloud with down arrow, spiral eyes emoji face on a navy blue background.

Just recently, we announced our new Kit Download feature. Getting to this milestone meant we had to upgrade the infrastructure to serve each customer’s unique needs. Unlike the standard content delivery process, Kit Downloads required building customized zip files on demand, each one containing a customer’s specific kit icons. The old setup just couldn’t handle the increased volume of computations required for this task.

Enter the orchestrated environment

Thanks to the orchestrated environment, we can now scale the batch processes to meet the demands of Kit Downloads. That means no matter how many users request downloads, the system can adjust the number of machines running these CPU-intensive tasks. Talk about scalability at its finest!

Choosing the right tool for the job

Ever been stuck using software that’s packed with features you don’t need? It’s like lugging around a heavy toolbox when all you really need is a Swiss Army knife. In this metaphor, Kubernetes would be the toolbox (which is fine, we’re not trash talking), and the Swiss Army knife is Nomad. 

First, let’s talk about Kubernetes. It’s the big name in container orchestration, loaded with lots of bells and whistles. With its extensive feature set and thriving ecosystem, Kubernetes can handle just about any use case. It’s got automatic scaling, load balancing, and top-notch self-healing abilities.

So with such a wide feature set, Kubernetes would be the obvious choice, right? Not exactly. In the end we chose Nomad, the MacGyver of container orchestration. It’s simple and flexible, and can handle all kinds of workloads.

At Font Awesome, we need our platform to be as low-maintenance as possible so we can focus our efforts on delivering our product.  Kubernetes accomplishes so many things, but it does so at the cost of being substantially more complex.  Kubernetes has a lot of moving parts, and running a cluster yourself requires a considerable amount of expertise and effort.  Nomad, in contrast, ships as a simple static binary that deploys to both client and server nodes.  It’s easy to deploy, easy to configure, and it can do 90% of what Kubernetes can.

If you’re in a situation where you’re considering your options between Kubernetes Nomad, think about what you need. Kubernetes is definitely feature-packed, but it might be too bloated for your needs. That’s why we chose the simplicity of Nomad. We feel pretty good about how we moved forward, and time will tell if it was the right choice. But if or when we need to make changes, we’ll make the necessary pivot.

Now, future growth is easier

4 duotone icons: binary, split arrows, servers, smiling awesome emoji face on a navy blue background.

And there you have it — an under-the-hood glimpse at Font Awesome’s scalability upgrade. Tim’s expertise, combined with container orchestration and Terraform, helped pave the way for Font Awesome to tackle future growth a whole lot easier. And if you’re a developer, you can appreciate the importance of a solid foundation and an adaptable infrastructure. 

Learn More

Maybe you’re in a place where you need to make some changes and consider container orchestration? So … Kubernetes or Nomad? Here are a few resources that might help you make your decision. 

Kubernetes vs. Nomad: Understanding the Tradeoffs

Nomad vs. Kubernetes: A complete comparison