Choosing to be a Monolith, Cloud-Native or Cloud-Agnostic
Today’s expectations of modern applications are growing and if you think of creating a new application you will have to make lots of decisions that are not related to the problem you’re trying to solve. It’s more of common infrastructure needs that have to be satisfied in almost every application. Whether you’re building it in .NET, Java, Node.JS, Python, or Go, these needs are universal. Whether you’re building a monolith that will be hosted in one server, on-premise. Or whether you’re building a cloud-native, distributed, microservices, global-scale solution. The needs are similar, but the differences will be in how challenging they are, and how to solve for them.
Although I’ll use examples for .NET or Microsoft Azure to illustrate my point. This article applies to any technology/vendor.
First, let’s take a look at what are these infrastructural needs (sorry for the long list, you can skip if you get the point):
- A way to log and be able to troubleshoot issues
- A way to monitor metrics for performance and failures
- A way to authenticate users and validate their tokens
- A way to authorize user requests
- A way to access storage or database resources
- An exception handling…