分布式单体的六大病症

分布式单体架构 当我们需要设计一套在线课程发布和订阅系统(以下简称“在线课程”系统)时,传统做法就是采用早已烂熟的逻辑三层架构:用户界面层、业务逻辑层和数据访问层,如果遵循领域驱动设计(DDD)的经典分层架构,基本上也就是四层:表现层、应用层、业务层以及基础结构层。在系统刚刚开始发布上线的时候,用户量和每日请求量并不是特别大,所以我们可以将来自于各个层的组件全部部署在一台物理机器上,因此,层(Layers,逻辑层)与层(Tiers,物理层)之间并非是一对一的关系。当然,也有可能会将用户界面层、业务逻辑层以及数据访问层分别部 阅读详情

当公式的组织 架构 及其代码被拆分以后,但仍然存在紧密耦合时,就会出现分布式单体。这已经成为一个问题,因为系统的规模增加,单体的所有部分都需要一起管理,这会放慢开发速度并增加任何变化的风险。

能够识别何时处理分布式单体很重要:

1. 锁步部署

当两个服务需要一起部署时,它们是耦合的。如果它们在一个单体中,这很容易管理。但是,如果它们是实际上应该独立管理的独立服务,部署可能会变得缓慢和痛苦。我们可以通过识别耦合的原因并重构我们的解决方案来解决这个问题。

如果这两个服务使用共享代码,则解决方案可以重组代码以共享一个单独管理的库。如果他们使用共享基础设施,这可能意味着将服务拆分到不同的主机上。

2.版本耦合

如果服务 A 直接调用服务 B 的一个版本,则每次更新服务 B 时,我们都需要更新服务 A 的配置。这种更改耦合会使管理两个应用程序的生命周期变得复杂,但这是可能的。

理想情况下,服务 A 应该调用服务 B 的端点,该端点不是特定版本,并且也由服务 B 管理。这通常可以通过使用 CNAMES 的 DNS 来完成,如下所示:

A1.domain.com > 调用 > B.domain.com > B1.domain.com

而不是:

A1.domain.com > 调用 > B1.domain.com

3. 双向依赖

如果服务 A 调用服务 B 并且服务 B 调用服务 A,则很难测试对任一系统的更改。发生这种情况时,我们可以选择同时更改整个环境,测试通过旧版和新版软件发送到的事件,或者在如何路由消息方面显着增加复杂性。

4.共享数据库访问

当两个服务共享相同的数据库访问权限时,无需直接调用服务即可轻松地从另一个域中提取数据。这可能导致在数据库层连接的耦合服务。当服务修改它自己的数据库结构时,它不应该影响任何其他服务。反之如果是这样,那么服务是耦合的。

共享数据库以节省管理工作并没有错,但这应该通过安全性进行严格控制以防止耦合。使用 Postgres 执行此操作的常用方法是为每个服务使用单独的用户和模式。如果一个服务想要访问另一个服务的数据,它应该直接调用下游服务。

5. 共享队列

与共享数据库访问导致耦合的方式相同,共享队列也是如此。如果两个服务直接与一个共享队列通信,那么任何一个服务都无法安全地修改、更改或重定向消息,而不会有破坏这两个服务的风险。

应尽可能避免共享队列,并且任何队列都应由单个服务拥有并且不暴露给其他服务。

6.企业服务总线

企业服务总线 (ESB) 是另一种常见的数据存储模式,类似于共享数据库和共享队列,但规模更大。ESB 旨在允许通过中央总线发送和接收任何消息。这意味着一旦服务向总线发送消息,就不清楚谁在使用该消息,正在使用它做什么,以及它是否成功。这些问题不容易解决,这意味着我们的系统不仅会与其他系统耦合,而且会超出我们可能意识到的范围。

概括

无论您的系统架构如何,您都应该能够清楚地确定您的系统是单体、微服务还是分布式单体。通过共享部署、共享数据和双向依赖识别与其他服务的耦合在此过程中至关重要。这样做将使我们能够构建我们的架构,这样我们就可以避免最终成为分布式单体。

