These days,
cloud computing can be found everywhere,
and it's really because there are so many great benefits
to using cloud computing,
and that's what we're going to focus on in this lesson
as we start talking about the different characteristics
of the cloud.
When we talk about cloud computing,
there are a handful of benefits or characteristics
that we see when we choose to use the cloud.
These include high availability, scalability, elasticity,
metered utilization, shared resources,
and file synchronization.
Let's take a look at these.
First, we have high availability.
Now, high availability refers to the fact
that services experience very little downtime
when you're using the cloud.
This is because most of the services
that are built on the cloud are built
to be highly reliable and very fault tolerant.
This means that we can ensure a high level of availability.
Now, when it comes to availability,
we usually measure this in terms of a percentage
of how much uptime there is versus how much downtime.
So for example, the gold standard inside of networks
is known as five nines.
Five nines means 99.999% uptime or availability
as experienced by your end users.
This means that we can only have
about 5 minutes and 15 seconds of downtime every year.
That's right, only 5 minutes and 15 seconds
across the entire 365 days in a year.
Now to do that, that means you have
to have highly reliable systems that are highly available.
So if you have one website, you're actually going to have
at least two web servers that are hosting that.
So if one goes down,
the other one is still carrying the load.
And that means the end user doesn't experience any downtime.
That's what we're talking about
when we talk about high availability.
For example, with my own website, diontraining.com,
we actually have a very highly available setup
that has been created using cloud services.
So depending on where you are coming from in the world,
you're going to reach one of our multiple servers
located around the world that's closest to you
to get a better experience.
Now, if your server is down for some reason,
you'll automatically be rerouted
to another one that's a little bit further from you,
but it's still up.
And so that way, you still get the service
you're looking for,
and that is a way to ensure high availability.
The second characteristic of the cloud
we're going to talk about is known as scalability.
Now, when we talk about scalability,
this is talking about the fact
that we can increase the number of people
or the number of things in our system at a linear rate
or less than a linear rate.
Now, what I mean by that is,
let's say, I have 100 users using my system,
and it costs me $10.
Well, if I put 200 users on my system,
it should cost me $20 or less,
and that would be a linear scale.
Now, if I went from 100 users to 200 users
and the price went from $10 to $100,
that would be an exponential scale, and we don't want that.
So as we're building out our cloud systems,
we're always looking for scalability.
And that means that even if we only have 10 users today,
tomorrow, we might have 100.
The day after that, we might have 1,000.
The day after that, we might have 10,000, and so on.
If you look at some of the big companies out there
like Facebook, and Google, and LinkedIn, and Udemy,
they have millions of end users who are accessing
their platforms every single day,
and they're able to scale up
based on the scalability of cloud services,
because I don't have to go and buy another $10,000 server
to put in my local data center,
because instead, I can just use Amazon's,
and use a portion of their capability as I need it.
Now, when it comes to scalability,
there are two ways you can scale.
One is to scale up, which is known as vertical scale.
This is by adding more resources
to a particular server or node.
For example, if you're using a cloud-based server
that has two virtual CPUs,
you can actually increase that to four virtual CPUs.
This is the idea of scaling up.
You're adding more resources,
whether that's more processors, more ram, more storage,
more bandwidth, or things like that.
Now, on the other hand, you can also scale out,
which is known as horizontal scaling.
This is where you still use smaller machines,
but you use more of them all working in tandem
behind a load balancer.
So instead of having one server that's handling
all of your load and scaling upward by increasing the CPUs
and increasing the memory, you can instead scale out,
and go from one server to two servers,
or two servers to four, or four to eight,
and you can keep moving outward by adding additional servers
behind your load balancer
that you can then handle additional traffic with.
Now, this brings us to our third area,
which is known as rapid elasticity.
Now, when we talk about rapid elasticity,
we are talking about the fact that we can scale up
or scale down very quickly.
Now, this is done because we use automation
and orchestration with a lot of virtual machines
on these physical servers that are owned
by Amazon, Google, Microsoft, and other corporations
that allow us to use portions or all of their services
as we need to on demand.
And this gives us that rapid elasticity.
When you hear the term "rapid elasticity"
or elasticity in general,
think about it as the fact of the system's ability
to handle changes to demand in real time.
So, let's go back to the example of using
my website at diontraining.com.
If right now, I check my website
and I have 1,000 students logged in,
and I check in 5 minutes from now,
and there's 10,000 students logged in,
my systems are designed to spin up
additional cloud resources
and push some of that load from those new users
onto those additional services.
That is the idea of rapid elasticity.
Generally, when you're working in the cloud,
if you've designed your systems correctly,
you have the ability to rapidly have elasticity
and scale up very fast.
And then similarly, when the demand goes away,
you can quickly get rid of those extra servers,
and bring them back down.
And the reason you'd want to do that
is because all those extra servers
are going to cost you more money.
And if you don't have enough users to have them,
you don't want to pay for that.
So you're going to release those,
give it back to your service provider,
so they can then rent that service out to somebody else.
Instead, if you are doing an on-premise model,
let's say, I had 1,000 students today.
Well, for 1,000 students, I might need three web servers,
but if I go to 10,000 students,
I'm going to need another 15 web servers.
Well, to do that, I would have to buy 15 more servers.
I'd have to rack them.
I'd have to install all the software.
I'd have to configure them.
All of that takes time.
And so it's not very rapid in elasticity measures
for us to be able to scale up to meet that demand.
If you have a very slow growing business model, that's fine,
but if you're dealing with something that has high velocity
or any of these modern social media platforms,
and something you've done has gone viral,
and everyone goes to your website
and starts flooding you,
if you don't have the ability to scale up rapidly,
you're going to miss out on the ability to capture that traffic
that's coming from that viral incident.
And so you want to be able to build your stuff
in a rapid elastic manner,
and that's what the cloud allows us to do.
The fourth thing we have is known as metered utilization.
Now, this goes back to our rapid elasticity discussion
we just had.
Now, when we are talking about metered utilization,
we are talking about the fact
that we are paying for a service on a pay-per-use basis.
So when we're using a metered service like a database,
they may charge us based on the number of users,
or the number of connections,
or the number of data being stored.
Essentially, we're being charged based on the actual usage
of the service being consumed.
And we do that either on a second basis, a minute basis,
an hourly basis, or a daily basis, or even a monthly basis.
For example, I use AWS Lambda for a lot
of my backend automations and functions,
and they charge me based on my usage.
Now, for every 1 million requests I make,
they charge me 20 cents.
And so it's a very efficient way for me
to get my automations done,
because it's a very, very low cost thing.
I can have millions and millions of requests,
and it would only cost me a couple of dollars.
That is the idea of a metered service.
Now, the other thing you'll see is, sometimes,
you'll see a distinction between metered service
and measured service.
Now, when we talk about metered or measured services,
we're really talking about the same thing
and it's our ability to pay for something
on a consumption basis.
But there is a difference here.
When you're using a metered service,
you're paying for things based on the actual usage
of what you've done.
So if you think about your water bill
or your electric bill at home,
if you turned on your water hose
and you filled up your swimming pool this month,
you're going to pay a lot more for your water bill,
because you used a lot more water.
Now, conversely, when you deal with a measured service,
this is more like your cell phone plan.
In most places, you pay a monthly fee for a certain amount
of usage of that cell phone,
whether that's the number of text messages, minutes,
or data you're allowed to consume.
And once you go up to that limit,
they will stop your service,
and not give you any more until you pay them again.
So when you think about a measured service,
think about the fact that you're paying
for a certain amount of quantity upfront,
and whether you use it or not,
you've already paid for that amount.
But when you're dealing with metered service,
you're paying for the exact amount you're using.
And this is really one of the benefits of using the cloud,
is that most things are done on a metered basis,
where you're only paying for what you use.
The next thing we're going to talk about is shared resources.
Now, when we talk about shared resources,
we're really talking about the ability to minimize our cost,
because we're able to put our virtual machines
on somebody else's servers.
When you look at those servers that we're using for Amazon,
and Azure, and Google Cloud, those things
are 10, 20, $30,000 a piece for a good quality server.
And so if you need to buy one of those
to be able to host your WordPress blog,
you're not really using all that capacity,
because if you only have a couple hundred readers,
it's not going to use that much load.
So instead, it makes a lot more sense
to take that one really expensive server,
cut it up into little pieces essentially,
and give it out in virtual machines
out to everybody else who wants to use it.
So we might be able to host 50 or 100 WordPress blogs
on that one server instead of hosting just one.
That's the idea of using shared resources.
When we talk about shared resources,
we're talking about pooling together all the hardware
to make up the cloud provider's data center.
And that way, it's not dedicated to a single individual,
but we can all use it based on rapid elasticity,
because hopefully what Amazon, and Google, and Azure
are thinking is that when there's high periods
of demand for my company,
there might be low periods for your company and vice versa.
So instead of us having to have dedicated hardware resources
to each of our companies,
we can share resources across the board.
And the final characteristic of the cloud
is the ability to do file synchronization.
Now, the great thing about using a cloud-based resource
is that you can put something in one place,
and it can then spread to other places
based on how you configure it.
For example, in my company,
we rely on file synchronization a lot,
because most of our people are actually remote employees
that work all over the world, not just in our own offices.
So as I'm sitting here in my office
recording this right now,
I need a way to give this file
over to my graphic designer,
so that she can create all the different things
that you're seeing on the screen as I'm talking.
And then she's going to go and send it over to another country,
where my video editor is located.
And when they're done, they're going to send it back over
to my offices where one of my staff
is going to do our quality assurance checks,
and then we're going to send it to another country
who's going to then upload it to the final site,
where you're going to see it.
And so this one video has traveled
probably to four or five different places
to be able to be that finished product
that you're seeing right now on the screen.
This is the idea of file synchronization,
because when I record this,
I'm recording it to a cloud-based file server.
Everyone on my team can access that file,
because we have that synchronized copy
on all of their devices and across all of our servers
around the world,
so they can access it and do what they need to.
And as they're doing that,
it's not sitting just on their computer,
but it's being synchronized across all of our cloud servers.
So everybody else along that path that needs to happen
between recording and publishing
and then you watching it can happen across all those servers
in a very streamlined manner.
And that's one of the real big benefits of doing cloud
from a business perspective,
is that you don't have this server sitting in your office.
It's now sitting out in the cloud in a data center
that's protected, that's highly available,
that has the ability to be scalable,
and can be elastic in responding to demands
of higher and lower periods of demands.
We only have to pay for what we use
and we can share resources with other people
that we may not even know,
because we're all sitting on the same physical server.
And these are all the things we're talking about
when we start talking about cloud characteristics,
and why there's been this big migration into the cloud
by many companies around the world.