包阅导读总结
1. 关键词:
– 快速可持续流
– 单体架构
– 设计挑战
– 架构要求
– 技术栈升级
2. 总结:
本文主要探讨如何为快速可持续流设计单体架构,指出快速可持续流需要具备团队规模元素、松耦合、可测试性等关键特征,分析了单体架构在满足这些要求时的优势和挑战,如技术栈升级困难、需精心设计实现松耦合等,还介绍了相关线上工作坊的学习内容。
3. 主要内容:
– 快速可持续流的架构要求
– 团队规模元素:避免认知过载。
– 松耦合:遵循康威定律。
– 可测试性:需自动化测试,本地可运行。
– 可部署性:支持快速可靠自动部署。
– 可观测性:应用能发出遥测信息流。
– 可进化性:支持技术栈持续升级。
– 单体架构介绍
– 特点:单个可执行/部署单元,单个代码库和部署管道。
– 优势:比微服务架构简单,如能实现 ACID 事务。
– 不足
– 技术栈升级挑战大,需整体升级,影响功能交付,实验新技术机会有限。
– 可观测性有限,无法看到单个子域资源消耗。
– 构建松耦合单体需精心设计,传统单体架构不满足要求。
– 设计可测试和可部署单体需精心设计,单部署管道可能成瓶颈。
– 学习更多
– 线上工作坊:教授设计快速流架构的知识。
– 作者可提供组织改进相关帮助。
思维导图:
文章地址:http://microservices.io//post/architecture/2024/08/21/architecting-monoliths-for-fast-flow.html
文章来源:microservices.io
作者:Chris Richardson
发布时间:2024/8/21 8:03
语言:英文
总字数:931字
预计阅读时间:4分钟
评分:90分
标签:单体架构,软件开发,DevOps,持续交付,可测试性
以下为原文内容
本内容来源于用户推荐转载,旨在分享知识与观点,如有侵权请联系删除 联系邮箱 media@ilingban.com
Architecting monoliths for fast, sustainable flow
architecting fast flow modular monolith deployment pipeline
Public workshop: Sept 23rd-25th – Architecting for fast, sustainable flow – enabling DevOps and Team Topologies thru architecture. Learn more and enroll.
In a previous article Dissecting ‘architecting for fast, sustainable flow’, I described how fast, sustainable flow requires an architecture with several key characteristics. In this article, which is based on my workshop Architecting for fast, sustainable flow: enabling DevOps and Team Topologies I’ll describe how to architect monoliths to achieve fast, sustainable flow.
Architectural requirements for fast, sustainable flow
As I previously described, fast flow is the continuous delivery of a stream of valuable changes to customers.Sustainable flow is ability to keep the application’s technology stack current.Fast, sustainable flow requires an architecture with several key characteristics:
- Team-sized elements – in order to avoid cognitive overload, the architecture must consist of team-sized elements
- Loose (design-time) coupling – loose coupling was identified by the Accelerate authors as a key enabler of high performance. It’s also a consequence of Conway’s law: loosely coupled teams (defined by Team Topologies) need a loosely coupled architecture.
- Testability – the path from development to production must be a fast, automated deployment pipeline.An application must, therefore, be capable of being tested using automated tests.Those tests must be fast.Moreover, a developer must be able to run the tests on their local machine.
- Deployability – the application must support fast, reliable, automated deployments.
- Observability – the deployed application must emit a stream of telemetry – logs, metrics, and distributed traces – which is feedback to the developers about the behavior of application and its users.The telemetry is used to monitor the application’s health and diagnose problems.It’s also used to understand user behavior.
- Evolvability – the architecture must support the continuous upgrading of the application’s technology stack.
About the monolithic architecture
The monolithic architecture is an architectural style that structures the application as a single executable/deployable unit, e.g. a single WAR or executable file.Moreover, there’s a single code base with a single deployment pipeline.
A monolithic architecture is simpler than a microservice architecture.For example, operations can be implemented as ACID transactions.But unfortunately, for some applications, the monolithic architecture can be an obstacle to fast, sustainable flow.To understand why, let’s take a look at how well it satisfies the architectural requirements described earlier.
Architecting monoliths for fast, sustainable flow
With careful design, a monolith architecture is able to satisfy some but not all of the architectural requirements for fast, sustainable flow.Let’s look at the details starting with the biggest drawback of the monolithic architecture: poor evolvability.
Evolving a monolith’s technology stack is challenging
Sadly, one inherent limitation of the monolithic architecture is that evolving the technology stack can be challenging.Because a monolith has a single technology stack, you must upgrade the entire technology stack at once.While tools such as OpenRewrite can automate some upgrades, upgrading a large code base is often a massive task that spans multiple teams.It’s difficult to schedule since it disrupts feature delivery.There are also limited opportunities to experiment with new technologies.
Monoliths are mostly observable
Observability is mostly unrelated to the architecture style.A monolith can be instrumented so that it emits a stream of telemetry.One inherent limitation, however, is that the telemetry is for the entire application.You cannot, for example, see the resource consumption of an individual subdomain.
Creating a loosely coupled monolith requires careful design
To achieve fast flow the monolith must be structured as a collection of loosely (design-time) coupled, team-sized elements (e.g. modules).Loose (design-time) coupling requires elements to resemble icebergs.Each element must have small, stable API that encapsulates the much larger implementation.
Unfortunately, however, the traditional monolithic architecture is a technically-oriented, layered architecture, which does not meet these requirements.The layers of a large application’s layers not team-sized.Teams typically work across multiple layers.And to make matters worse, the layers are typically not loosely coupled.Careful design is required to structure the monolith as a collection of loosely coupled, team-sized modules.
Creating a testable and deployable monolith requires careful design
Designing a monolith that is loosely coupled is not the only challenge.The monolith consists of a single code base and a single deployment pipeline.As a result, the deployment pipeline is potentially a bottleneck and an obstacle to fast flow.
That’s because the larger the code base, the longer the deployment pipeline’s execution time.And to make matters worse, the larger the engineering organization the higher the rate of Git pushes.As a result, Git commits either wait in the deployment pipeline’s queue, which delays feedback, or are batched, which makes it more difficult to troubleshoot production issues.
The throughput of a single deployment pipeline is limited.But, you can minimize its execution time and increase its throughput through careful design.You must use a combination of physical design techniques, and testing strategies, to minimize the deployment pipeline’s execution time.
Want to learn more?
As you can see, architecting monoliths for fast flow requires careful design.If you want to learn how to design a fast flow architecture, enroll in my upcoming public online workshop on architecting for fast, sustainable flow.
You will learn:
- Architectural requirements for fast, sustainable flow.
- The forces that shape an architecture and the trade-offs that you will need to make when designing an architecture.
- How to decide between the monolithic and microservice architectural styles.
- How to design a loosely coupled monolith.
- Physical design techniques and testing strategies to accelerate the deployment pipeline.
- How to design a microservice architecture.
Need help with accelerating software delivery?
I’m available to help your organization improve agility and competitiveness through better software architecture: training workshops, architecture reviews, etc.
Learn more about how I can help