单体架构、微服务和无服务器架构

news2024/11/24 22:33:27

前言

在这篇文章中,我将演示在决定使用单体架构、微服务架构和无服务器架构时的权衡的简化心智模型。目标是突显每种风格的固有优势和缺陷,并提供关于何时选择哪种架构风格的指导。

单体架构

对于小团队或项目来说是理想的入门架构。它简单易上手,通常在需要超过一个团队的规模之前能够提供很多收益。

在构建单体架构时,务必从模块化开始,即使可能会增加样板代码。这意味着构建组件并在层之间保持严格的逻辑分离(更多详见Clean Architecture)。

  • 通信层 — 服务的外部接口
  • 封装 — 业务逻辑或用例的清晰接口
  • 领域实体 — 业务对象的数据表示,仅供内部使用
  • 架构隔离 — 避免实体之间的跨领域连接
优势

•开发便利性 — 所有代码都在一起。•部署便利性 — 所有代码一起部署。•网络效率 — 所有计算发生在进程内。•成本共享效率 — 每台服务器上有大型共享的 CPU 和内存池。

权衡

  • 组织规模的限制 — 由于开发、部署和代码的紧密耦合,需要协调的开销增加。
  • 技术债务的风险 — 容易采取捷径,构建紧密耦合的代码。

当您的团队看起来像上面的插图时,这表明您应该考虑演进您的架构到微服务。开发中的复杂性增加会高风险地降低质量,从而导致生产力减缓。这产生了一个矛盾的效果,即您雇佣的人越多,交付就变得越慢和不可预测。

微服务

对于业务需求开始增长并且团队分成多个团队时,这是理想的架构。这个里程碑自然地与将单体架构拆分成自然的、上下文边界的微服务相配合,以便团队可以更独立地扩展。

设计你想要的组织,架构会追随着,踌躇着走来

我强烈建议采用Inverse Conway Maneuver策略,打破您的通信模式,否则促使单体的熟悉模式将继续像胶水一样将团队粘在一起。

优势

  • 独立交付 — 减少依赖关系。
  • 明确所有权 — 实现强大的所有权模型。
  • 组织规模 — 促进团队间相对独立的并行努力。
  • 独立扩展 — 计算隔离允许平台的各部分独立扩展。
权衡

  • 协调标准 — 标准的变化可能泄漏到架构中,降低一致性和整体可维护性。
  • 网络延迟惩罚 — 曾经在单个服务中共同存在的进程现在正在进行引入端到端计算的网络调用,引入了延迟。
  • 资源共享减少 — 曾经共享相同 CPU、内存和磁盘需求的进程现在部署有自己的专用资源。
  • 成本增加 — 与单体相比,每个服务的额外网络 I/O 和资源会导致额外的成本。

无服务器

对于不需要实时保证的某些工作负载来说,这是理想

的架构风格。异步、分布式处理,不要求代码始终保持热和立即可用。

截至撰写本文时,该行业正在朝着编写更经济的系统的“绿色”方向发展,以减少我们计算的碳足迹。我认为这种架构风格是生态系统的一个强大补充,但并不能完全取代它的前辈的必要性。

