We already have monolithic applications for more than a decade. Client servers with the web server and database server clustering can solve all of the problems that we call scalability, high availability, and resilience. Even when many applications can run in the microservices model, many case studies show that monolithic can answer a lot of problems. Even AWS shows us that they can reduce the cost more than 90% from microservices to monolithic. It is honest point of view that the monolithic is still good in the cloud era. Imagine you already have web applications that run in monolithic model, like my ASP.NET Core web application. Commonly, we use services apps in Azure or elastic beanstalk in AWS. We usually use publish profile and then update our application through Visual Studio. Combining it with CI-CD (Azure Pipeline) in Azure DevOps everything will be perfect.
Do we really need the containers?
Pros and Cons Container Technologies
In order to answer the question, we should understand the benefits of Containers technology. If you life in 2000, there is a technology namely Delphi. Delphi packages all the dependencies and the runtime on a single executable. Therefore, it doesn't need to do another installation like Java runtime, .NET Framework, or even DirectX. Just click and run! The concept is adopted in the cloud application deployment through container concept.
Just think container like a single executable file that can run your entire web application in the cloud or on-premises.
Container is just your lunch box; you can get benefit of your lunch box such as:
- Portability, you can move your lunch box anywhere even in the moon!
- Fast delivery, you can bring any meal that you can bring. Rice, eggs, and broccoli in one package.
- Efficient, you don't need to bring separate bags for foods you can combine it in single package.
- Separation concern, you can separate between one food to the other.
Just like lunch box, it help you deployment of your foods; container helps you to deploy codes in a package. It just like mini VM. However, container doesn't need you to manage your operating system, install the dependencies, or monitor the resources. Container technology like Docker helps you to deploy software faster just like Services apps, with additional benefits above. Combining with microservices and cloud technology, you can get serverless technology implementation.
Microservices, help you run your application based on service-oriented architecture. Microservices are decoupled solutions that helps you to manage your dependencies as low as possible. It is just like Lego block of container.
Serverless means you don't need to manage your server. Serverless helps you to manage your computing environment without being afraid of its scalability and availability. It is just like automatic transmission of your car!
However, you should understand several tradeoffs when using containers.
- Entire update! When you want to update one of your codes you need to deploy the codes entirely. This will become a problem if you don't use the microservices model, since you need to deploy entire codes!
- Need more resources. Container use more resources (CPU, Memory, Disk) than the virtual machine, and the speed is not faster than bare metal server.
- Overhead! Imagine you bring three lunch boxes, you will user more space than bring a big lunch box. Having three lunch boxes mean you will have three separates runtime, comparing with Azure App Services that can share the instance, the container will run isolated.
Do We Really need containers?
My answer is, it depends on situation
- Yes, if your application is small footprint like web services, API, or function.
- No, if your application is big footprint like content management systems, ERP, or typical information system.
So, you need to understand your situation right now, let me know what you think about the container in the comments.