Sunshower.io aims to provide a common language across all supported clouds. To that end, we've modified some of the terminology that you may already be familiar with (sorry, we'll only do it once!), in addition to adding a few of our own ideas!
You have options when you purchase a computer for your home. How much memory (RAM) do you need? How much processing power (CPUs)? How fast of a network connection do you need? The requirements for a video editing professional's workstation are different from the kid's homework PC. For your home computers, it might not matter very much if you overpay by $50 for the same computer, or a similar one (even if that's never fun).
If you need to purchase PCs for an entire school district, overpaying by $50 per PC can break the budget. But just like purchasing for your home, it can be hard or impossible to sift through the dozens of vendors, dozens of manufacturers, and hundreds of configurations to find exactly the right computer at the lowest price.
Say that two of your hobbies video editing and reading e-books. Clearly, each of these activities will require different
resources from your computer. Home computers have highly-variable workloads, which is why
people typically own computers that are substantially more powerful than what they need on average.
In the cloud the reality can be quite different: workloads are frequently pretty predictable. Say, on average, your database serves ~1000 requests/second, and 1 time-unit in 1000 it serves 10,000 requests/second.
You might measure the CPU, Disk, Memory, and Network utilization for the average case and the 1 in 1000 case and,
if you do ou can say a lot about that database workload just from that information. We call whatever utilization of
each of those features, (CPU, Disk, Memory, Network), at each of the measured times,
components of the
shape of the workload.
An instance is a virtual or physical server hosted on some public cloud. Different clouds call instances different things, for example:
- Heroku calls instances
- AWS calls instances
- Azure calls instances
- Google Cloud calls instances
In general, when Sunshower.io publish2es a plugin for a given cloud, it translates their notion of an
that may be, to our notion of an instance. So, if you have the Heroku plugin installed, Sunshower.io will manage your Dynos
as Sunshower instances. The goal is that you can manage the notion of a server in the cloud exactly the same way, regardless of which
cloud it's actually on.
Every cloud provider has a notion of
instance class--that is, the physical capabilities of the
instance that you're
purchasing from them. AWS, for example, has 3 instance classes with 2 GB of memory (a1.medium, t3.small, t2.small), but each of these instance classes
has different combinations of CPU and networking. Importantly, each also has a different price.
|Instance Class||CPU||Disk||Memory||Network||Cost/Month (approx)|
|A1.Medium||1 vCPU||EBS||2 GB||10 GB||~19.12|
Likewise, Azure has at least 4 instances with 2 GB of memory. Moreover, each instance class offerings differ from region to region within the same cloud.
One of the most important things Sunshower.io does is align the workloads on instances with instance classes.
In our workload example, we had a few
moments (average, 99.9th percentile)
for each of several
components (CPU, Disk, Memory, Network) of the
shape of a workload (database).
Next, we have to consider which
instance you're currently using to run that workload, and ask ourselves
Given each of the configured moments for each of the configured components of the workload, what's the least-expensive instance that will contain each of those components out of all the available instances?
Everyone performing Workload Alignment (probably) has a different mechanism for figuring this out. Anvil, Sunshower.io's Optimizer, has saved our users an average of ~65% and a maximum of 94% when performing workload alignment.
Infrastructure is any hardware or software that a cloud service provider, or "CSP" provides. Examples can be Load Balancers, Instances, Virtual Private Clouds, IP Addresses, etc.
A "role" is a notion of identity within Cloud Service Providers. Examples are:
- AWS IAM roles
- Azure Active Directory roles
Sunshower allows for several modes of grouping infrastructure together, the highest level mode we call a "System" (think Cloud System or Weather System). Systems are comprised of a collection of Roles (IAM, AD, etc.) and can span multiple cloud providers, meaning that you can mix and match credentials from any CSP. Upon creating a system, Sunshower.io will go out and discover whatever infrastructure is associated with the System credentials.
Sunshower.io will automatically convert cloud-provider-specific attributes and operations into a unified model. One of the great things about Sunshower.io is that you can manage infrastructure in different clouds using the exact same workflows, and even with the same system.