系统设计蓝图 / 备忘单

news2024/11/26 2:21:58

开发一个强大、可扩展和高效的系统可能会令人望而却步。然而,了解关键概念和组件可以使这个过程更可管理。在本博客文章中,我们将探讨系统设计的关键概念和组件,如DNS、负载均衡、API网关等,以及一个简明的备忘单,可以帮助开发人员设计不同复杂性的系统。

系统设计蓝图 / 备忘单

这是一份全面的视觉指南,为开发人员提供了一个快速、简单的参考,涵盖了系统设计中的关键概念和最佳实践。这个便捷的备忘单或蓝图涵盖了诸如DNS、负载均衡、API网关、视频和图像处理、缓存、数据库、唯一ID生成、支付和推荐服务等标准组件,以及聊天和流媒体协议。有了这个宝贵的资源,你将能够应对设计和实施可扩展、高效和可靠系统的挑战。

2acb2cf17d3c8b577035e921a870c02c.png
1*QSFihi7zXbR5X915MDmKyQ.png

第一部分:系统设计原则

1.1:模块化

将系统划分为更小、更可管理的模块有助于减少复杂性、提高可维护性和增加可重用性。

1.2:抽象化

隐藏实现细节,只显示必要的特性有助于简化复杂的系统并促进模块化。

1.3:分层

将系统组织成不同的层次,每个层次提供特定的功能集,促进关注点分离,增强可维护性。

1.4:可扩展性

通过添加更多资源(横向扩展)或优化系统容量(纵向扩展)来设计系统以处理增加的负载。

1.5:性能

优化系统的响应时间、吞吐量和资源利用率对于成功的设计至关重要。

1.6:安全性

通过实施适当的安全措施和实践,确保系统的机密性、完整性和可用性。

1.7:容错和弹性

设计系统以经受故障,并从错误中恢复,确保可靠性和可用性。

第二部分:系统设计的关键组件

2.1:DNS(域名系统)

DNS是一个分层和去中心化的命名系统,用于将连接到Internet或私有网络的计算机、服务或其他资源的人类可读域名(例如www.example.com)转换为IP地址,使用户能够更有效地访问网站和服务。

f46542ad2312d8b5991a81504eb191a3.png

2.2:负载均衡

负载均衡是指将网络流量分布到多个服务器上,以确保没有单个服务器被过载。这种方法可以提高系统的可用性、可靠性和性能。常见的负载均衡算法包括循环调度、最小连接数和IP哈希

2.3:API网关

API网关是在分布式系统中充当客户端和微服务之间中介的服务器。它管理和路由请求,强制执行安全策略,并可以提供附加功能,如缓存、日志记录和监控。

2.4:内容分发网络(CDN)

CDN是一个分布在各个位置的服务器网络,旨在以较低的延迟和更高的带宽向用户提供内容。CDN在靠近终端用户的边缘服务器上缓存内容,提高系统的性能,并减少对源服务器的负载

2.5:消息队列

消息队列通过临时将消息存储在队列中促进分布式系统组件之间的通信。它们支持异步处理,并帮助解耦组件,提高系统的可扩展性和容错性。

2.6:通信协议

系统设计中使用不同的通信协议,如HTTP/HTTPS、WebSocket和gRPC。这些协议具有各自的优点和权衡,选择取决于延迟、安全性和数据传输要求等因素。

2.7:缓存

缓存是一种临时技术,用于存

储数据的副本,以便在将来的请求中更快地检索。它有助于减少延迟、服务器负载和带宽消耗。常见的缓存机制包括内存缓存、分布式缓存和浏览器缓存

2.8:数据库

选择适合系统的数据库取决于数据结构、可扩展性、一致性和延迟。常见的数据库类型包括关系数据库(如MySQL、PostgreSQL)、NoSQL数据库(如MongoDB、Cassandra)和NewSQL数据库(如Cockroach DB、Google Spanner)。

2.9:复制技术

