Scaling your business up: Part I
Scaling your business up: From Monolithic Applications To Microservices and Containers Orchestration
Imagine you want to create an application to your new business and you believe it will grow up quickly. Maybe at the beginning you don’t want or you may not have all money for huge investments in computing infrastructure but you would like to have an application that scales as fast as your business.
Probably the first question you should be asking yourself is: Should I build a monolithic application?
Let’s start talking about monoliths
Monoliths is how we usually refer to large applications developed and deployed as a whole, the way we used to build few years ago. Monolith is hard for maintenance. As the application grows up, it gets harder to maintain the code and more modules become dependent on each other.
One change might affect the entire application and developers were afraid to add new functionality. Changes were costly and delivery took a while.
All that can be fixed with good code organization and testing practices – which will be discussed in a future article – but still, the biggest issue with monoliths is when scaling time comes. The only way to scale monolithic application and systems is by deploying it to additional servers. Yes, deploying the whole thing again.
This will consume/require processing resources for areas that are not your target. Let’s assume you need to scale only a small part of the system that gets overloaded during utilization spikes, but as a monolith you have to scale everything as a whole and that may mean infrastructure and cost wasting.
Maybe, in your case, you already have a monolith and you are experiencing problem trying to scale it up for your business.
Four years ago I was introcuded to Microservices. This concept was created to try to solve some of the issues presented by monolithic application design. Microservices are independent small applications running together as part of a bigger system.
Along these years we noticed how easier it is to maintain small applications and adding new features to them. Also ramping up new developers is achieved quickly as they don’t need to know the entire system to get started. They will focus on making sure they understand what’s the goal for that small piece of code in order to add functionally or fix a bug.
We have been working on a huge application together with other teams and it’s amazing how a huge applications can become simple if you only look at one piece at a time.
Microservices look like a good alternative if you want to be able to control and scale your applications at that level or granularity, since scaling techniques can be applied to critical parts of your system that requires it, allowing your business to make that decision and save resources down the road.
In next articles we will discuss details of how to actually take advantage of scaling Microservices, how containerization and continuous delivery can help your company streamline development process while working on maintainable and scalable applications.
Written by James de Souza, from Actminds’ development team.
Software architect and java developer for more than 17 years, James is experienced in working with microservices and cloud solutions focusing on code quality, clean design for performant systems.