大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构!

系统设计常常被视为一个令人望而生畏的话题,但其实并非如此!一旦你将其分解成核心概念,理解和实现起来就会容易得多。在这篇博文中,我们将探讨 30 个重要的系统设计概念,并用简单易懂的实际案例进行解释。


1.客户端-服务器架构

客户端-服务器架构是大多数现代 Web 应用程序的支柱。在这种架构下,客户端(例如浏览器或移动应用)向服务器(一台强大的机器)发出请求,服务器处理这些请求并返回数据。

示例:当您访问网站时,您的网络浏览器(客户端)会向服务器发送请求,服务器会处理该请求并将网页内容返回给您的浏览器。


2. IP地址

IP地址就像服务器的电话号码,它唯一地标识网络上的设备。互联网上的每台服务器都有一个唯一的 IP 地址,客户端通过它知道将请求发送到哪里。

例如:当您在浏览器中输入facebook.com时,您的浏览器将使用服务器的唯一 IP 地址(如69.63.176.13 )连接到 Facebook 的服务器。


3.域名系统(DNS)

DNS (域名系统)就像互联网上的电话簿。它将人类可读的域名(例如 google.com )映射计算机用来相互识别的IP 地址(例如172.217.5.68 )。

例如:在浏览器中输入google.com ,而不是直接输入网站的 IP 地址。DNS 会将其转换为 IP 地址,以便您连接到 Google 的服务器。


4.代理/反向代理

代理是客户端和服务器之间的中介。它将客户端的请求转发到服务器,从而提高安全性。反向代理则相反,将客户端请求转发到后端服务器

示例:公司可能使用代理服务器来过滤和监控员工的互联网流量,而反向代理可能会在大型系统中的多个后端服务器之间分配传入的网络流量。


5.延迟

延迟是指发送请求和接收响应之间的延迟,通常由客户端和服务器之间的物理距离引起。低延迟对于性能至关重要,尤其是在实时应用中。

示例:如果您在印度访问托管在纽约的网站,则数据必须传输很长的距离,从而导致页面加载延迟(等待时间)。


6. HTTP / HTTPS

HTTP(超文本传输​​协议)是浏览器与服务器通信的协议。HTTPS是HTTP的安全版本,它对通信进行加密以确保数据隐私。

例如:当您登录网上银行账户时,您的浏览器使用HTTPS加密您的登录详细信息,以免被黑客拦截。


7. API(应用程序编程接口)

API就像客户端和服务器之间的桥梁。它允许你的应用与服务器通信并获取所需的数据,无需担心后端的工作方式。

示例:当您使用 Uber 之类的应用程序时,该应用程序会通过 API 与服务器通信以请求可用车辆、价格等数据,然后服务器将数据发回。


8. REST(表述性状态转移)

REST是一套用于构建 API 的规则。它使用 HTTP 方法(例如GETPOSTPUTDELETE )与服务器上的资源(例如用户、订单等数据对象)进行交互。

示例:当您在网站上提交表单时,系统会向服务器发送POST请求来存储您的数据。同样, GET请求会检索您的个人资料等数据。


9. GraphQL

GraphQL是 REST 的一个更灵活的替代方案。它允许客户端精确指定所需的数据,而不是从服务器获取固定的响应。

示例:在 REST API 中,要同时获取用户的个人资料和最近的帖子,您可能需要发出两个请求。使用GraphQL,您可以通过在查询中指定所需内容,在一个请求中获取所有数据。


10.数据库

数据库是应用存储和检索数据的地方。它有助于组织和构建数据以便于访问和管理。

示例: Instagram 等社交媒体应用程序将用户的帖子、评论和点赞存储在数据库中,以便可以在需要时快速获取数据。


11. SQL 与 NoSQL

SQL数据库将数据存储在具有预定义模式的表中,非常适合关系数据。另一方面,NoSQL数据库存储非结构化或半结构化数据,并且具有更高的可扩展性。

示例:银行应用程序可能使用SQL数据库来存储交易数据,而社交媒体平台可能使用NoSQL来灵活存储用户生成的内容,如帖子、图像等。


12.垂直扩展

垂直扩展意味着向单个服务器添加更多资源(如 RAM、CPU)以处理更多负载。

示例:如果托管网站的服务器在高流量期间速度变慢,则使用更多 CPU 和 RAM 升级服务器就是垂直扩展的一个例子。

13.水平扩展

水平扩展是指添加更多服务器来分担负载。这种方法允许系统在不依赖单台服务器容量的情况下进行扩展。

示例:如果托管在线商店的一台服务器无法处理所有流量,则水平扩展将涉及添加更多服务器并在它们之间分配请求。

14.负载均衡器

负载平衡器将流量分配到多个服务器,以防止单个服务器不堪重负。

