理解分布式系统中的垂直拆分和水平拆分

article/2025/10/2 23:03:43

概念

水平拆分简单字面意思是:水平方向上由一个拆分为多个。垂直拆分简单字面意思是:垂直方向上由一个拆分为多个。

1,垂直拆分

垂直拆分指按照功能进行拆分,秉着“专业的人干专业的事”的原则,把一个复杂的功能拆分为多个单一、简单的功能,不同单一简单功能组合在一起,和未拆分前完成的功能是一样的。由于每个功能职责单一、简单,使得维护和变更都变得更简单、容易、安全,所以更易于产品版本的迭代,还能够快速的进行敏捷发布和上线。

2,水平拆分

水平拆分是指由于单一节点无法满足需求,需要扩展为多个节点,多个节点具有一致的功能,组成一个服务池,一个节点服务一部分请求量,所有节点共同处理大规模高并发的请求量。

 

业务系统的拆分

垂直拆分:对业务的不同进行分类,不同的业务划分到不同的应用中。这种拆分往往是根据系统的改造,将原来的功能模块按照更加细粒度的拆分成多个弱耦合的服务。例如:微服务服务拆分

水平拆分:最经典的就是将整个应用分层。数据库访问层和业务逻辑层拆分、网关层和业务逻辑层拆分等等。

 

数据库的拆分

垂直拆分: 垂直切分是指按照业务将表进行分类。第一种是将我们的一个表拆分成多个表,例如:一个订单表可以拆分为订单表、订单附属表;第二种是将我们的表按照业务拆分到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面,例如:订单数据库、账务数据库、费用数据库等

优点:

        1. 拆分后业务清晰,拆分规则明确。

        2. 系统之间整合或扩展容易。

        3. 数据维护简单。

缺点:

        1. 部分业务表无法join,只能通过接口方式解决,提高了系统复杂度。

        2. 受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高。

        3. 事务处理复杂。

 

水平拆分:相对于垂直拆分的区别是:垂直拆分是把不同的表拆到不同的数据库中,而水平拆分是把同一个表拆到不同的数据库中,分库分表。

        

优点:

        1. 不存在单库大数据,高并发的性能瓶颈。

        2. 对应用透明,应用端改造较少。     

        3. 按照合理拆分规则拆分,join操作基本避免跨库。

        4. 提高了系统的稳定性跟负载能力。

 

缺点:

        1. 拆分规则难以抽象。

        2. 分片事务一致性难以解决。

        3. 数据多次扩展难度跟维护量极大。

        4. 跨库join性能较差。


http://chatgpt.dhexx.cn/article/yZTNsujB.shtml

相关文章

垂直拆分和水平拆分

概念介绍 垂直拆分   垂直拆分就是要把表按模块划分到不同数据库表中(当然原则还是不破坏第三范式),这种拆分在大型网站的演变过程中是很常见的。当一个网站还在很小的时候,只有小量的人来开发和维护,各模块和表都在…

软件架构设计之系统耦合性拆分

软件架构设计之系统模块的拆分 基本概念功能模块循环依赖问题 模块拆分原则高内聚性低耦合性 模块拆分方式模块拆分示例业务需求业务分析项目原始代码需求重构项目代码重构 总结 基本概念 功能模块拆分: 全面了解业务需求后,以寻找大量内聚性调用确定模块边界为目的,以寻求应用…

浅谈系统拆分

今晚好冷啊,回去的路上,我突然想到一件关于系统拆分的事情。举的例子很极端,仅供参考,不一定有实际的意义 我感觉拆分系统,和拆分代码,本质上是一样的。小到一个方法,大到几个系统,都…

分布式AKF拆分原则

1. 前言 当我们需要分布式系统提供更强的性能时,该怎样扩展系统呢?什么时候该加机器?什么时候该重构代码?扩容时,究竟该选择哈希算法还是最小连接数算法,才能有效提升性能? 在面对 Scalabilit…

记一次业务系统拆分的数据迁移及系统切换事项

一.迁移背景 老系统使用商业化软件,同时包含模块较多,架构无法支撑,维护成本高等考虑,需要根据业务模块拆分多个系统,新系统支持水平扩缩容 ,rcp框架等,新系统基本上包含常用的技术栈&#xff…