复制是在不同节点上维护多个数据副本以增加可靠性、可用性和容错性的过程。常见的复制技术包括同步复制、异步复制和半同步复制。

2.10:分布式唯一ID生成

在分布式系统中创建唯一标识符可能具有挑战性,但对于保持数据一致性和完整性非常重要。

第三部分:使用签名URL以块的形式上传视频和图像

在本节中,我们将探讨如何使用签名URL以块的形式上传大型视频和图像文件。这种方法可以显著提高文件上传的效率和可靠性,特别是在网络条件不理想的情况下。

3.1:什么是签名URL?

签名URL是专门设计的URL,授予对特定资源(如云存储中的对象)的临时安全访问权限。这些URL包含一个认证签名,允许用户在有限的时间内执行特定操作,例如上传或下载文件。常见的云存储提供商如Amazon S3和Google Cloud Storage支持生成签名URL。以下是签名URL的一个示例:

https://example-bucket.s3.amazonaws.com/my-file.txt?

X-Amz-Algorithm=AWS4-HMAC-SHA256&

X-Amz-Credential=AKIAIOSFODNN7EXAMPLE%2F20220407%2Fus-east-1%2Fs3%2Faws4_request&

X-Amz-Date=20220407T123456Z&

X-Amz-Expires=3600&

X-Amz-SignedHeaders=host&

X-Amz-Signature=a9c8a7d1644c7b351ef3034f4a1b4c9047e891c7203eb3a9f29d8c7a74676d88

3.2:以块的形式上传

将大型文件作为单个请求上传可能会导致超时、高内存消耗以及由于网络不稳定而增加故障风险。相反,将大型文件分成较小的块,并按顺序或并行方式上传,可以提高上传效率和可靠性。这种方法被称为“块式”或“多部分”上传。

3.3:结合签名URL和块式上传

要使用签名URL以块的形式上传视频和图像文件,请按照以下一般步骤进行操作:

1.将文件分成较小的块:在客户端上使用JavaScript将大型文件拆分成较小的块。块的大小可以根据需要进行调整,但平衡请求数量和每个块的大小以优化上传性能是重要的。2.为每个块请求签名URL:向服务器发送请求,为每个块生成一个具有适当权限和过期时间的签名URL,并将其返回给客户端。3.使用签名URL上传块:使用签名URL将每个块上传到云存储服务。根据所需的并发级别和网络条件,可以顺序或并行地进行这些上传。4.确认成功上传并重新组装:一旦所有块都成功上传,通知服务器确认上传过程的完成。然后,服务器可以重新组装块为原始文件,并执行任何必要的处理或验证。5.处理上传失败:如果任何块上传失败,可以使用新的签名URL重试上传,或者实施错误处理策略以确保平滑的用户体验。

通过使用签名URL和块式上传,开发人员可以高效、安全地处理大型视频和图像上传,提高系统的可靠性和性能。

第四部分:聊天和流媒体协议

本节将讨论各种聊天和流媒体协议,促进客户端和服务器之间的实时通信和数据流传输。了解这些协议可以帮助开发人员构建响应快、交互式的应用程序。

4.1:RTMP(实时消息传输协议)

RTMP是由Adobe Systems开发的用于在Internet上流式传输音频、视频和数据的专有协议。它通常用于视频流应用程序,提供客户端和服务器之间的低延迟通信。然而,由于其依赖Flash Player,它在近年来的流行度有所下降。

4.2:WebRTC(Web实时通信)

WebRTC是一个开源项目,可以在Web浏览器和移动应用程序中实现实时音频、视频和数据通信。它支持点对点连接,降

低延迟和服务器负载。WebRTC广泛应用于视频会议、在线游戏和其他需要实时通信的应用程序。

4.3:WebSocket

WebSocket是一种通信协议,可以在客户端和服务器之间建立双向、全双工的通信连接。由于其低延迟和高效的通信能力,WebSocket通常用于聊天、通知和实时更新等实时应用程序。

