Todd Rodzen

Agile Application Development, DevOps, Cloud Architecture Engineering



to Containerize

Containerizing an application from a monolithic application to container based microservices is a large and wide topic. I like to focus on small topics within the greater goal when looking at cloud architecture. The first is the decision to containerize and how to best achieve a manageable cloud. Of course, the desired end services and application need will drive the ultimate cloud architecture model. First, let’s look at the basic design possibilities.

The first option is a monolithic application. The problems are well known. The size of the application and complexity for the developer soon becomes overwhelming. We will take it for granted this is not desirable.

Next, is a possibility of creating a sort of hybrid cluster. This still has the problem for the developer as the application design becomes too complex. I reviewed the design of a sort “roll-your-own” cluster with a MySQL and node.js in a prior post “to Cluster or not to Cluster”. This process described using the Cluster function within node.js. This is a quick and dirty solution to programmatically rolling-your-own cluster for node.js. There is also the PM2 solution to manage a cluster application on node.js. This provides the solution of maximizing resources to utilize processing power on multiple threads but does not provide any of the solutions for a scalable containerized application.

Next, the type (or flavor) of scaleable container service is open for debate. There is docker swarm, Amazon AWS Elastic Container Service, build-your-own Kubernetes, as well as many others. One promising managed service from AWS is EKS (Elastic Kubernetes Service.) I won’t try to review these options but in a future post simply provide a step by step basic process to look at cloud architecture for a Kubernetes homogeneous solution. This provides for decisions based on cloud or service needs without fixating on AWS solutions. As with any developing, the team of developers can drive the solution to some extent, as there are many flavors of best-practices for cloud containerized services.

There are also many other cloud-based services including GCP (Google Cloud Platform), IBM, etc but Kubernetes on AWS has become a leader. In one recently published report, Kubernetes on AWS has 63% of market share of all container services used today.

My future posts focused on Kubernetes will focus on container imaging from Docker Cloud but Google Cloud container registry is also a good option. There are other options like RKT, but of course, Docker is the most widely used and supported.


AWS Architecture

A while ago I did some application design that discussed the specific need of utilizing pooled connections and clusters when using node.js and mySQL. These ideas along with many others like kubernetes containers, continuous deployment, etc are small steps to create a long-term solution of a well-architectured framework.

As a sort of exercise let’s define the terminology that is important in the planned architecture of a cloud-based system.

  • Responsiveness: reacting quickly and positively
  • Resiliency: capacity to recover quickly from demand
  • Elasticity: the ability to stretch or duplicate to adapt to high demand and return to normal when demand no longer exists.
  • Availability: the state of maintaining uptime

Some other pillars of a well-architected framework include:

  • Security: ability to protect information, systems, and assets while delivering business needs
  • Performance Efficiency: the ability to use computer resources efficiently to meet system requirements
  • Cost Optimization: the ability to avoid or eliminate unneeded cost

While these terms at times overlap and intersect to different degrees for the purpose of creating a well-designed cloud infrastructure, it is always important to consider these pillars in determining best practices. If your best-practices includes AWS it probably includes EC2, S3, and RDS. Although it also must also include budget, cost optimization and return on investment (ROI) utilizing tools to track costs, such as through tagging and IAM controls, you can innovate without overspending.

Additionally, a good architecture will utilize performance tools to track and maintain top efficiency within the cloud resources utilizing Amazon Cloud Watch or 3rd party monitors. Finally, audits and tools are also needed to maintain data integrity and security.

Regardless of the underlying technology, there are many best practices. Some might think of it as varying as individual opinions, everyone has an opinion. What is important for an organization is to select best practices that work for the entire organization from the users to the operators to the developers and designers. The success of any architecture depends on a cohesive operation and sound principles.

This AWS Architecture blog has some great insight to AWS design and architecture to achieve responsiveness, resiliency, and elasticity.

I particularly like the discussion of scaling your application one-step at a time.

Powered by

Up ↑