Linux初级介绍之番外篇:Linux挂载windows中的共享目录 挂载windows共享目录Windows端共享权限设定解禁Guest设置共享目录权限Linux挂载端扫描共享目录挂载共享目录遇到错误的解决方案 Windows端共享权限设定 解禁Guest 右击我的电脑选择管理–>本地用户和组–>在用户项中双击Guest用户–>取消账号已禁用选项 设置共享目录权限 右击共享目录点属性–>在共享页面中点击共享选项–>下拉选择共享对象为Everyone–>点击共享按钮 3.设置本地策略 打开命令框–>输入secpol.msc–&gt 阅读详情

相关推荐

【文章阅读+代码复现】Point-GNN

Brief 在3D点云语义分割方法中,GNN已经做了很多可用的方案,但是在目标检测上依旧是采用比较传统的CNN和稀疏卷积的组合,这一篇文章是研究了图卷积在3D检测的中的用法。来自卡内基梅隆大学。已经被CVPR2020接收. 这里是 paper 这里是 code Abstruct 一个采用GNN设计的3D目标检测框架 过程是先将点云场景编码成图结构,随后设计了一个叫point-GNN的网络结构,在...

有所为,有所成长 1万+

微服务架构带来的分布式单体

sdsd

明阳 475

无需UMAT:基于Abaqus内置模型实现形状记忆聚合物结构的热-力耦合仿真

本文详细介绍了如何利用Abaqus内置模型实现形状记忆聚合物(SMP)的热-力耦合仿真,无需编写复杂的UMAT子程序。通过广义Maxwell模型和Neo-Hookean模型的组合应用,结合完整的热-力耦合分析流程,帮助工程师高效模拟SMP的形状记忆行为。文章还提供了工程应用案例和常见问题解决方案,为相关领域的研究和设计提供实用指导。

weixin_34005090的博客 117

分布式技术之分布式单体调度架构

分布式系统中的单体调度是指,一个集群中只有一个节点运行调度进程,该节点对集群中的其他节点具有访问权限,可以搜集其他节点的资源信息、节点状态等进行统一管理,同时根据用户下发的任务对资源的需求,在调度器中进行任务与资源匹配,然后根据匹配结果将任务指派给其他节点。单体调度器拥有全局资源视图和全局任务,可以很容易地实现对任务的约束并实施全局性的调度策略。目前很多集群管理系统采用了单体调度设计,比如Google Borg、Kubernetes 等。如下图所示,图中展示了一个典型的单体调度框架。

Carroll的博客 1405

西门子精致面板TP1200 历史数据(历史数据、审计追踪) 移存到网络路径

TP1200 审计追踪

zhang080602的博客 5770

PLC与变频器联动控制:从开关量、模拟量到通讯的接线与编程实战

在工业自动化系统中,电机调速控制是核心需求之一,其关键在于实现可编程逻辑控制器(PLC)与变频器之间的可靠联动。其基本原理是通过PLC输出控制信号,由变频器接收并驱动电机按设定速度运行。这项技术的核心价值在于实现电机的软启停、精确调速与节能控制,广泛应用于风机、水泵、传送带及精密张力控制等场景。其中,开关量控制以其接线简单、抗干扰能力强的特点,成为基础且可靠的方案;而模拟量控制则能实现无级平滑调速,满足更高精度的工艺要求。本文以西门子、三菱等主流品牌为例,深入解析了这两种主流控制方式的硬件接线、参数设置与梯

1269

单体架构,分布式,SOA,和分布式的区别和选择

单体,分布式,集群,SOA,分布式选择

2301_78485032的博客 1309

Silvaco TCAD | 从PIN到APD:高性能光电探测器的仿真设计与优化

本文详细介绍了使用Silvaco TCAD进行光电探测器仿真设计与优化的全过程,从基础的PIN结构到高性能APD的实现。通过实战案例和代码示例,展示了如何优化器件参数、实现雪崩效应以及进行高级仿真分析,帮助工程师提升光电探测器的量子效率和响应速度。

weixin_29218509的博客 427

微服务架构的陷阱:从单体到分布式单体

