Resilient cloud applications.
In cloud-based systems and
distributed systems in general, there is
always the risk of partial failure. Since clients and services are separate processes (containers), a
service might not be able to respond in a timely way to a client’s request. For example,
a service might
be down because of a partial failure or for maintenance; the service might be overloaded and
responding slowly to requests; or it might not be accessible for a short time because of network
issues. Therefore, a cloud-based application must embrace those failures and have a
strategy in place
to respond to those failures. These strategies can include retry policies (resending messages or
retrying requests) and implementing circuit-breaker patterns to avoid exponential load of repeated
requests. Basically, cloud-based applications must have resilient
mechanisms
—
either based on cloud
infrastructure or custom, as the high-level ones provided by orchestrators or service buses.
Security.
Our modern world of containers and microservices can expose new vulnerabilities. There are
several ways to implement basic application security, based on authentication and authorization.
However, container security must consider additional key components that result in inherently safer
applications. A critical element of building safer apps is having a secure way
of communicating with
other apps and systems, something that often requires credentials, tokens, passwords, and the like,
commonly referred to as application secrets. Any secure solution must follow security best
practices,
such as encrypting secrets while in transit and at rest, and preventing secrets from leaking when
consumed by the final application. Those secrets need to be
stored and kept safely, as when using
Azure Key Vault.
Orchestrators.
Container-based orchestrators, such as Azure Kubernetes Service and Azure Service
Fabric are key part of any significant microservice and container-based application. These applications
carry with them high complexity, scalability needs, and go through constant evolution. This guide has
introduced orchestrators and their role in microservice-based and container-based solutions. If your
application needs are moving you toward complex
containerized apps, you will find it useful to seek
out additional resources for learning more about orchestrators.