【系统设计系列】 回顾可扩展性

news2024/11/16 17:46:46

系统设计系列初衷

System Design Primer: 英文文档 GitHub - donnemartin/system-design-primer: Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.

中文版: https://github.com/donnemartin/system-design-primer/blob/master/README-zh-Hans.md

初衷主要还是为了学习系统设计,但是这个中文版看起来就像机器翻译的一样,所以还是手动做一些简单的笔记,并且在难以理解的地方对照英文版,根据自己的理解在AI的帮助下进行翻译和知识扩展。

什么是系统设计

        系统设计是指在计算机系统构建和实现过程中,对计算机硬件、软件和外部设备等各个组成部分进行有计划、有目标的设计和组织。系统设计的目的是为了实现满足用户需求的高性能、可靠、易用、安全和可扩展的计算机系统。系统设计可以分为硬件设计和软件设计两个主要方面。
硬件设计主要关注计算机系统的物理实现,包括中央处理器(CPU)、内存、输入/输出设备、存储设备等关键部件的选择、组织和互连。硬件设计需要考虑性能、可靠性、功耗、成本等因素,同时确保系统的可扩展性和易维护性。
        软件设计则主要关注计算机系统的逻辑实现,包括操作系统、应用软件、编程语言、编译器等软件组件的设计和实现。软件设计需要考虑程序的可读性、可维护性、高效性、安全性等因素,同时确保软件的兼容性和易用性。
        总之,系统设计是一个涵盖硬件和软件的多方面、多层次的综合性工程,需要充分考虑用户需求、性能、可靠性、安全性、易用性等多种因素,以实现高效、可靠、易用、安全的计算机系统。

基础知识学习

首先,需要对一般性原则有一个基本的认识,知道它们是什么,怎样使用以及利弊。

回顾可扩展性(scalability)的视频讲座

(该视频为youtube视频,国内可能看不了,因此,我便文字概述) 

下面将分段介绍系统设计的基础知识,图片来源网络,侵权删~

哈佛大学可扩展性讲座

 

垂直扩展(Vertical scaling)

        垂直扩展 (Vertical scaling),也称为纵向扩展或垂直扩展,是一种扩展方法,通过增加单个服务器的资源来提高系统的性能和可扩展性。这种方法通常用于解决单个服务器的瓶颈问题,例如 CPU、内存或存储容量的限制。

        垂直扩展可以通过升级单个服务器的硬件配置来实现,例如增加 CPU 核心数量、增加内存容量、升级存储设备等。这种方法可以提高单个服务器的性能和容量,从而增加系统的吞吐量和可扩展性。

        垂直扩展的优点是可以提高单个服务器的性能和容量,从而减少服务器的数量和降低成本。此外,由于垂直扩展是在单个服务器上进行的,因此不需要进行复杂的架构调整和应用程序修改。

        然而,垂直扩展也有一些缺点。例如,增加单个服务器的资源可能会导致成本上升,并且增加过多的资源可能会导致浪费。此外,当单个服务器达到其性能极限时,垂直扩展可能无法继续提高系统的性能和可扩展性,这时就需要考虑其他扩展方法,例如水平扩展 (Horizontal scaling)。

 

水平扩展(Horizontal scaling)

        水平扩展(Horizontal scaling),又称水平扩展性,是一种通过增加多个服务器来提高系统性能和可扩展性的扩展方法。水平扩展将多个服务器从逻辑上看成一个实体,通过简单的聚类或负载平衡策略,可以有效地加快整个逻辑实体的运行速度和性能。与垂直扩展(Vertical scaling)不同,水平扩展是通过增加多个服务器来分散负载,而不是通过对单个服务器增加资源。

        水平扩展的优点包括:

        提高系统性能:通过增加多个服务器,水平扩展可以有效地提高系统的运算速度和性能,从而提高系统的吞吐量和响应能力。

        提高系统可用性:水平扩展可以通过冗余和服务器故障转移等手段提高系统的可用性,确保系统在面临硬件故障或网络故障时仍能正常运行。

        灵活性和可扩展性:水平扩展可以根据业务需求和负载情况灵活地添加或减少服务器,便于扩展和管理。

        然而,水平扩展也存在一些挑战和局限性:

        系统一致性:由于多个服务器构成了一个逻辑实体,需要保证这些服务器之间的数据一致性和同步。

        负载均衡:水平扩展需要实现负载均衡策略,确保每个服务器的负载均衡,避免某些服务器过载而其他服务器资源浪费。

        数据分区和分布式事务:在水平扩展的场景下,需要解决数据分区和分布式事务的问题,以保证数据的完整性和一致性。

        应用程序优化:水平扩展可能导致应用程序需要进行分布式设计和优化,以适应多服务器的环境。

        总之,水平扩展是一种通过增加多个服务器来提高系统性能和可扩展性的扩展方法,适用于需要提高系统性能、可用性和灵活性的场景。但同时,也需要克服一些技术挑战和局限性。

 