拆分盘系统开发

转载于:https://blog.51cto.com/12916096/1925453

微服务拆分之AKF原则

AKF是指可拓展模型,有3个坐标轴,分别是x,y,z 为了更好的诠释AKF原则,下面假定有一个系统 基于x轴拓展: 这种方式只能拓展无状态服务,是通过复制系统应用到其他服务器上,再通过给集群…

拆分系统拆分盘盛出不穷,互助系统的延续走出新的路子,农场果园直销系统返利系统开始火了!

在互联网时代,互助盘已经开始落伍了,时代是在进步,现在出现了新的营销模式拆分盘系统模式。 而且非常受大家欢迎,那么什么是拆分盘系统呢? 打个比方,如果发行100分财富,你购买其中的一份财富。 …

分布式架构之系统拆分

系统拆分是单体程序向分布式系统演变的关键一步,也是很重要的一步,拆分的好坏直接关系到未来系统的扩展性、可维护性和可伸缩性等,拆分工作不难理解,但是如何正确拆分、有什么样的方法和原则能帮助我们拆分得到一个我们理想中的系…

水平拆分

水平拆分 概述水平分库示例水平拆分的优点水平拆分的缺点分片原则 概述 水平拆分指的是通过某种策略将数据分片存储,包含库内分表和分库两种,每片数据会分散到不同的MySQL表或库,达到分布式的效果,能够支持非常大的数据量。前面的…

微服务拆分策略

拆分策略可以按功能和非功能维度进行考虑,功能维度主要是划分清楚业务的边界,非功能维度主要考虑六点包括扩展性、复用性、高性能、高可用、安全性、异构性。接下来详细介绍下。 1、功能维度 功能维度主要是划分清楚业务边界,采用的主要设计…

微服务拆分

如何定义一个微服务架构?通常情况下,定义应用程序架构分三步。但是,世界上并没有一个机械化的流程可以遵守,然后指望这个流程输出一个合理的架构。这里只能介绍一个笼统的方法,现实世界中,这是一个不断迭代…

每日一题:为什么要进行系统拆分?

原文来自 GitHub 开源社区 Doocs,欢迎 Star 此项目,如果你有独到的见解,同样可以参与贡献此项目。 面试题 为什么要进行系统拆分?如何进行系统拆分?拆分后不用 dubbo 可以吗? 面试官心理分析 从这个问题开始…

个人对系统拆分的理解

在本人现在的公司和本人工作过的上一家公司,本人有幸参与并实施了公司业务系统的架构拆分,现将之前的工作总结下。 1,为什么要进行系统拆分 首先我们需要想想,到底什么样的系统需要进行拆分?并不是所有的系统都需要进…

登录+注册界面的实现(代码)

先看效果图&#xff01; 话不多说&#xff0c;直接上代码&#xff01; //布局文件&#xff1a;activity_login.xml <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android&qu…

简单WEB登录页面代码实现

longin.html&#xff1a;登录页面&#xff0c;此处action引用**/**类型的地址&#xff0c;JSP可以用${ pageContext.request.contextPath }/LS <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd&qu…

编写简单的登陆页面

1.简单登录界面&#xff08;自己设置css样式&#xff09; 代码如下 <form id"loginForm" action"#" method"post" novalidate"novalidate"><div class"login_box"><div class"login_box_left"&g…

实现网页登录代码

python 一、前言 本文通过selenium工具实现工作所用网站的自动登录&#xff0c;下图为网站登录界面。 1、运行环境 操作系统&#xff1a;Windows10 python版本&#xff1a;python3.7 2、需要的python第三方库 1、selenium 安装&#xff1a; pip install selenium selen…

【html】【一个简单的用户登录页面代码】

结果 代码 <!DOCTYPE html> <html><head><title>用户登录.html</title><meta http-equiv"keywords" content"keyword1,keyword2,keyword3"><meta http-equiv"description" content"this is my pag…

html 【一个简单的用户登录页面代码】

效果图 <!DOCTYPE html> <html><head><title>用户登录.html</title><meta http-equiv"keywords" content"keyword1,keyword2,keyword3"><meta http-equiv"description" content"this is my page&…