当前位置:首页 > 科技  > 软件

系统设计目标:如何让系统易于扩展?

来源: 责编: 时间:2023-10-06 19:20:14 199观看
导读从架构设计上来说,高可扩展性是一个设计的指标,它表示可以通过增加机器的方式来线性提高系统的处理能力,从而承担更高的流量和并发。你可能会问:"在架构设计之初,为什么不预先考虑好使用多少台机器,支持现有的并发呢?" 答案

从架构设计上来说,高可扩展性是一个设计的指标,它表示可以通过增加机器的方式来线性提高系统的处理能力,从而承担更高的流量和并发。Ywr28资讯网——每日最新资讯28at.com

你可能会问:"在架构设计之初,为什么不预先考虑好使用多少台机器,支持现有的并发呢?" 答案是峰值的流量不可控。Ywr28资讯网——每日最新资讯28at.com

通常情况下,在业务平稳期,我们会预留30%至50%的冗余资源,以处理运营活动或推广可能引发的峰值流量。然而,当突发事件发生时,流量可能会瞬间增加到2至3倍甚至更高的水平。以微博为例,这种情况是很常见的。Ywr28资讯网——每日最新资讯28at.com

当出现鹿晗和关晓彤互相确认恋情等突发事件时,微博的流量会迅速增加,导致信息流无法及时刷新。在这种情况下,我们需要迅速应对流量激增,最快的方法是增加服务器。然而,需要确保增加了三倍的服务器后,系统能够支持三倍的流量。有人可能会觉得这很明显,但实际上,这个过程中存在一些挑战。让我们看看这些挑战是什么。Ywr28资讯网——每日最新资讯28at.com

为什么提升扩展性会很复杂

增加处理核心是提高系统并行处理能力的一种方法,但它并不总是有效的。当任务并行数增加时,系统可能因为资源争用而性能下降,达到一个拐点。这不仅适用于单机系统,也适用于由多台机器组成的集群系统。集群系统中,不同的层次可能存在一些限制系统横向扩展的“瓶颈点”。Ywr28资讯网——每日最新资讯28at.com

让我通过一个例子来解释这个概念。假设系统的每秒请求量是1000次,与数据库的请求量相同。如果流量增加了10倍,系统可以通过扩容来满足需求,但数据库可能成为瓶颈。Ywr28资讯网——每日最新资讯28at.com

再举一个例子,单台服务器的网络带宽是50Mbps,如果扩展到30台服务器,前端负载均衡的带宽将超过千兆带宽的限制,也成为瓶颈。那么,系统中有哪些服务可能会成为限制系统扩展的关键因素呢?无状态的服务和组件更容易扩展,而像MySQL这样的有状态存储服务则难以扩展。Ywr28资讯网——每日最新资讯28at.com

这是因为在向存储集群中添加或删除服务器时,涉及大量数据迁移,而传统的关系型数据库通常不支持这种操作。这是提高系统扩展性复杂性的主要原因之一。此外,从示例中可以看出,我们需要从整体架构的角度考虑系统的扩展性,而不仅仅是业务服务器的角度。因此,数据库、缓存、第三方依赖、负载均衡、网络带宽等都是需要考虑的因素。我们需要了解系统达到一定并发水平后,哪些因素将成为瓶颈,然后有针对性地扩展系统。Ywr28资讯网——每日最新资讯28at.com

针对这些复杂的扩展性问题,我提炼了一些系统设计思路。Ywr28资讯网——每日最新资讯28at.com

高可扩展性的设计思路

拆分是提高系统扩展性的关键策略,它将复杂的系统分解成独立的、具有单一职责的模块。与处理整个大系统相比,考虑如何扩展每个小模块显然更加简单。我们的方法是将复杂的问题分解为简单的部分。Ywr28资讯网——每日最新资讯28at.com

在不同类型的模块拆分方面,我们需要遵循不同的原则。举个简单的例子,如果你要设计一个社区,可能会有以下5个模块:用户、关系、内容、评论/赞、搜索。通常,这些模块都会使用最简单的三层部署架构,其中负载均衡用于请求分发,应用服务器用于处理业务逻辑,数据库用于数据存储。然而,问题是所有这些模块的业务代码都混合在一起,数据也存储在同一个数据库中。Ywr28资讯网——每日最新资讯28at.com

Ywr28资讯网——每日最新资讯28at.com

图片图片Ywr28资讯网——每日最新资讯28at.com

1. 存储层的扩展性

不同的业务模块之间的数据量和并发访问量可能差异很大。以一个成熟的社区系统为例,关系模块的数据量可能远大于用户数据,但用户数据的访问量却更高。因此,如果存储容量成为瓶颈,我们可以选择仅拆分关系模块的数据,而不必拆分用户模块的数据。这种存储拆分是基于业务维度的,将系统拆分为用户库、内容库、评论库、点赞库和关系库等,从而隔离了故障。如果其中一个库出现问题,不会影响其他数据库的正常运行。Ywr28资讯网——每日最新资讯28at.com

拆分之后,这个简单的社区系统就有了用户库、内容库、评论库、点赞库和关系库。这么做还能隔离故障,某一个库“挂了”不会影响到其它的数据库。Ywr28资讯网——每日最新资讯28at.com

图片图片Ywr28资讯网——每日最新资讯28at.com