缓存

        缓存(Cache)是一种存储技术,它的主要目的是提高数据访问的速度和效率。通过在内存或硬盘等存储介质中临时存放经常访问的数据,以减少数据访问时间和带宽消耗。当需要使用这些数据时,可以优先从缓存中读取,而不是从原始数据源中获取,从而提高了系统的响应速度和性能。

        缓存的种类有很多,根据不同的应用场景和缓存策略,可以分为以下几类:

        CPU 缓存:位于 CPU 内部的高速缓存,用于存储和加速处理器访问的数据和指令。通常分为一级缓存(L1 Cache)和二级缓存(L2 Cache),它们的作用是在处理器访问数据时提供一个快速响应的缓存层级。

        内存缓存:位于内存中的缓存,通常用于存储操作系统、应用程序和用户数据。通过内存缓存,可以减少对硬盘的访问次数,提高数据读取速度。

        硬盘缓存:位于硬盘驱动器上的缓存,也称为磁盘缓存。主要用于存储从磁盘读取的数据,提高对磁盘数据的访问速度。

        网络缓存:主要应用于网络领域,例如 CDN(内容分发网络)中的节点会缓存热门内容,以提高用户访问速度。

        数据库缓存:用于存储数据库中的热点数据,提高查询效率。如 Hibernate 和 MyBatis 等数据库访问框架提供了不同级别的缓存策略。

        前端缓存:主要应用于 Web 前端领域,通过浏览器或代理服务器缓存常用的资源(如 CSS、JS、图片等),以提高网站加载速度。

        分布式缓存:用于分布式系统中,例如缓存服务器。它可以将多个节点上的缓存合并成一个统一的缓存层,提高数据访问速度和系统性能。

        综上所述,缓存是一种提高数据访问速度和系统性能的技术手段,广泛应用于计算机、网络、数据库和分布式系统等领域。通过合理配置和使用缓存,可以有效降低系统延迟,提高用户体验。

负载均衡

        负载均衡(Load Balancing)是一种计算机网络技术,用于在多个服务器或设备之间分配负载,提高系统的可靠性、可用性和性能。负载均衡可以有效解决单个服务器或设备性能瓶颈的问题,提高整体系统的处理能力,同时避免资源浪费。

        负载均衡的主要目标是在多个服务器或设备之间分配负载,确保每个服务器或设备都能在其最大负荷范围内运行。负载均衡可以应用于不同层次,包括网络层、应用层和数据库层。根据不同的应用场景,负载均衡可以采用不同的技术和策略,如轮询、最小连接数、源 IP 哈希等。

        负载均衡的优点包括:

        提高系统性能:通过将负载分配给多个服务器或设备,负载均衡可以提高整个系统的处理能力,从而提高系统性能。

        提高系统可用性:当某个服务器或设备发生故障时,负载均衡可以自动将其从负载分配中移除,确保其他服务器或设备继续提供服务,从而提高系统的可用性。

        提高系统可扩展性:通过增加服务器或设备,可以扩大系统的负载能力,从而提高系统的可扩展性。

        负载均衡可以避免单点故障,提高系统的稳定性。

        负载均衡的实现方式有很多,常见的负载均衡技术包括:

        DNS 轮询:通过配置 DNS 服务器,将域名解析到多个服务器的 IP 地址,当客户端请求时,DNS 服务器会轮询返回不同的 IP 地址。

        反向代理负载均衡:如 Nginx、HAProxy 等反向代理服务器可以实现负载均衡,将客户端请求分发到后端服务器。

        软件负载均衡:如 LVS(Linux Virtual Server)等软件负载均衡解决方案,可以在操作系统层面实现负载均衡。

        硬件负载均衡:如 F5、Citrix NetScaler 等硬件负载均衡设备,可以通过专用硬件实现负载均衡。

        云服务提供商的负载均衡服务:如 AWS ELB(Elastic Load Balancer)、阿里云负载均衡等,云服务提供商提供的负载均衡服务可以帮助用户在云环境中实现负载均衡。

        总之,负载均衡是一种提高系统性能、可用性和扩展性的关键技术,在计算机网络领域得到了广泛的应用。通过合理配置和使用负载均衡,可以有效提高系统性能,保证用户享受到更好的服务质量。

