In this lesson,
we're going to cover high availability.
These days, our organizations expect
to have our services up and running pretty much non-stop.
And the only way to achieve that
is by creating an architecture
that will support high levels of availability.
Now, high availability refers to the ability of a service
to be continuously available by minimizing the downtime
to the lowest amount possible.
To achieve high availability,
our systems should be designed using load balancing
or clustering, have redundancy built into the system,
and if we're operating in a cloud-based environment,
we should also consider using a multi-cloud environment
to achieve an operational environment
that can withstand multiple points of failure
before our service becomes unavailable.
Now, whenever we talk about availability,
it's important to remember that we measure our levels
of availability in terms of something known as uptime.
Uptime is the number of minutes or hours
that your system remains online over a given period,
and this uptime is usually going to be expressed
as a percentage.
The gold standard in availability is set
by achieving something known
as the five nines of availability.
The five nines of availability refers
to achieving a 99.999% uptime,
which means that your services can only have a maximum
of about five minutes of downtime per year,
which as you can probably imagine,
isn't a whole lot of downtime.
Now, in some cloud-based networks,
organizations have gone even further
by setting their availability target at six nines
of availability, or 99.9999%,
which equates to only 31 seconds of downtime
each and every year.
Now, as you can imagine,
most organizations are going to need
to take their systems offline for more than 31 seconds
per year and probably more than five minutes each year too
in order to install security patches on their servers
or to replace a failed hard drive
or to install a new router or switch into the network
when the old one has failed.
So how can we maintain a high level of availability
while still being able to take down some of our systems
to perform our maintenance and repairs?
Well, the first way we can do this in order
to achieve higher levels of availability
is to prevent our systems from becoming overloaded
by using load balancing.
Load balancing is the process of distributing workloads
across multiple computing resources
to optimize the resource use, maximize their throughput,
minimize their response time,
and prevent the overloading of any single resource.
Load balancers achieve this by using complex algorithms
to distribute incoming requests to servers
that are capable of fulfilling them
efficiently and effectively.
For example, if I'm running a small website
to host my blog with only a few dozen readers,
I can probably get by with just having a single server
that can handle that amount of simultaneous requests
that I'm expecting to receive
without causing my server to crash.
But if my blog starts to gain popularity
and now I have a few thousands people who are trying
to read it, a single server is going to be insufficient
to handle all of that additional load.
So instead, I can set up two or three servers
that will all take turns responding to my visitors,
to be able to ensure that no single server gets too overloaded.
This is what load balancing allows us to do,
because all the requests go to the load balancer first,
and then the load balancer will redirect that user's request
to one of my three servers in order to respond
to the request in a more timely manner.
Now, second, we have clustering.
Clustering can be set up to help your systems
to handle more traffic at the same time.
Clustering refers to the use of multiple computers,
multiple storage devices, or redundant network connections
that all work together as a single system
to provide higher levels of availability,
reliability, and scalability for your enterprise systems.
Clustering is more about keeping an application available
even in the event of a hardware failure
in order to ensure
that there is no single points of failure.
While load balancing can help handle all the excess traffic
by distributing it, clustering will provide redundancy
in the event of a system failure
to ensure that the continuity of service is going
to be maintained.
Load balancing and clustering can also be combined together
in the same architecture
to provide an even more robust system
for maintaining higher levels of availability.
Under this type of combined design,
load balancing will manage and optimize your resources
under normal conditions,
but then clustering can take over
to ensure the service remains available in the event
of a component failure or a system failure.
Third, our high availability systems should be built
with redundancy in mind.
Now, redundancy is the duplication of critical components
or functions of a system
with the intention of increasing the reliability
of a given system.
To create a highly available infrastructure,
redundancy has to be built into your designs
by installing or adding multiple power supplies,
network connections, servers, software services,
or service providers to your architecture's design.
By using redundant power supplies,
you can ensure that the failure of one power source
is not going to affect the continuity of your other services.
Now, this type of power supply redundancy
can be achieved by installing two power supplies
inside of a server directly,
or it can be achieved by ensuring your facility
has multiple power sources
by using an uninterrupted power supply, or UPS,
a backup generator, or maintaining connections
to two or more power grids simultaneously
to ensure your systems always have access
to the power they need to operate.
In addition to redundant power supplies,
it's also important
that you maintain multiple network connections or pathways
by using multiple cabled connections
or a cable connection and a wireless connection
in order to prevent any single points of failure
from disrupting your service to your network's connectivity.
Now, another form of redundancy comes in the form
of servers and services,
which can be configured to operate in a load balanced
or clustered architecture to help prevent downtime
by ensuring that a backup will always be available
in case one of your servers suffers
from a catastrophic failure.
Similarly, deploying redundant software services
or components can be used to ensure
that if one instance fails,
then the remaining workload can be shifted
to another instance seamlessly.
Now, additionally, if you're reliant
on external service providers
to provide a critically important service to you,
like your internet service provider does,
then you should probably protect your organization
from an outage by using two or more service providers
so that you always have a readily available backup.
This kind of provider diversity means
that if one provider experiences an internal issue,
the organization's operations will be able to continue
by using another provider's services.
For example, at DionTraining.com,
we use a credit card service provider known as Stripe
to collect payments from our students
when they buy their exam vouchers on our website.
But we also have a secondary provider already configured
and ready for us to enable if Stripe has some kind
of a catastrophic outage.
Normally, we prefer to rely on Stripe
because they provide a great level of service
at a lower price than our secondary provider.
But if Stripe goes offline for some reason,
we're already configured
that our backup credit card processor can take over
until our Stripe-based service is once again ready
to start conducting normal operations again.
Another example might be having two domain controllers
in your enterprise network environment.
Under this kind of a design,
you can set up your domain controllers
as a primary and secondary controller.
And if you need to restart one to apply a security patch,
the other controller can continue to maintain the services
for all of your end users.
Having redundant hardware for everything
would become really expensive,
because effectively, we are doubling the cost
to build out our network.
So it's important that each design decision is considered
to decide if redundancy is required
for a particular piece of hardware
or if you could build the desired level of redundancy
by using software or cloud-based services instead.
Either way, though, by adding additional layers
of redundancy to your overall architecture,
you're going to be able to help minimize
the potential points of failures in your systems
and ensure that your system or services remain available
despite any unforeseen issues.
Fourth, we can utilize multi-cloud systems
to distribute our data, applications, and services
across several different cloud-based environments
as an additional form of redundancy.
By implementing a multi-cloud architecture,
you can mitigate the risk of a single point of failure,
because if one of your cloud providers
experiences an outage,
then your organization's workload
can be rapidly transitioned to another cloud provider
with minimal disruptions to your operations.
Using a multi-cloud system
will also provide you with some additional flexibility
for scaling your operations and for optimizing your costs,
because different service providers
may offer different pricing structures for similar services.
So you can opt to use the least expensive one
that meets your needs as your primary provider
for a given service while maintaining the other provider
as your secondary or backup provider for that same service.
A multi-cloud design also helps your organization avoid
any kind of potential vendor lock-in issues,
because it provides you with more options and leverage
when it comes time to negotiate your service terms
or if you need to migrate your services
to another cloud provider due to an outage
or other types of issues.
However, while implementing a multi-cloud strategy,
it's going to be important
that you ensure proper data management,
unified threat management,
and consistent policy enforcement is being used
across all of your cloud-based environments
so that your organization can maintain a higher security
and compliance posture.
So remember, to achieve high availability,
you're going to need to conduct some strategic planning
in order to design a more robust system architecture
for your organization.
By understanding and implementing load balancing
and clustering, instituting redundancy and multiple layers
of the operational framework,
and utilizing a multi-cloud approach,
organizations can significantly reduce their risk
of service disruptions and the associated downtime costs.
This kind of proactive approach helps to safeguard
your organization's operational continuity and reliability
while also fortifying its reputation and credibility
in an increasingly competitive operational environment.