按照业务拆分虽然在一定程度上提升了系统的扩展性,但随着系统运行时间的增长,单一的业务数据库可能会面临容量和并发请求量超过单机限制的问题。在这种情况下,我们需要考虑对数据库进行第二次拆分。Ywr28资讯网——每日最新资讯28at.com

这次的拆分是基于数据特征进行水平拆分的。例如,我们可以向用户库添加两个节点,然后使用特定的算法将用户数据分布到这三个库中。Ywr28资讯网——每日最新资讯28at.com

水平拆分后,数据库就可以突破单机的限制。但需要注意的是,不应随意增加节点,因为节点的增加涉及到数据的手动迁移,会增加成本。因此,从长远考虑,最好一次性增加足够数量的节点,以避免频繁扩容。Ywr28资讯网——每日最新资讯28at.com

此外,在数据库按照业务和数据维度进行拆分后,应尽量避免使用事务。因为当一个事务涉及同时更新不同的数据库时,需要使用二阶段提交来协调,这会随着资源扩展而导致协调成本不断增加,最终可能无法承受。接下来,我们将讨论业务层如何实现易于扩展。Ywr28资讯网——每日最新资讯28at.com

2. 业务层的扩展性

我们一般会从三个维度考虑业务层的拆分方案,它们分别是:业务维度,重要性维度和请求来源维度。Ywr28资讯网——每日最新资讯28at.com

首先,我们需要把相同业务的服务拆分成单独的业务池,比方说上面的社区系统中,我们可以按照业务的维度拆分成用户池、内容池、关系池、评论池、点赞池和搜索池。Ywr28资讯网——每日最新资讯28at.com

每个业务依赖独自的数据库资源,不会依赖其它业务的数据库资源。这样当某一个业务的接口成为瓶颈时,我们只需要扩展业务的池子,以及确认上下游的依赖方就可以了,这样就大大减少了扩容的复杂度。Ywr28资讯网——每日最新资讯28at.com

图片图片Ywr28资讯网——每日最新资讯28at.com

此外,我们还可以根据业务接口的重要性,将业务划分为核心池和非核心池。以关系池为例,关注和取消关注接口可能相对重要,因此它们可以放入核心池。而拉黑和取消拉黑等操作可能不那么重要,可以放入非核心池。Ywr28资讯网——每日最新资讯28at.com

这种方法允许我们首先确保核心池的性能。当整体流量增加时,我们可以首先扩容核心池,并对一些非核心池的接口进行降级,以确保整体系统的稳定性。Ywr28资讯网——每日最新资讯28at.com

图片图片Ywr28资讯网——每日最新资讯28at.com

最后,你还可以根据接入客户端类型的不同做业务池的拆分。比如说,服务于客户端接口的业务可以定义为外网池,服务于小程序或者 HTML5 页面的业务可以定义为 H5 池,服务于内部其它部门的业务可以定义为内网池,等等。Ywr28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-12142-0.html系统设计目标:如何让系统易于扩展?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 插入排序:简单而有效的排序方法

下一篇: 让你遥遥领先的七个编程习惯

标签:
  • 热门焦点
  • MIX Fold3包装盒泄露 新机本月登场

    MIX Fold3包装盒泄露 新机本月登场

    小米的全新折叠屏旗舰MIX Fold3将于本月发布,近日该机的真机包装盒在网上泄露。从图上来看,新的MIX Fold3包装盒在外观设计方面延续了之前的方案,变化不大,这也是目前小米旗舰
  • 小米官宣:2023年上半年出货量中国第一!

    小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • 2023 年的 Node.js 生态系统

    2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 只需五步,使用start.spring.io快速入门Spring编程

    只需五步,使用start.spring.io快速入门Spring编程

    步骤1打开https://start.spring.io/,按照屏幕截图中的内容创建项目,添加 Spring Web 依赖项,并单击“生成”按钮下载 .zip 文件,为下一步做准备。请在进入步骤2之前进行解压。图
  • 自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中扮演着重要角色,它提升了DevOps的效能。通过自动化工具和方法,DevOps团队可以实现以下目标:消除手动和重复性任务。简化流程。在整个软件开发生命周期中实现更
  • 这款新兴工具平台,让你的电脑效率翻倍

    这款新兴工具平台,让你的电脑效率翻倍

    随着信息技术的发展,我们获取信息的渠道越来越多,但是处理信息的效率却成为一个瓶颈。于是各种工具应运而生,都在争相解决我们的工作效率问题。今天我要给大家介绍一款效率
  • 重估百度丨大模型,能撑起百度的“今天”吗?

    重估百度丨大模型,能撑起百度的“今天”吗?

    自象限原创 作者|程心 罗辑2023年之前,对于自己的“今天”,百度也很迷茫。“新业务到 2022 年底还是 0,希望 2023 年出来一个 1。”这是2022年底,李彦宏
  • iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    经过了一段时间的密集爆料,昨日iQOO官方如期对外宣布:将于5月23日推出全新的iQOO Neo8系列新品,官方称这是一款拥有旗舰级性能调校的作品。随着发布时
  • 微软发布Windows 11新版 引入全新任务栏状态

    微软发布Windows 11新版 引入全新任务栏状态

    近日,微软发布了Windows 11新版,而Build 22563更新主要引入了几周前曝光的平板模式任务栏等,系统更流畅了。更新中,Windows 11加入了专门针对平板优化的任务栏
Top