数据库复制

        数据库复制是指将一个数据库的数据同步到另一个数据库的过程,从而实现数据在不同数据库之间的一致性和同步更新。数据库复制技术在许多场景下具有重要意义,例如数据备份、数据同步、读写分离等。通过数据库复制,可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性。

        数据库复制的过程主要包括以下几个步骤:

        创建订阅:在源数据库中创建一个订阅,用于监听源数据库中的数据变化。当源数据库中的数据发生变化时,订阅会接收到这些变化的信息。

        数据变化捕获:订阅会捕获源数据库中的数据变化,如插入、更新和删除操作。这些数据变化会被记录在订阅中,等待同步到目标数据库。

        数据同步:通过将捕获到的数据变化从源数据库同步到目标数据库,实现数据在不同数据库之间的同步更新。数据同步可以通过多种方式进行,如批量同步、实时同步等。

        订阅管理:订阅可以分为多种类型,如事务订阅、合并订阅等。订阅管理用于管理和配置订阅,以满足不同场景下的需求。

        数据库复制技术可以应用于不同数据库系统之间,如 SQL Server、MySQL、Oracle 等。此外,还有许多开源的数据库复制软件,如 MySQL 的主从复制、SQL Server 的分布式事务等,可以帮助用户实现数据库复制功能。

        总之,数据库复制是一种重要的数据管理技术,可以确保数据在不同数据库之间的一致性和同步更新。通过使用数据库复制技术,企业可以提高数据的可用性、安全性和性能,从而为业务发展提供有力支持。

数据库分区

        数据库分区是一种物理数据库设计技术,它将一个大型数据库划分为多个较小的、独立的物理存储空间,以提高数据库的可管理性、性能和可用性。分区技术在许多大数据和数仓场景中得到广泛应用。

        数据库分区的主要目的是在保持数据完整性和一致性的前提下,将数据分散到多个物理存储设备上,从而提高查询速度和响应时间。分区可以有效地解决单个服务器或设备性能瓶颈的问题,提高整体系统的处理能力,同时避免资源浪费。

        常见的数据库分区方式包括:

        分区:将逻辑上的表划分为多个物理存储空间,这样查询数据时,不需要每次都扫描整个表。分区表由多个相关的底层表实现,这些底层表也是由句柄对象实现。

        分表:将一个大表按照一定的规则分解成多个小表,这些小表可以分布在同一块磁盘上,也可以分布在不同的机器上。应用程序在读写数据时,根据事先定义好的规则获取对应的子表名,然后操作相应的子表。

        数据库分区的优点包括:

        提高查询性能:通过将数据分散到多个物理存储设备上,可以显著提高查询速度和响应时间。

        提高系统可扩展性:通过增加物理存储设备,可以扩大数据库的存储容量,从而提高系统的可扩展性。

        负载均衡:将数据分散到多个物理设备上,可以实现负载均衡,提高整体系统的性能和可用性。

        便于管理:分区技术可以将大型数据库划分为多个较小的、独立的物理存储空间,从而提高数据库的可管理性。

        需要注意的是,数据库分区并非适用于所有场景。在实际应用中,需要根据具体的业务需求和数据特点来判断是否使用分区技术。此外,分区技术也有一些局限性,例如分区之间的数据迁移和同步等问题需要特别注意。

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

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

相关文章

猫头虎博主赠书二期:《Go黑帽子 渗透测试编程之道(安全技术经典译丛) 》

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

volatile+SIGCHLD信号+可重入函数(了解)

索引 volatile1.gcc -O含义及其作用2.证明其内存可见性 深入理解SIGCHLD信号SIGCHLD总结 可重入函数 volatile 保存内存的可见性,告知编译器,该关键字修饰的变量不允许被优化,对该变量的任何操作都必须在内存中操作。 1.gcc -O含义及其作用…

JVM垃圾回收机制和常用算法(简洁版)

垃圾收集 (Garbage Collection,GC) 垃圾收集主要是针对堆和方法区进行。程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后就会消失,因此不需要对这三个区域进行垃圾回收。 判断一个对象是…

QTday5作业

Tcp服务器 源文件 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//给服务器指针实例化对象server new QTcpServer(this); //此时就创建了一个服务器}Widg…

Android数据结构和算法总结-字符串相关高频面试题算法

前言 周末闲来无事,在七月在线上看了看字符串相关算法的讲解视频,收货颇丰,跟着视频讲解简单做了一下笔记,方便以后翻阅复习同时也很乐意分享给大家。什么字符串在算法中有多重要之类的大路边上的客套话就不多说了,直…

linux删除了业务进程正在使用的文件,又不能停止进程,如何释放文件占用的磁盘空间

一台linux分区使用率告警,同事为了清理空间,通过du -sh *查到应用的日志文件占用很高,他直接rm删除了日志文件。但df -h看分区空间并没有释放。 执行lsof | grep delete可以看到刚刚删除的文件因为被正在运行的进程调用所以并没有释放磁盘空间…