前面咱们聊了架构的演进过程,提到单体架构、SOA 架构、微服务架构、无服务架构。整个过程如下图: 目前无服务架构还未成熟,只能满足一些简单场景。所以大家在设计软件架构时,首选还是微服务架构。然后我们又聊了聊如何把单体架构改造为微服务架构,推荐采用绞杀模式,一步一步的实现系统微服务化。 在这个过程中,我们会碰到微服务架构的一个大坑:分布式错觉,即将分布式当成了微服务的全部(充要条件)。 原因 出现分布式单体的主要原因在于,只是用进程间的远程调用替换进程内的方法调用。 从上图可以看出,单体架构

yangjnsjbad的博客 328

1、电路分析知识全解析:从基础到实践应用

本博客全面解析电路分析知识体系,涵盖从基础的电压、电流、电阻概念到复杂的交流电路、瞬态分析和高级应用如滤波器与变压器等内容。适合电子技术专业学生和技术爱好者学习,提供详细的知识结构、学习路径、实践示例以及丰富的学习资源,包括计算机模拟工具Multisim和PSpice的使用指导。通过理论与实践结合,帮助学习者掌握电路分析的核心技能,为电子工程和电力系统等相关领域打下坚实基础。

iii12的专栏 159

NLP高频面试题(一)——Transformer的基本结构、作用和代码实现

本文详细介绍了Transformer模型的基本结构和PyTorch代码实现过程。首先解析了Transformer的核心组成部分,包括嵌入层、多头自注意力机制、位置编码、前馈神经网络、编码器和解码器等模块,并通过清晰的代码示例逐步展示了如何在PyTorch中构建完整的Transformer模型。文末提供了一个可运行的简单示例,帮助读者快速理解并实践Transformer的核心原理与实现方法。

WeLearnNLP 1026

科普篇:单体→分布式→微服务,这些年的软件架构是如何发育的

软件架构(software architecture)就是软件的基本结构。合适的架构是软件成功的最重要因素之一。大型软件公司通常有专门的架构师职位(architect),只有资深程序员才可以担任。如果一个软件开发人员,不了解软件架构的演进,会制约技术的选型和开发人员的生存、晋升空间。这里列举了目前主要的4种软件架构以及他们的优缺点,希望能够帮助软件开发人员拓展知识面。目前微服务架构在四种架构中处于主流地位,很多应用第一、第二种架构的企业也开始慢慢转向微服务架构。

qq_39093474的博客 747

YOLOv8 交通管理三大核心功能 —— 二、违章检测系统 详细解释及代码完整示例

YOLOv8交通违章检测系统

u010117029的博客 502

分布式,单体项目,微服务到底是什么意思一篇文章帮你搞懂

集群部署:将这个单体应用复制多份,部署在多台机器上,前面加负载均衡。此时每台机器上都是一个独立的进程,但每个进程都包含完整的业务模块,模块之间没有拆分。对外表现得像是一个整体。一个单体应用(包含用户和购票功能的代码打包在一起)被部署在3台机器上,每台机器运行相同的完整应用。进程视角:所有模块(用户、购票等)被打包在一起,运行在同一个进程中。这两个服务运行在不同的进程中,通过网络通信(如HTTP)协作。用户服务(负责登录、注册)独立部署在一台机器(或容器)上。单机部署:一个进程运行在一台机器上(经典单体)。

2401_88266100的博客 99

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【架构】单体、分布式、微服务与集群都指的是什么?之间什么区别?

下面就正经解释下三种结构的区别吧~ 单机结构   我想大家最最最熟悉的就是单机结构,一个系统业务量很小的时候所有的代码都放在一个项目中就好了,然后这个项目部署在一台服务器上就好了。整个项目所有的服务都由这台服务器提供。这就是单机结构。   那么,单机结构有啥缺点呢?我想缺点是显而易见的,单机的处理能力毕竟是有限的,当你的业务增长到一定程度的时候,单机的硬件资源将无法满足你的业务需求...

3244

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

什么是分布式系统?怎么区分单体系统和分布式系统

