- Hands-On Microservices with Kotlin
- Juan Antonio Medina Iglesias
- 487字
- 2021-06-30 19:10:39
From the monolith to microservices
So, why did SoA evolve into microservices? Perhaps one of the reasons was due to the monolith. There was a point in time where applications were small, and the presentation logic was usually coupled with the business logic. Then, the domain model got complex and many software patterns arose. Most of them were focusing on one thing: Separation of Concerns.
Separation of Concerns (SoC) is a design principle for separating software into distinct sections so that each section addresses only one concern. But software is not the only thing that needs separation; the architecture needs it as well. Things like SoA are designed for that, as it allows us to hide our complexity behind black boxes to make our architecture more modular, and with the ability to handle the complexity that we require.
We may create a complex data store in the mainframe based on detailed business rules, or on a powerful database with a deep schema, complex stored procedures, views, and relationships. We can choose frameworks and tools to easily orchestrate all these parts. We probably also need a powerful Enterprise Software Bus (ESB).
An ESB is a software component that is in charge of the coordination, mapping, and routing of services. The overall idea is to have a very powerful component to easily orchestrate messages. In order to create complex applications, services were designed using most of these elements, creating complex relationships.
From services calling each other, to views querying several tables, pulling data from different business domains. And finally, merging in our ESB several of those elements with business rules to produce new services.

Changing one service, or a table in the schema, produces a knock-on effect in the whole application, resulting in those relationships and dependencies needing to be changed, whether they're services, mappings, or even screens as they are all bundled together. In many cases, this causes long release cycles as handling that level of complexity is not an easy task. And nor is the development, configuration, testing, nor deployment.
Even scaling the application could be affected, whether it's a bigger database, more servers for services, a bigger ESB for handling more messages. Since they depend on each other, it is not easy to scale them separately. All of this means that our architecture is coupled and we have created a monolithic application.
Does this mean that doing SoA will produce a monolith? No. In fact, before the concept of microservices, many architects and developers started to adopt patterns and architectures to handle this problem. This evolved into what we call microservices today.
- 深度實踐OpenStack:基于Python的OpenStack組件開發
- Spring技術內幕:深入解析Spring架構與設計
- AutoCAD VBA參數化繪圖程序開發與實戰編碼
- Modular Programming in Java 9
- jQuery開發基礎教程
- OpenGL Data Visualization Cookbook
- LabVIEW虛擬儀器入門與測控應用100例
- 3ds Max印象 電視欄目包裝動畫與特效制作
- C編程技巧:117個問題解決方案示例
- 計算機應用基礎(第二版)
- Continuous Delivery and DevOps:A Quickstart Guide Second Edition
- Mastering ASP.NET Core 2.0
- Microsoft Dynamics GP 2013 Cookbook
- 軟件測試技術
- Socket.IO Cookbook