第 4 章 剖析巨石 解剖单体
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
最终目标应该是通过数字创新提高人类的生活质量。
小马 马化腾
纵观历史,人类一直痴迷于将思想和概念解构为简单或综合的部分。,只有将分析与综合结合起来,我们才能获得更高层次的理解。
亚里士多德称分析为 "将每一个复合体分解为那些由其合成的事物。 因为分析是合成的反面。合成是从原理到那些从原理衍生出来的事物的道路,而分析则是从终点回到原理"。
软件开发也遵循类似的方法:将一个系统分析为其复合部分,确定输入、所需输出和细节功能。 在软件开发的分析过程中,我们已经意识到,处理输入、交流或持续输出总是需要非特定业务功能。 这使我们明显可以从可重用、定义明确、有界上下文、原子功能中受益,这些功能可以共享、消费或互连,从而简化软件的构建。
让开发人员把主要精力放在实现业务逻辑上以达到目的--比如满足客户/企业明确定义的需求、满足某些潜在用户的感知需求,或者将功能用于个人需求(自动执行任务)--一直以来都是我们的愿望。 每天都有太多的时间浪费在重塑一个最容易被重塑的轮子上:可靠的模板代码。
微服务模式近年来声名鹊起,势头强劲,因为它承诺的好处非常突出。 避免已知的反模式、采用最佳实践、理解核心概念和定义,是实现这种架构模式的好处并减少采用这种模式的缺点的首要条件。本章介绍了反模式,并包含使用 Spring Boot、Micronaut、Quarkus 和 Helidon 等流行的微服务框架编写的微服务代码示例。
传统上,单体架构交付 或部署单个单元或系统,从单一源应用程序中解决所有需求,可以确定两个概念:单体应用程序和单体架构。
单体应用程序 只有一个部署实例,负责执行特定功能所需的所有步骤。 这种应用程序的一个特点是有一个唯一的执行界面点。
单体架构指的是所有需求都由单一来源满足、所有部分都作为一个单元交付的应用程序。 各组件可能在设计上限制了与外部客户端的交互,以明确限制对私有功能的访问。 单体中的组件可能是相互连接或相互依存的,而不是松散耦合的。 换句话说,从外部或用户的角度来看,对其他独立组件的定义、接口、数据和服务知之甚少。
粒度是指一个组件向软件的其他外部合作或协作部分暴露 的聚合级别。软件的粒度取决于多个因素,如一系列组件内部必须保持的保密级别,以及不能向其他消费者暴露或提供的保密级别。
现代软件架构越来越注重通过捆绑或组合不同来源的软件组件来提供功能,从而导致或强调更精细的粒度级别。 与单体应用程序相比,暴露给不同组件、客户或消费者的功能更多。
要确定 模块的独立性或可互换性,我们应仔细研究以下特征:
-
依赖关系的数量
-
这些依赖关系的强度
-
所依赖模块的稳定性
如果前面的特征得分较高,就应该对模块的建模和定义进行第二次审查。
云计算
云计算有多种定义。 Peter Mell 和 Tim Grance 将其定义为一种模式,可实现对可配置计算资源(如网络、服务器、存储、应用程序和服务)共享池的无处不在、便捷、按需的网络访问,这些资源可快速调配和释放,只需最少的管理工作或服务提供商互动。
近年来,云计算的发展速度大大加快。例如,2020 年最后一个季度,云基础设施服务支出增长了 32%,达到 399 亿美元。Canalys 的数据显示,总支出比上一季度增加了 30 多亿美元,比 2019 年第四季度增加了近 100 亿美元。
目前存在多家提供商,但市场份额分布并不均衡。 三家领先的服务提供商分别是亚马逊网络服务(AWS)、微软Azure和谷歌云。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access