优维产品最佳实践:如何设计流水线?

前言:我们上期介绍了什么是CI以及CI的重要性,本期目标就是学习如何设计流水线,流水线是一种用于自动化软件开发和部署的工具链,它可以将软件开发过程中的各个步骤组织成一个连续的流程,从而提高开发效率和软件质量。在…

安装虚拟机+安装/删除镜像

安装虚拟机 注意,官网可能无法登录,导致无法从官网下载,就自己去网上搜靠谱的下载,我用的16.2.3 删除镜像 Vm虚拟机怎么删除已经创建的系统?Vm虚拟机创建好之后iso删除方法 - 系统之家 (xitongzhijia.net) 安装镜像…

Python中内建模块和标准库的工作原理? - 易智编译EaseEditing

Python中的内建模块和标准库是Python编程语言的一部分,它们提供了大量的功能和工具,可用于各种任务和应用程序。这些模块和库通常是由Python官方维护的,因此在任何标准Python安装中都是可用的。 以下是内建模块和标准库的工作原理的概述&…

数据结构——单调队列

单调队列 单调队列的概念和操作过程 概念: 单调队列和单调栈在操作上有相似之处,但因为单调队列是队列,所以多了一项特殊操作,即头部的元素可以出队,相当于滑动窗口向后滑动。这头部的出队操作就相当于淘汰&#xff0c…

需求管理做不好,项目成功难保障

你是否曾感觉客户的要求总是突然冒出来?或是觉得自己跟不上订单的节奏?不了解产品的需求会让你手忙脚乱,如果没有足够的资源来应对,甚至会损害你的业务。 本文将向你介绍需求管理的流程,以及如何在业务中使用它。 项目…

【洛谷算法题】P5703-苹果采购【入门1顺序结构】

👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5703-苹果采购【入门1顺序结构】🌏题目描述🌏输入格式&a…

BCSP-玄子Share-Java框基础_反射

一、反射 1.1 反射介绍 Java反射:在编译时不确定哪个类被加载,而在程序运行时才加载、探知、使用 1.1.1 Java 程序的运行过程 1.1.2 反射及其作用 反射是指能够在运行时,观察并修改自己运行时(Runtime)行为的特性 Java 反射机制主要提供了…

verilog语法之case casez casex

在rtl仿真中,有四种状态,分别是0、1、x(unknown values)和z(high-impedance values)。 case 结构体中:0,1,X与Z是四种不同的状态,case条件比较时会检测比较双…

2023年03月 C/C++(七级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C编程(1~8级)全部真题・点这里 第1题:走出迷宫 当你站在一个迷宫里的时候,往往会被错综复杂的道路弄得失去方向感,如果你能得到迷宫地图,事情就会变得非常简单。 假设你已经得到了一个n*m的迷宫的图纸&a…

BCSP-玄子Share-Java框基础_工厂模式/代理模式

三、设计模式 3.1 设计模式简介 软件设计中的三十六计是人们在长期的软件开发中的经验总结是对某些特定问题的经过实践检验的特定解决方法被广泛运用在 Java 框架技术中 3.1.1 设计模式的优点 设计模式是可复用的面向对象软件的基础可以更加简单方便地复用成功的设计和体系…

【管理运筹学】第 7 章 | 图与网络分析(2,最小支撑树问题)

文章目录 引言二、最小支撑树问题2.1 树的定义及其基本性质2.2 图的支撑树2.3 最小支撑树的定义及有关定理2.4 最小支撑树算法2.4.1 避圈法(KRUSKAL算法)2.4.2 反圈法(PRIM算法)2.4.3 破圈法 写在最后 引言 承接前文,…

宠物电商Chewy第二季度销售额28亿美元,同比增长14.3%

美国宠物电商Chewy公布2023年第二季度财报。报告显示,其Q2季度销售额同比增长14.3%至28亿美元,超出市场预期。 以下为Chewy期内业绩概要: 1.毛利率28.3%,同比增长20个基点 2.净利润有所收窄,同比下降15.2%至1890万美…

QT连接数据库

目录 数据库 数据库基本概念 常用的数据库 SQLite3基础 SQLite特性: QT连接数据库 1.1 QT将数据库分为三个层次 1.2 实现数据库操作的相关方法 sql语句(常用) 1)创建表格 2)删除表格 3)插入记录 …

应急物资管理系统DW-S300|助力应急物资保障体系建设

国务院新闻办公室于2023年7月25日举行国务院政策例行吹风会,介绍防汛抗旱工作情况,并答记者问。应急管理部副部长、水利部副部长王道席介绍,要推进应急物资保障体系建设。去年,应急管理部会同国家发展改革委、财政部、国家粮食和物…