分布式系统是指由一组通过网络进行通信、为了完成共同的任务而协同工作的计算机节点(物理服务器、虚拟机、容器等)组成的系统。单体系统是指将所有功能模块(如用户管理、订单管理、支付系统等)集中于一个应用程序,共用一个代码库与数据库,系统的所有功能、逻辑和资源共享,系统启动时所有模块在同一运行环境加载处理。

weixin_48161099的博客 1679

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

从单体到集群,再到分布式、微服务架构,你真的清楚它们之间的关系吗?

在现代软件开发中,系统架构的选择直接影响着应用程序的性能、可扩展性和维护性。本文将全面解析四种主流架构模式:单体架构、集群架构、分布式架构和微服务架构,分析它们各自的特点、适用场景以及相互之间的关系。

路漫漫其修远兮,吾将上下而求索 1640

分布式软件架构——单体架构

摘自极客学院《周志明的软件架构课》

四问四不知的博客 2084

走出微服务误区:避免从单体到分布式单体

最近社区频繁出现的对微服务的各种质疑和反思的声音,甚至放弃微服务回归单体。本文从“分布式单体”问题出发,介绍通过引入非侵入式方案和引入Event/EDA 来走出微服务实践误区:从单体到微...

金融级分布式架构 1218

你以为在做的是微服务?不!你只是做了个比单体还糟糕的分布式单体!

昨晚睡觉前,顺手撸了几个群聊的聊天记录。发现一个很有意思的名词“分布式单体”,顺藤摸瓜看了一下之前的聊天记录,由于内容骂骂咧咧,我就不贴出来了。大致内容就是某公司在做微服务改造,但改的不伦...

码农code之路 222

分布式单体(Distributed Monolith)的反模式纠偏

在过去数年的微服务演进热潮中,许多团队满怀信心地将原本的单体应用(Monolith)拆分成了 30 多个微服务:每个微服务都有独立的 Git 仓库,独立打成 Docker 镜像,部署在由 Kubernetes 调度的数百个 Pod 之中。这种**“名义上是微服务,实际上在代码与数据层面紧密耦合在一起”**的怪胎架构,正是业界公认的终极架构反模式——。分布式单体极其讽刺地在大促备战的架构治理中,系统化识别分布式单体的病灶并果断纠偏,是拯救团队工程生产力的核心战役。

dicky_zhang3的博客 947

单体与分布式什么关系?

单体架构是一种将应用程序的所有功能模块(如前端、后端、数据库等)打包在一个整体中的架构。在单体架构中,所有的功能都集中在一个应用程序中,共享资源、代码库、数据库等。

weixin_46072507的博客 1175

分布式系统常见理论讲解

分布式系统是指由多个节点通过网络进行通信和协作的系统,它具有高可用性、高扩展性、高性能等优点,但也面临着一些挑战,如数据一致性、容错性、负载均衡等。为了解决这些问题,分布式系统设计出现了一些经典的理论和方法,如 CAP 理论、BASE 理论、一致性等。

架构师小吴的博客 146

架构师进阶,微服务设计与治理的 16 条常用原则

架构师在进行微服务设计和微服务治理时,可以围绕微服务生命周期的七个阶段展开。本文总结了 16 条常用原则,希望能提供一些思路和启发。

m0_61571842的博客 1279

架构系列——架构师必备基础:单体、分布式、集群与冗余的区别

目录 1. 单体 2. 分布式 3.集群 4.冗余 总结 1. 单体 是把系统部署到一台服务器上,所有的请求业务都由这台服务器处理。 优点:适合小型系统,节省资源 缺点:安全性低,一旦有突发压力,整个系统都会面临崩溃 2. 分布式 把系统的各个功能拆分成不同的小系统,主要是分散能力。 优点:资源利用率高,可以承担部分压力,降低耦合度,易于扩展 缺点:安全性低,如果其中...

前方一片光明 9032
上一篇: 这份内部800页MySQL性能优化法则笔记,好好学习,天天向上
下一篇: 软件架构图表与模式介绍
JavaMonsterr
博客等级 码龄4年 211粉丝 481原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值