4.4:SSE(服务器推送事件)

服务器推送事件(SSE)是一种技术,使服务器能够通过HTTP连接向客户端推送更新。它设计用于服务器向客户端进行单向实时通信,适用于实时更新、新闻提要和通知等应用程序。

4.5:HTTP短轮询

短轮询涉及客户端反复向服务器发送HTTP请求以检查新的更新。虽然实现简单,但短轮询可能会导致高服务器负载和增加的延迟,特别是当更新不频繁时。

4.6:HTTP长轮询

长轮询是对短轮询的改进,其中客户端发送请求到服务器,服务器保持请求打开,直到有新数据可用。这种方法减少了请求的数量和服务器负载,但仍可能存在延迟问题,并需要对服务器资源进行谨慎管理。

4.7:Webhook

Webhook是由系统中特定事件触发的用户定义的HTTP回调。当事件发生时,源站点向为Webhook配置的URL发出HTTP请求。这种方法允许不同系统或服务之间进行高效的事件驱动通信。

4.8:流式API

流式API允许客户端从服务器消费连续的数据流,通常使用HTTP或WebSocket连接。这些API设计用于需要实时更新的应用程序,例如社交媒体动态、股票市场数据或实时分析。

通过了解和利用这些聊天和流媒体协议,开发人员可以构建响应快、实时的应用程序,满足各种用例,并提供引人入胜的用户体验。

第五部分:系统设计中的常见组件

本节将探讨现代系统设计中常见的一些标准组件。了解这些组件可以帮助开发人员将其无缝集成到系统中,并增强整体功能。

5.1:支付服务

支付服务处理客户和企业之间的交易。集成可靠的支付服务对于电子商务和订阅型平台至关重要。常见的支付服务提供商包括Stripe、PayPal和Square。这些服务通常提供API以便于安全的交易处理和管理重复付款、退款等。

5.2:分析服务

分析服务实现数据收集、处理和可视化,帮助企业做出明智决策。这些服务可以跟踪用户行为、监控系统性能和分析趋势。常见的分析服务提供商包括Google Analytics、Mixpanel和Amplitude。将分析服务集成到系统中可以帮助企业优化其产品并改善用户体验。

5.3:通知

通知服务使用户及时了解更新、警报和重要信息。这些服务可以通过电子邮件、短信和推送通知等多种渠道传递通知。通知服务提供商的示例包括Firebase Cloud Messaging (FCM)、Amazon Simple Notification Service (SNS)和Twilio。

5.4:搜索

集成强大的搜索组件对于具有大量数据或内容的系统至关重要。搜索服务应提供快速、相关和可扩展的搜索功能。Elasticsearch、Apache Solr和Amazon CloudSearch是实现搜索功能的常用选择。这些服务通常支持全文搜索、分面搜索和过滤,使用户能够快速高效地找到所需的信息。

5.5:推荐服务

推荐服务使用算法根据用户的偏好、行为和其他因素提供个性化建议。这些服务可以显著提高用户参与度和满意度。生成推荐的技术包括协同过滤、基于内容的过滤和混合方法。机器学习算法,如矩阵分解和深度学习,也可以用于生成更复杂的推荐。

通过将这些标准组件整合到系统设计中,开发人员可以增强其应用程序的功能,并为用户提供更流畅和引人入胜的体验。

第六部分:系统设计的最佳实践

6.1:需求收集

在开始设计过程之前,充分了解并记录系统需求。

6.2:设计模式

利用经过验证的设计模式来解决反复出现的设计问题,改进整体架构。

6.3:文档

记录设计决策、假设和基本原理,以确保更好的沟通和可维护性。

6.4:迭代设计

通过多次迭代和反馈改进设计,使其不断演进和改进。

6.5:测试和验证

根据要求验证设计并进行测试,以识别和解决潜在问题。

结论

