STEPHANIE WONG: Hey, it's Stephanie Wong,
and welcome to "Season of Scale," a new series
I created to help you build skill and resilience
into your design patterns.
Today I'll be covering the basics behind how to do that.
Stay tuned.
[MUSIC PLAYING]
With everything going on in the world,
there's been undeniable disruption for businesses.
Social isolation around the globe has settled in,
and traditional brick-and-mortar companies
have been forced to shift operations
into an online space, while already online companies are
seeing a massive spike in daily traffic.
This might have put a lot of pressure
on you to adapt and evolve your online architectures
and maybe face the realization that you're
both resource- and business-constrained.
This rang true for Critter Junction, a multiplayer gaming
company that's gained massive popularity
in the last few months.
Online players can interact with one
another in a virtual world that follows
life simulation as a critter.
Building and operating a gaming stack at this scale
requires a lot of careful planning.
So my team and I are stepping in to help
Critter Junction revisit their design practices
for ultimate global success.
So far, Critter Junction has been
great at running individual machines on premise,
but hasn't really been able to automatically
scale to many machines to handle peaks and dips in traffic.
At times, they end up running over-utilized machines
and other times run underutilized machines
and haven't built resilience into their architecture.
A failure in networking, image updates, or peak load
could lead to a disruption in their game players' experience.
On top of that, Critter Junction has its own business
and operational pressures.
Their CTO is all about becoming more
agile to adapt to fluctuating user demands,
their developers are focusing on reducing
the time it takes to investigate failures,
and their operators care about finding ways
to automatically recover from failures.
This is a lot to think about.
But let's start by first explaining what
scalability and resilience are.
Scalability is the measure of a system's ability
to handle varying amounts of work
by adding or removing resources from the system.
For example, a scalable web app can not only
work well with one user, but also with 100 million users.
And it can gracefully handle peaks and dips in traffic.
The good news is the cloud gives you
the flexibility to adjust the resources consumed by an app.
The bad news-- without proper design,
you could end up using more resources than you need,
like what Critter Junction's done on premise.
What you want, instead, is to reduce costs
by removing underutilized resources without compromising
performance or user experience.
That being said, even scalable apps can face disruptions.
Without resilience built in, system failures
can throw a wrench in your operations.
Resilience means designing to withstand failures.
A resilient app is one that continues
to function despite failures of system components.
And this requires planning at all levels
of your architecture.
It influences how you lay out your infrastructure and network
and how you design your data storage and app.
It even extends to people and culture.
Let's face it.
Building and operating resilient apps
is hard, especially for distributed gaming stacks,
which means multiple layers of infrastructure and networks
and services.
So over the season, we're going to walk Critter Junction
through Google Cloud and design best practices to help
them build both scalable and resilient apps.
All in all, these patterns and best practices
will fall into three themes.
Automation, because automating your infrastructure,
provisioning, testing, and app deployments
increases consistency and speed and minimizes human error.
Loose coupling, because treating your system
as a collection of loosely coupled independent components
gives you flexibility and resilience.
And data-driven design, because collecting metrics to your app
is critical.
Decisions about when to scale your app
or when a particular service is unhealthy
need to be based on data.
These themes are going to be crucial to laying a stronger
foundation to scale and withstand failures.
Mistakes and outages happen, but Critter Junction
is on a mission to improve the design
of their app architecture and dev processes.
Stay tuned to find out how.
And remember, always be architecting.
[MUSIC PLAYING]