示例:如果您有多个 Web 服务器托管一个热门网站,则负载均衡器将确保传入流量均匀分配,因此不会有单个服务器过载。

15.索引

索引是数据库中用来加速数据检索的一种技术。它就像书中的索引,可以帮助您快速找到所需的内容。

示例:如果您拥有一个大型书籍数据库,则索引标题列将允许您通过标题快速找到书籍,而无需扫描整个表。

16.复制

复制涉及在不同的服务器上创建数据库的副本,以提高读取性能和容错能力。

示例:如果您的应用程序有数百万用户,您可以拥有数据库的多个读取副本来分散流量并提高读取性能。

17.分片

分片技术是指将大型数据库拆分成多个小块(称为“分片”),每个分片存储在单独的服务器上。它有助于将负载分散到多台机器上。

示例:如果您有数百万用户,您可以根据用户 ID 对数据库进行分片,这样不同的分片可以处理不同的用户数据,从而更易于扩展。

18.垂直分区

垂直分区根据列将数据库表拆分成更小的部分。这可以优化需要特定列的查询的性能。

示例:如果您有一个包含用户数据(姓名、电子邮件、登录历史记录和账单)的表,但通常只需要姓名和电子邮件,则垂直分区允许您将它们分成两个表。

19.缓存

缓存将经常访问的数据存储在内存中,以加快检索速度并减少数据库负载。

示例:在电子商务应用中,如果用户经常检查产品的价格,则将价格缓存在内存中意味着不必每次都从数据库中获取价格,从而加快了应用的速度。

20.非规范化

非规范化通过将相关数据合并到一个表中来减少连接的需要,这可以加快读取操作,但代价是需要更多的存储空间。

示例:您无需为用户订单创建单独的表,而是将它们合并为一个表,该表同时存储用户数据和订单,从而提高读取性能。

21. CAP定理

CAP定理指出,在分布式系统中,一致性可用性分区容错性三者只能实现其中的两种。

示例:在聊天应用中,您可能会优先考虑可用性(确保用户始终可以发送消息)和分区容忍度(当部分网络出现故障时系统仍能工作),但可能会牺牲一致性(某些消息可能会延迟)。

22. Blob存储

Blob 存储旨在存储大型文件,例如图像、视频和文档。它可以高效地管理非结构化数据。

示例: YouTube 等视频流服务使用 Blob 存储来存储视频并向用户提供视频。

23.内容分发网络(CDN)

CDN从地理位置上更靠近用户的服务器提供内容,从而减少延迟并加快加载时间。

示例:当您在 Netflix 上流式传输视频时,内容将由离您最近的 CDN 服务器提供,从而减少缓冲时间并改善流式传输体验。

24. WebSockets

WebSocket支持客户端和服务器通过单个持久连接进行双向通信。它们是实时应用程序的理想选择。

示例:在在线多人游戏中,WebSockets 允许服务器实时向所有玩家更新最新的游戏数据。

25. Web钩子

Webhook允许一个服务器在特定事件发生时通知另一个服务器,而无需轮询。

示例:当您通过 Stripe 付款时,Stripe 会向您的服务器发送一个 webhook 来通知您交易成功。

26.微服务

服务架构将应用程序分解为更小的独立服务,每个服务负责一项特定的任务。

示例:在线购物平台可能有单独的微服务来处理付款、用户帐户和产品库存。

27.消息队列

消息队列有助于异步管理服务之间的通信,从而提高可扩展性并防止过载。

示例:如果用户上传视频,消息队列可以先将请求排成一行以便稍后处理,而不是立即处理视频,从而确保系统不会不堪重负。

28.速率限制

速率限制限制了用户在给定时间范围内可以发出的请求数量,以防止系统过载。

示例:如果机器人试图每秒向您的网站发出数百个请求,则速率限制会将其限制为一定数量的请求,以确保普通用户不受影响。

29. API 网关

API网关是一个单一入口点,它将请求路由到不同的微服务并处理身份验证、速率限制和日志记录等任务。

示例:在具有多个服务的大型应用程序中,API 网关不是直接联系每个服务,而是充当所有请求的中介。

30.幂等性

幂等性确保重复的请求产生相同的结果。这在支付等操作中至关重要,因为多次发送相同的请求不应导致重复的操作。

示例:如果您尝试付款两次,幂等性可确保付款仅处理一次,从而防止重复收费。

结论

这 30 个系统设计概念为构建可扩展且可靠的系统奠定了基础。无论您是设计数据库、提升性能还是确保安全,理解这些关键概念都能帮助您应对系统设计的复杂性。

如果这篇文章对你有帮助的话,别忘了【在看】【点赞】支持下哦~

原文地址:https://mp.weixin.qq.com/s/6KS2NS8-zab3eLJ-DAS2mg
本文由博客一文多发平台 OpenWrite 发布!

吾日三省吾码
25 声望4 粉丝