总之,系统设计是一个多方面、复杂的过程,需要深入了解各种组件、协议和技术。本博客文章概述了关键主题,如DNS、负载均衡、API网关、

缓存、数据库和聊天/流媒体协议等。同时,提供了一个系统设计蓝图/备忘单,可帮助开发人员设计和实施各种复杂性的系统。

通过理解系统设计原则和最佳实践,开发人员可以设计出强大、可扩展和高效的系统,满足用户需求并提供卓越的用户体验。

然而,需要注意的是,系统设计是一个不断演化和改进的过程。根据具体的应用场景和需求,开发人员应灵活应对,并根据实际情况做出相应的调整和优化。随着技术的不断发展和创新,也要保持对新技术和趋势的关注,以不断提升系统设计的能力和效果。

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

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

相关文章

inux运维面试题(二)之系统管理类面试题

Linux运维面试题(二)之系统管理类面试题 1.权限优化1.1 简述Linux权限划分原则文件基本权限默认权限特殊权限sudo授权文件系统属性权限 解答 2.备份策略2.1需要备份的内容备份策略备份频率备份存储位置 2.2网站服务器每天产生的日志数量较大,…

LLM - 读取 Lora 模型进行文本生成

目录 一.引言 二.Lora 模型文本生成 1.模型读取 1.1 AutoModelForCausalLM.from_pretrained 1.2 PeftModel.from_pretrained 2.文本生成 2.1 Tokenizer 2.2 model.generate 3.输出实践 三.总结 一.引言 前面介绍了使用 Baichuan7B 从样本生成到 Lora 模型微调和存储…

磁盘擦写次数计算

1.让机器能有外网 2,安装工具 sudo apt-get install smartmontools 3,输入查询命令 sudo smartctl -x /dev/sda |egrep Device Model|User Capacity|Sector Size|173|Logical Sectors Written|Percentage Used Endurance Indicator 4,计算擦写次数 计算方法:25…

hadoop启动无法启动datanode或者namenode

首先进入hadoop安装目录下例如: 再进入dfs目录下,没有出现在hdfs-site.xml配置的data或者name cd data/current vim VERSION 打开VERSION文件复制:clusterID下的内容 将内容复制到name中的VERSION。再进行重启Hadoop

常见的前端安全以及常规安全策略

