系统设计的垂直拆分和分平拆分

本文介绍了系统设计中垂直拆分和水平拆分的概念和实践。垂直扩展将系统按业务拆分为独立子系统,降低耦合度,提高可扩展性。水平扩展则是通过创建相同业务的服务集群来分摊压力。数据库扩展方面,垂直拆分按业务分库分表,减轻维护难度,但限制了表间JOIN操作;水平拆分如ID取模、按日期或范围分表,有效缓解大数据量带来的性能瓶颈,但也面临数据迁移和扩展性挑战。两者目标都是提升系统效率和降低维护成本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统设计的垂直拆分和分平拆分

second60 20180420

1背景

当一个系统/网站,刚开始的时候,所有的业务模块和数据都是放在一起的,只有小量的人来开发和维护;

但当系统/网站不断丰富功能和业务的时候,系统将会变的越来越庞大,也会逐渐拆分成各个子系统来支撑,这此就需要把系统拆分,把原来强耦合的系统,拆分成弱耦合的多个子系统,数据表也因为数据量大,需要按业务垂直拆分和按大小来水平拆分。

 

2 系统的拆分

对于系统来说,一般都是系统初始设计时,就考虑好整个系统的架框,分好框架层次,和各个服务,考虑框架的通用性,可配置,可扩展,可兼容等特点。

虽然前期设计好系统框架,但难免随时业务和功能的扩张,系统变的比较庞大,需要对系统进行进一步的细分,主要有两个方向,即垂直扩展和水平扩展。

 

2.1 系统的垂直扩展

对于系统的垂直扩展,即把系统按业务分级,把可独立,或可划分的业务独立出子系统。

 

2.1.1 1

一个简单交易系统,会按业务分,独立出账户类服务,资金类服务,交易类服务。

优点:

1. 耦合度由强耦合变低耦合

2. 拆分后,各子系统接口通用,可服务于其他子系统

3. 每个子系统独立,子系统出问题,只会影响部份涉及此子系统的业务,不会影响全部业务


2.1.2 2

又如果,一个游戏后台业务进程

 

刚开始,可能游戏后台需求简单,把所有业务都放在一个服务中,可能包括:活动类,任务类,社交类。

但后面需求扩展后,可按业务分子服务,分为:活动类服务,任务类服务,社交系统等。

 

2.2 系统的水平扩展

对于系统的水平扩展,即相同的业务,多分几个服务,但各服务其实是一样的,也就是集群。

例如:一个订单服务,每天的订单量十万,一个服务可以搞定,但当订单量达到二十万压力很大时,可以多启一个相同的服务,即相当,两个服务,每个服务处理十万的订单量。当订单量逐渐增加,服务数量也随着增长。

参考:分布式和集群

 

2.3 数据库的扩展

系统运营初期,数据量比较小,所有数据表都在一个库中;但当业务量大后,数据量大,数据表也会变的很庞大,系统数据库操作将会变的比较慢。

 

比如:前期,数据表的大小可能就只有百万的数据量,但发展起来后,数据量增长到上千万一个表。无论是查找速度,还是更新速度,都会变的比较慢。

单表数据量大将会成为性能的瓶颈。

 

2.3.1 数据库的垂直拆分

数据库的垂直拆分,就是按业务,分库分表。

把原有的一个数据库,按业务分成多个数据库,每个数据库放不同业务的表。

垂直拆分,即把不同的表拆分到不同的数据库中。

 

例如:

一个电商系统,只有一个数据库,数据库中有用户表,订单表,支付表等。垂直扩展后,把数据库分成用户信息库,订单交易库,支付数据库。

 

垂直拆分的优点:

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

2. 系统可扩展性好,可进一步细节

3. 数据库维护方便简单,相关功能的人,只需关注自已的关注的库

4. 可读性高,维护成本降低

 

缺点:

1. 之前有关联的不同库的表,不能再join, 交互通过接口方式解决,代码量增大

2. 每个子库关可能存在性能瓶颈,影响其他库,解决方法,可通过缓存解决

3. 解决不了单表数据量大的瓶颈问题

 

2.3.2 数据库的水平拆分

垂直拆分,其实就是业务的拆分,数据库拆分后,可以更加明确每个库的业务,也更方便维护,但解决不了大数据的瓶颈问题。这时就需要用到数据库的水平拆分。

 

数据库的水平拆分,简单点,就是分库分表。 把同一个表拆分到不同的数据库或数据表中。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值