Prelude: Around this time last year, I cleared the AWS Certified Solution Architect Associate exam - which I consider to be a personal milestone. Though I have earned many certs in the past, this one was something not related to what I was working on. I had to put in a lot of extra hours to prepare for the cert. That said, I was lucky enough to work on allied technologies in networking/DC space which helped a lot to understand the basics of the public cloud. Starting this week I will be blogging about various components, architecture, puzzle pieces that make up the public cloud (AWS in particular). Will try to focus on concepts (which helped me), rather than how to get things done in AWS. With this prelude, here goes...
Applications are those pesky little things that make the world go around today. To ensure these work properly, a lot of love and care is required. Starting from how they are deployed to how they are patched, updated, maintained- things have changed rapidly in last the last decade. To understand how involving the process is, let's consider an enterprise social media app like EXO. Following would be basic functionality for such an app (redacted to maintain simplicity) :
Allow employees to log in with their active directory credentials (Single sign-on).
Write/Post articles/blogs/updates.
Like other blog posts.
Follow other employees (Similar to Linked in/Facebook).
Upload video/photos and share them.
From a software requirements standpoint- this application would need the following components (assuming your company is adopting opensource tech) :
OpenID: Allow employees to log in with their active directory credentials (Single sign-on).
WordPress: Write/Post articles/blogs/updates.
Database like MySql is required to save relational data like employee-Department mapping.
Like/follow- Articles/blogs- This will involve some kind of No-SQL DB like MongoDb. MongoDB can also be used to store metadata related to employee profiles including who else the employee is following.
Upload video/photos and share them: This requires networked file storage.
Finally, all these components of software have to talk to each other- so it requires an messaging system like RabbitMq.
From a deployment standpoint, all these components could be deployed on a single server. However, this would mean that the maximum load the server can support will be limited by its hardware resources. Scaling server resources to accommodate the increasing load is vertical scalability and leads to bad monolithic system designs. This type of scaling is avoided in the last decade or so.
Recent application deployments rely on horizontal scaling- you deploy the software components as virtual machines or containers. When the load on certain components increases (for example webserver), more instances of the component are deployed and traffic is load-balanced between them.
Horizontal scaling increases IT infrastructure management complexity. The following pillars of IT infrastructure need to be managed:
Compute/Servers.
Network.
Storage.
Additionally, the above components are housed in data centers. Data centers themselves require a lot of management including temperate/humidity control, access control, etc.
So far what I have described is the foundation on which the said software will run. Developing, maintaining, and patching the enterprise social media app is a separate task by itself.
With the cloud, you can either move some or all of the grunt work involved in running the application to the cloud provider. Depending on how much work you are willing to do, the enterprise social media app can be made to "fit in" one of the following models:
Image source: Google
On-Premise: You set up your own data center and manage everything on your own.
Infrastructure as a Service: You take advantage of cloud providers' data center underlying infrastructure, but manage everything on top of it. For our enterprise social media app, this would mean spinning up Amazon EC2 instances for each software component and running all EC2's in a VPC.
Platform As a Service: Cloud providers may provide "platforms" to run your applications. For instance, there could be prebuilt WordPress/apache or database services (Amazon RDS) that can be used as building blocks for the social media app. The cloud provider is responsible for the maintenance of these software components while you are responsible for maintaining the "code".
Software as a service: This is an example of a service provider taking care of everything. EXO - provides a SaaS solution that is hosted in AWS.
Creative analogy- Source Google
AWS offers hundreds of services including IaaS, PaaS, and SaaS. For someone hoping to learn about the cloud, AWS offers a plethora of options. I will be blogging more about AWS in the coming weeks
Till then, Ciao! have a great week ahead and stay safe !!
Comments