1、CSRF:跨站请求伪造(Cross-site request forgery); 原理: (1) 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A; (2&#xff…

mapping文件目录生成修改

参考文章: gradle编译完成Copy mapping文件 - 简书 (jianshu.com) 第一步:在app的build.gradle中做如下配置: android {android.applicationVariants.all {variant ->def buildType variant.buildType.nametasks.all {def mappingDir …

米尔基于STM32MP135核心板,助力充电桩发展

随着电动车的普及和人们环保意识的增强,充电桩作为电动车充电设备的重要一环,充电桩行业正迅速发展,消费市场的大量应用也造就市场的需求量不断增长。因此,产品的功能、可靠性、安全性等要求也变得尤为重要,而采用传统…

Leetcode---353周赛

周赛题目 2769. 找出最大的可达成数字 2770. 达到末尾下标所需的最大跳跃次数 2771. 构造最长非递减子数组 2772. 使数组中的所有元素都等于零 一、找出最大的可达成数字 这题就是简单的不能在简单的简单题, 题目意思是:给你一个数num和操作数t&…

智能分析网关V2有抓拍告警但无法推送到EasyCVR,是什么原因?

我们在此前的文章中也介绍了关于智能分析网关V2接入EasyCVR平台的操作步骤,感兴趣的用户可以查看这篇文章:在EasyCVR新版本v3.3中,如何正确接入智能分析网关V2? 智能分析网关V2是基于边缘AI计算技术,可对前端摄像头采…

机器学习 day27(反向传播)

导数 函数在某点的导数为该点处的斜率,用height / width表示,可以看作当w增加ε,J(w,b)增加k倍的ε,则k为该点的导数 反向传播 tensorflow使用反向传播来自动计算神经网络模型中的导数

中国区域地面气象要素驱动数据集(1979-2018)

中国区域地面气象要素驱动数据集(1979-2018) 摘要 中国区域地面气象要素驱动数据集,包括近地面气温、近地面气压、近地面空气比湿、近地面全风速、地面向下短波辐射、地面向下长波辐射、地面降水率共7个要素。数据为NETCDF格式,时…

Redis_非关系型数据库

一、 Redis介绍 1.NoSQL 也叫Not Only SQL(不仅仅是SQL, 不用 sql语言操作的数据库), 一般指非关系型数据库 关系型数据库: 以数据库表为单位存储,表与表之间存在某种关系 非关系型数据库: 数据与数据之间没有关系, 数据就是以键值对的形式存储, 通过键获取到值 在互联网发展中…

cjson的内存泄漏案例

1、当我们使用下面这些创建json对象时,需要用cJSON_Delete();释放,(当然,释放父JSON对象后,子JSON对象也会被释放) 2、多次释放同一内存空间 在recv_write_property函数中的data,在Equipment_re…

Unity游戏源码分享-Unity5.4.1打砖块游戏Breakout_Game_Starter_Kit

Unity5.4.1打砖块游戏Breakout_Game_Starter_Kit 童年的回忆 项目地址:https://download.csdn.net/download/Highning0007/88042779Unity游戏源码分享-

ViDeNN: Deep Blind Video Denoising

ViDeNN: Deep Blind Video Denoising 摘要 We propose ViDeNN: a CNN for Video Denoising without prior knowledge on the noise distribution (blind denoising). The CNN architecture uses a combination of spatial and temporal filtering, learning to spatially deno…

【Java 泛型方法】泛型方法的定义和使用,泛型的通配符和泛型的上下限,泛型的注意事项

博主&#xff1a;_LJaXi Or 東方幻想郷 专栏&#xff1a; Java | 从跨平台到跨行业 开发工具&#xff1a;IntelliJ IDEA Java 泛型方法 泛型方法 ❓需求| 泛型的通配符 | 上限 | 下限 |泛型擦除 ⛔基本数据类型问题 泛型方法 ❓ [修饰符] <类型变量, 类型变量...> [返回…

内容过多,超出部分以省略号“...”显示

效果图如图所示&#xff1a; 1.第一种实现方法&#xff0c;使用纯css实现&#xff08;ps&#xff1a;此方式必须给元素设置宽度&#xff0c;否则可能无效果&#xff09;&#xff0c;代码如下&#xff1a; html代码 <!-- 超过长度&#xff0c;用省略号实现&#xff0c;css的…

相交链表——力扣160

题目描述 法一&#xff09;哈希表 class Solution{ public:ListNode* getIntersectionNode (ListNode* headA, ListNode* headB){unordered_set<ListNode*> st;ListNode* temp headA;while(temp){st.insert(temp);temp temp->next;}temp headB;while(temp){if(st.c…

DES加密解密 Feistel算法网络结构 详讲

文章目录 简单知识导入&#xff1a;具体过程&#xff1a;IP置换&#xff08; 64 − > 64 64->64 64−>64&#xff09;轮函数--E扩展置换&#xff08; 32 − > 48 32->48 32−>48&#xff09;轮函数--与子密钥异或&#xff08; 48 − > 48 48->48 48−&…

【Matlab】智能优化算法_人工大猩猩部队优化算法GTO

【Matlab】智能优化算法_人工大猩猩部队优化算法GTO 1.背景介绍2.数学模型2.1 勘探阶段2.2 开采阶段2.2.1 跟随银背2.2.2 成年女性比赛 3.文件结构4.算法流程图5.伪代码6.详细代码及注释6.1 boundaryCheck.m6.2 GTO.m6.3 initialization.m6.4 main.m6.5 ObjectiveFunction.m 7.…