Andy Jassy, the current CEO of Amazon, was struggling with the rate of application development within Amazon in the early 2000s. He dug into the problem and realized that a lot of time was being spent reinventing the wheel. For every project, the teams built fresh databases and compute and storage resources. It was then that Amazon’s internal teams set out to build common infrastructure services that everyone could access. That’s how the genesis of AWS was laid.
Today, AWS is one of the most profitable businesses of Amazon. Focus on the cloud platform, Azure, is often cited as one of the best decisions of Satya Nadella, who is credited with the remarkable turnaround of Microsoft. Google, too, is focussing strongly on its cloud platform, GCP. So what’s the hype all about? Why are major tech giants invested so heavily in the cloud business? Let’s find out.
Servers in the 90s
Let’s go back to the 1990s or the 2000s. Every organization with computing requirements used to have a server room (several organizations still have it). This room had several machines, stacked and wired together. It was well-maintained, with air-conditioning and UPS, and often had a dedicated person (often called the systems administrator or sys-ad) looking after it. Now, this way of maintaining servers had some problems:
- Any outages in the server room would typically disrupt the organization’s day-to-day affairs (if used for internal purposes), or lead to a flood of complaints from users of your app or website.
- As the number of users increased, you had to physically add more computational resources in the form of additional machines and storage. This process had its own lags and approvals.
- If your office was in a single location and you kept servers only in that place, then global audiences would face high latencies, and natural disasters would be a big threat.
What was a better way of dealing with servers? Well, one would think that if the server’s maintenance and scaling were outsourced, and only the scripting was left to the developers, a lot of headaches would vanish. This thought perhaps gives you an idea why cloud computing is being adopted so widely.
Today, if you want to host the backend for either your app or your website, setting up the physical infrastructure (a process that may take several days) for the server will hardly be your first thought. You may sign up for an account on a platform like AWS and go live in minutes. That’s how powerful cloud computing is. In this post, let’s cover the basics that help you gain some familiarity with cloud computing.
The three platforms mentioned in the introduction are the most popular cloud computing platforms:
- Amazon Web Services (AWS)
- Microsoft Azure
- Google Cloud Platform (GCP)
There are other platforms, like IBM Cloud or Alibaba Cloud. However, the overwhelming majority of the market share lies with the three platforms mentioned above. The basic services provided by all these platforms are similar, or comparable. When it comes to niche services, different platforms have different offerings. To give you a perspective, AWS even has an Groundstation-as-a-Service, so people making satellites can use AWS for their ground station requirements. Thus, when it comes to the scope of services, quite literally, sky’s the limit.
The services provided by all the cloud service providers can be broadly categorized into 3 categories:
- Compute services
- Storage services
- Other services
Compute services refers to using machines on the cloud as servers. Popular examples are EC2 (Elastic Compute Cloud) on AWS, or App Service or Virtual Machine on Azure. Compute services also include serverless services (like AWS Lambda or Azure Functions). This is an interesting topic and we’ll dedicate a section to serverless services below. Compute services can also include auxiliary services around the compute services, like load balancers (for automatically scaling resources according to the load), firewalls (for filtering traffic), and so on.
Storage services refer to databases (both relational and non-relational). All major cloud service providers provide at least one option for both relational and non-relational databases. For example, AWS provides RDS (Relational Database Service) and Aurora (relational databases), DynamoDB (NoSQL), S3 (Simple Storage Service) for file storage (think of this like Google Drive), and so on. Azure provides Azure SQL Database (relational), CosmosDB (NoSQL), Azure Blob Storage (for file storage), and so on.
Nowadays, all cloud service providers also provide advanced databases like Graph databases (Amazon Neptune, Azure CosmosDB), time-series databases (Amazon Timestream), cache databases (Amazon Elasticache, Azure cache for redis) and so on.
Some services combine compute and storage. Data warehouses used for analytical processes are good examples. Examples include Amazon Redshift, Google BigQuery, Azure SQL Data Warehouse.
At the risk of angering a lot of cloud developers, I’m clubbing all non-compute and non-storage serives under the head of ‘Other Services’. This is not because these services are insignificant, but because Compute and Storage services find usage in nearly every application, whereas other services are generally application specific. The list of the types of services under this head is so large that it won’t make sense to cover each and every service. I’ll list the popularly used types:
- Identity services: Amazon Cognito, Google Identity Platform, Azure Active Directory, and so on
- IoT Services: AWS IoT, Azure IoT, Google Cloud IoT
- Cloud Monitoring Services: AWS Cloudwatch, Azure Monitor, Google Cloud Monitoring
- BI Services: AWS Quicksight, Microsoft Power BI, Google Looker
- App Backend Services: Google Firebase, AWS Amplify
- CI/CD Services: AWS CodePipeline, CodeBuild, CodeDeploy, Azure DevOps, Google Cloud Build
There are several other services. I’ve been working with Cloud Services for the past three years, and there are so many I’m not aware of. AWS, for instance, has services for Blockchain, Machine Learning, Quantum Computing and so on. You need not learn about all of these services, unless you are working on applications requiring these services.
This is a relatively new class of services that is important enough for deserving a separate section. Suppose you have an unpredictable but very low server load (say about 5-10 requests a day). Now, you’d need to keep a traditional server running 24*7 for this load, and you would pay for this entire duration. Won’t it be nice if you could just pay for the time when the server was actually doing something? That’s exactly what serverless services help you do. Serverless services are pay-as-you-go services.
When you use a service like AWS Lambda, or Azure Functions, you essentially define a function and a trigger. It can be API triggered, or time-triggered (cron). There are also platform specific triggers. For example, a lambda can be triggered whenever a file is added to an S3 bucket. These functions charge you only for the invocation of the function, the time taken to execute the function, and the resources consumed by the function. These can lead to massive savings, especially when you have low loads.
Serverless is not restricted to compute services only. DynamoDB, for example, can be treated as a serverless database, where you pay for each read and write operation. S3 is a serverless storage solution, where you only pay for all the GET, PUT, DELETE, etc. operations. Of course, in all the storage solutions, the cost of storage (in GBs) is calculated separately. There are several other serverless services on AWS, as you can see here. Similarly, serverless services on Azure can be found here and those on GCP can be found here.
Advantages of Cloud Computing
Configurability is a big advantage of using cloud services over traditional on-premise servers. Suppose you are using an 8GB RAM virtual machine with 4 cores, and want to switch to a 32 GB RAM machine with 16 cores. For an on-premise server, you need to first place an order (sometimes go through the tender process), get the Purchase Order (PO) raised, wait for the shipment and then finally effect the changes on the new machine. The entire process would take several days. On a cloud service, you can make the change in minutes, through your console.
An on-premise server will typically be present only in one location. Replicating it in another location, and keeping the servers in sync will take a lot of work. With cloud computing, as you would have guessed, the process can happen in minutes. There are several regions to choose from, and it is incredibly easy to replicate servers/databases in different regions.
The cloud servers are generally equipped with the best-in-class facilities to ensure high availability (this includes uninterrupted power supply or UPS and ultra-fast internet speeds). You can have multiple availability zones in a region, and you can even have redundancy across a region, so that even a natural disaster doesn’t bring down your app. You essentially transfer the headache of maintaining the server to the cloud service provider, and just focus on the application side of things.
For a predictable and high load concentrated in a geography, it may make more economical sense to set up your own servers. However, the price advantage is likely to be minimal, considering that you’ll pay for the space, the hardware, the people to maintain the servers, and also the auxiliaries like UPS.
If you are a startup, or have unpredictable or gradually rising loads, then using cloud services is a no-brainer. Serverless services make the deployment of on-premise servers even less lucrative. Another thing to note is that the cloud service providers are constantly innovating to bring down the prices of their services. Over time, the prices of AWS and other cloud service providers have kept coming down. In fact, Jeff Bezos once said,
There are two kinds of companies, those that work to try to charge more and those that work to charge less. We will be the second.
Thus, you can be sure that over time, you will pay lower and lower for using cloud services. That’s one of the reasons for the massive adoption.
While no service is fool-proof (no one is stopping you from posting your credentials on a public GitHub repository), thanks to their scale, cloud service providers can invest in best-in-class security and protect the machines from a large number of attacks. They also promote the best security practices among their users, and give sufficient warnings whenever they observe that the best practices are not being followed. If you have on-premise server deployment, you’d have to develop the subject matter expertise related to server security, or hire a third-party agency to do so. This would add to the cost.
The prediction of your overall cloud bill is a tricky subject. Each service has its own pricing structure, and the prices also differ according to regions. There is no shortcut here, and you’ll have to calculate the price of each service separately for predicting and budgeting your cloud expenses. All platforms have a separate billing service that shows the distribution of your cloud expenses by service. You are encouraged to refer to this console to get an accurate idea of your spends. Small insignificant costs should be identified early on using this console, so that they don’t pose a surprise as you scale.
AWS Billing Console
How to get started?
There is no one-size-fits-all approach here. I personally started my cloud journey through AWS Lambda. This proved very helpful. AWS Lambda introduces you to AWS console, pricing models, serverless computing, and, thanks to the integration of other AWS services, you can gradually explore several others. If you don’t know where to start, this approach may be helpful to you. This course on Udemy will be a good starting point for learning AWS Lambda hands-on.
All you’d require is an AWS account. You may be asked for your debit or credit card while signing up. In India, some debit cards like those provided by SBI or HDFC don’t allow auto-pay, so if you are concerned that money will be deducted from your account without your approval, you can use these cards.
The AWS free tier is sufficient for all the examples covered in the above course, and you won’t incur any charges. You can get more information on the AWS free tier here. Azure and GCP also have free tiers. You can find the details here for Azure, and here for GCP.
Alternatively, if you already have a project available, then perhaps getting started with the services required for that project will be most beneficial. Hands-on learning is the best form of learning in my opinion. However, if you prefer structured curriculum-based learning, I’d recommend this course on Udemy, that prepares you for the AWS Solutions Architect Certification. I’m pushing for AWS because I’ve found it to be easiest to get started with. Once you are familiar with AWS, it should be fairly easy to get started with the other platforms.
Thus, we end this beginner’s guide. I hope you found it helpful. Thanks for reading.
For more tutorials beginner’s guides, click here.