优势

  • 精益扩展 — 仅扩展所需的无服务器函数。
  • 成本效益 — 仅在需要时使用最少的资源部署资源。(警告:仅当计算是间歇性的时候。在计算需要保持热时,请查看下面的权衡。
权衡

  • 资源效率惩罚 — 曾经共享相同 CPU、内存和磁盘需求的进程现在每个都有自己的最小要求。
  • 成本效益差 — 只有在部署时有恒定需求,使每个函数运行像热服务器时。
  • 网络惩罚 — 与单体和微服务相比,每个函数调用现在都是一个网络跳跃,而不是作为进程内计算共同存在。

随着时间的推移演进

那么,当您的业务或产品的需求不断增长时,您的架构演进可能是什么样子呢?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1400486.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python sleep函数用法:线程睡眠

如果需要让当前正在执行的线程暂停一段时间,并进入阻塞状态,则可以通过调用 time 模块的 sleep(secs) 函数来实现。该函数可指定一个 secs 参数,用于指定线程阻塞多少秒。 当前线程调用 sleep() 函数进入阻塞状态后,在其睡眠时间…

131. 分割回文串 - 力扣(LeetCode)

问题描述 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 输入示例 s "aab"输出示例 [["a","a","b"],["…

面试2024.1.20

简单介绍下你做的项目。 这个神领物流项目是一个前后端分离的项目,前段他有3个客户端(用户端为微信小程序、司机端和快递员端为app)一个管理端(pc),后端用的技术栈用的是SpringAlibabaCloud、数据库用的是M…

《Aspect-Sentiment-Multiple-Opinion Triplet Extraction》论文阅读

文章目录 文章介绍文章模型encoder部分ATE任务TOWE任务ATSA任务 番外 文章地址: https://arxiv.org/abs/2110.07303v1 文章介绍 目前的关于ASTE三元组提取的方面级情感分析论文大多关注于简单的句式,比如一个方面实体仅有一个意见词加以修饰&#xff0c…

CCC数字钥匙设计【NFC基础】--LPCD相关介绍

关于NFC卡检测,主要可以分成两个步骤: 1、LPCD低功耗检测,唤醒NFC读卡器。 2、唤醒后,NFC读卡器或MCU控制器轮询Type A、Type B、Type F、Type V(ISO15693)等卡类型。 本文主要介绍LPCD相关功能&#xff…

AI向所有的绝症宣战?2024年将被AI颠覆的行业-医疗健康

近年来,人工智能技术在我国得到了迅猛发展,不仅在互联网、金融、交通、零售、农业等领域取得了显著成果,还逐渐渗透到了医疗健康行业。预测2024年,人工智能将在医疗领域的应用发挥更深远的影响,甚至有可能颠覆整个医疗…

【MySQL】where和having的区别

🍎个人博客:个人主页 🏆个人专栏:数据库 ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 用途: 使用位置: 操作对象: 聚合函数: 示例: 结语 我的其他博客 前言 数据库中的 WHERE 和 HAVING 子句在 SQL 查…

【Linux】python版本控制

文章目录 1.查看目前python的版本2.添加软件源并更新3.选择你想要下载的版本4.警示:没必要设置默认版本误区千万千万不要覆盖python3软链接解决办法 5.安装pip换源 6.环境管理 网上有很多教程都是教导小白去官方下载之后编译安装。但是,小白连cmake是什么…

【LeetCode: 295. 数据流的中位数 + 堆】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

羊驼系列大模型LLaMa、Alpaca、Vicuna

羊驼系列大模型:大模型的安卓系统 GPT系列:类比ios系统,不开源 LLaMa让大模型平民化 LLaMa优势 用到的数据:大部分英语、西班牙语,少中文 模型下载地址 https://huggingface.co/meta-llama Alpaca模型 Alpaca是斯…

Datawhale 强化学习笔记(三)基于策略梯度(policy-based)的算法

文章目录 参考基于价值函数的缺点策略梯度算法REINFORCE 算法策略梯度推导进阶策略函数的设计离散动作的策略函数连续动作的策略函数 参考 第九章 策略梯度 之前介绍的 DQN 算法属于基于价值(value-based)的算法,基于策略梯度的算法直接对策略本身进行优化。 将策…

stm32 FOC系列 直流有刷控制原理

1、直流有刷驱动板 使用三极管搭建的简易 H 桥电路,如图 5.3.1 所示: 图 5.3.1 是使用三极管搭建的简易 H 桥电路,其中 MOTOR 表示直流有刷电机, Q1、 Q2、 Q3 和 Q4 为 4 个三极管,其中 Q1 和 Q3 接在了电源正极&…

Java设计模式-前言

大家好,我是馆长!从今天开始馆长开始对java设计模式进行讲解和整理分享给大家。馆长会尽快的整理完成设计模式的所有内容和讲解代码。从多方面进行模式的详细说明,方便各位看官理解和易学。 软件设计模式的概念 软件设计模式(Sof…

mac 安装配置oh-my-zsh

1. 安装brew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 按照步骤安装即可 安装完成查看版本 brew -v 2. 安装zsh brew install zsh 查看版本 zsh --version 3. 安装oh-my-zsh github官网链…

【微信小程序独立开发 5】后端搭建联调

前言&#xff1a;上节我们完成了个人信息页的编写&#xff0c;本节完成将个人信息发给后端&#xff0c;并由后端存储 创建Spring Boot项目 配置maven仓库 使用自己下载的maven版本 添加pom文件 <dependencies><dependency><groupId>org.springframework.boo…

数据库备份 - automysqlback- Error: Dependency programs are missing. mysql ……没有找到?

数据库备份 - automysqlback- Error: Dependency programs are missing. mysql ……没有找到&#xff1f; 昨天在Linux 服务器上做了一个的mysql数据库备份&#xff0c;备份很重要关键时候能救命。具体怎么备份这边就不多说了。文件已经免费上传了 https://download.csdn.net/…

数据结构【DS】Ch8 排序

文章目录 插入排序选择排序归并&基数外部排序 插入排序 交换排序 选择排序 归并&基数 外部排序

注解实现校验接口传参是否超出取值范围

文章目录 1、定义注解2、使用注解3、其余校验实现思路2.04、其余校验实现思路3.0 写接口&#xff0c;Dto里很多字段要检验传参范围&#xff0c;自定义个注解来校验。 1、定义注解 注解定义代码&#xff1a; import javax.validation.Constraint; import javax.validation.Con…

QT上位机开发(MySql访问)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 网上介绍的关于QT和mysql部分的内容,都是利用Qt自带的mysql库来实现数据读写的。但是事实上来说,即使不用qt带的库,不用odbc,直接使用mysql安装包自带的lib库和dll库,也是可以…

Unity 面试篇|(九)操作系统与网络篇 【全面总结 | 持续更新】

目录 1. 客户端与服务器交互方式有几种&#xff1f;2. OSI七层模型有哪些&#xff0c;每一层的作用3. UDP/TCP含义&#xff0c;区别4. TCP/IP协议栈各个层次及分别的功能&#xff1f;5. 写出WWW的几个方法&#xff1f;6. Socket粘包7. Socket的封包、拆包8. Socket 客户端 队列…