【嵌入式开发学习】__软件工程师的关键原则-18个系统设计概念

news2025/1/17 5:55:33

目录

前言

01. 域名系统 (DNS)

02. 负载均衡器

03. API 网关

04. 内容交付网络 (CDN)

05. 正向代理与反向代理

06. 缓存

07. 数据分区

08. 数据库复制

09. 分布式消息系统

10. 微服务

11. 数据库

12. 前端缓存

13. 后端缓存

14. 安全性

15. 高可用性与容错性

16. 事件驱动架构

17. 日志和监控

18. 测试策略

结束语

(* ̄︶ ̄)创作不易!期待你们的 点赞、收藏和评论喔。


前言

要在系统设计中脱颖而出,深刻理解诸如负载均衡缓存分区复制数据库代理等基本系统设计概念至关重要。

在掌握这个主模板的基础上,我们将讨论18个重要的系统设计概念。以下是每个概念的简要描述:

 

01. 域名系统 (DNS)

域名系统(DNS)是互联网基础设施的一个基本组成部分,将用户友好的域名转换为其相应的IP地址。它充当了互联网的电话簿,允许用户通过输入易于记忆的域名而不是计算机用于识别彼此的数值IP地址(如“192.0.2.1”)来访问网站和服务。

当您在Web浏览器中输入域名时,DNS负责查找相关的IP地址并将您的请求发送到适当的服务器。这个过程从您的计算机向递归解析器发送查询开始,然后递归解析器搜索一系列DNS服务器,从根服务器开始,然后是顶级域(TLD)服务器,最终是权威域名服务器。一旦找到IP地址,递归解析器将其返回给您的计算机,允许您的浏览器与目标服务器建立连接并访问所需的内容。

02. 负载均衡器

负载均衡器是一种用于分发入站网络流量到多个服务器的网络设备或软件,以确保最佳资源利用、降低延迟并保持高可用性。在出现突发流量或服务器请求不均匀分布的情况下,负载均衡器在扩展应用程序和有效管理服务器工作负载方面发挥着至关重要的作用。

负载均衡器使用各种算法来确定入站流量的分发。一些常见的算法包括:

  1. 轮询算法: 请求按顺序和均匀地分配到所有可用服务器。
  2. 最少连接算法: 负载均衡器将请求分配给具有最少活动连接的服务器,为较不繁忙的服务器提供优先。
  3. IP哈希算法: 客户端的IP地址被哈希,生成的值用于确定请求应该被定向到哪个服务器。这种方法确保特定客户端的请求一直路由到相同的服务器,有助于维护会话一致性。

03. API 网关

API网关是一种充当外部客户端与应用程序的内部微服务或基于API的后端服务之间中间件的服务器或服务。它是当今体系结构的重要组件,特别是在基于微服务的系统中,它简化了通信过程,为客户端提供访问各种服务的单一入口点

API网关的主要功能包括:

  1. 请求路由:API网关根据预定义的规则和配置,将来自客户端的传入API请求路由到适当的后端服务或微服务。
  2. 身份验证和授权:API网关管理用户身份验证和授权,确保只有经授权的客户端才能访问服务。它在将请求路由到后端服务之前验证API密钥、令牌或其他凭证。
  3. 速率限制和节流:为了保护后端服务免受过大的负荷或滥用,API网关根据预定义的策略对客户端的请求进行速率限制或节流。
  4. 缓存:为了降低延迟和后端负载,API网关缓存经常使用的响应,直接提供给客户端,无需查询后端服务。
  5. 请求和响应转换:API网关可以修改请求和响应,例如转换数据格式、添加或删除标头,或更改查询参数,以确保客户端和服务之间的兼容性。

 

04. 内容交付网络 (CDN)

内容交付网络(CDN)是一个分布式服务器网络用于存储和传递内容,如图像、视频、样式表和脚本,以使用户可以从地理位置更接近他们的位置访问这些内容。CDN旨在提高内容传递的性能、速度和可靠性,无论用户相对于原始服务器的位置如何。以下是CDN的运作方式:

  1. 当用户从网站或应用程序请求内容时,请求被定向到最近的CDN服务器,也称为边缘服务器。
  2. 如果边缘服务器已经缓存了请求的内容,它将直接向用户提供内容。这个过程减少了延迟并提高了用户体验,因为内容传输的距离更短。
  3. 如果边缘服务器没有缓存请求的内容,CDN将从原始服务器或附近的另一个CDN服务器检索内容。一旦内容被获取,它将被缓存在边缘服务器上并提供给用户。
  4. 为了确保内容保持最新,CDN定期检查原始服务器以获取更改,并相应地更新其缓存。

05. 正向代理与反向代理

正向代理,也称为“代理服务器”或简称“代理”,是位于一个或多个客户机之前的服务器充当客户机和互联网之间的中介。当客户机请求互联网上的资源时,请求首先发送到正向代理。正向代理然后代表客户机将请求发送到互联网,然后将响应返回给客户机。

另一方面,反向代理是位于一个或多个Web服务器之前的服务器充当Web服务器和互联网之间的中介。当客户端请求互联网上的资源时,请求首先发送到反向代理。反向代理然后将请求转发到其中一个Web服务器,然后将响应返回给客户端。

06. 缓存

缓存是位于应用程序和原始数据源(如数据库、文件系统或远程Web服务)之间的高速存储层。当应用程序请求数据时,首先检查缓存。如果数据存在于缓存中,将返回给应用程序。如果在缓存中找不到数据,则从其原始来源检索数据,将其存储在缓存中以备将来使用,然后返回给应用程序。在分布式系统中,缓存可以出现在多个位置,包括客户端、DNS、CDN、负载均衡器、API网关、服务器、数据库等等。

07. 数据分区

在数据库中,水平分区,通常称为分片,涉及将表的行分成较小的表,并存储在不同的服务器或数据库实例上。这种方法用于在多个服务器之间分发数据库负载,从而提高性能。

相反,垂直分区涉及将表的列分成单独的表。这个技术旨在减少表中的列数,提高只访问有限数量列的查询性能。

08. 数据库复制

数据库复制是一种用于在不同服务器或位置之间维护相同数据库的方法。数据库复制的主要目标是增加数据的可用性、冗余和容错性,以确保系统即使在硬件故障或其他问题出现时仍然可以正常运行。

在复制数据库配置中,一个服务器充当主数据库,而其他服务器则充当副本。这涉及在主数据库和副本之间同步数据,以确保它们都具有相同的最新信息。数据库复制提供了多个优点,包括:

  1. 改进性能:通过在多个副本之间分发读查询,可以减轻主数据库的负载,从而提高查询响应时间。
  2. 高可用性:如果主数据库发生故障或停机,副本可以继续提供数据,确保对应用程序的不间断访问。
  3. 增强的数据保护:在不同位置维护数据库的多个副本有助于防止由于硬件故障或其他灾难而导致的数据丢失。
  4. 负载平衡:副本可以处理读查询,从而实现更好的负载分配并减轻主数据库的整体压力。

09. 分布式消息系统

分布式消息系统为多个可能分布在不同地理位置的应用程序、服务或组件之间交换消息提供了可靠、可扩展和容错的方式。这些系统通过解耦发送方和接收方组件,使它们能够独立开发和运行。分布式消息系统在大型或复杂系统中尤其有价值,比如微服务架构或分布式计算环境中。这些系统的示例包括Apache Kafka和RabbitMQ。

10. 微服务

微服务代表一种架构风格其中一个应用程序被组织成一组小型、松散耦合的、可以独立部署的服务。每个微服务负责应用程序内的特定功能或领域,并通过明确定义的API与其他微服务通信。这种方法不同于传统的单体架构,传统单体架构将应用程序构建为单一、紧密耦合的单元。

微服务的主要特点包括:

  1. 独立部署:每个微服务可以独立开发、测试和部署,无需影响其他微服务。
  2. 技术多样性:每个微服务可以使用不同的技术栈,以满足其特定需求。
  3. 易于维护:由于微服务的规模较小,它们通常更易于维护、扩展和修改。
  4. 可扩展性:可以根据需要扩展单独的微服务,而无需为整个应用程序进行扩展。

11. 数据库

数据库是一种结构化数据的持久存储系统用于存储、检索和管理数据。数据库在各种应用程序和系统中都有广泛的应用,从基本的数据存储到复杂的分析和报告系统。主要的数据库类型包括:

  1. 关系型数据库(RDBMS) 使用表格结构来存储数据,并支持SQL查询语言。常见的关系型数据库包括MySQL、PostgreSQL、Oracle和Microsoft SQL Server。
  2. NoSQL数据库 这些数据库不使用传统的表格结构,而使用文档、列族、键值对或图形等非关系数据结构来存储数据。NoSQL数据库包括MongoDB、Cassandra、Redis和Elasticsearch。
  3. NewSQL数据库 这是一种中间方式,结合了关系数据库和NoSQL数据库的某些特性。NewSQL数据库旨在提供可扩展性、高性能和分布式能力。

12. 前端缓存

前端缓存是一种用于缓存Web应用程序的用户界面(HTML、CSS、JavaScript等)以提高性能的技术。前端缓存可以通过减少从服务器请求资源的次数、降低延迟并提供更快的用户体验来改进Web应用程序的性能。前端缓存通常采用浏览器缓存、CDN和缓存服务等多种形式。

13. 后端缓存

后端缓存是一种用于缓存应用程序的数据和计算结果以提高性能的技术。它将数据存储在内存中,以便将来更快地检索。后端缓存通常用于存储数据库查询结果、API响应和计算密集型任务的结果。一些常见的后端缓存技术包括 Redis Memcached

14. 安全性

安全性是系统设计中至关重要的概念。它包括身份验证授权加密跨站脚本(XSS)跨站请求伪造(CSRF)防护数据保护网络安全等。系统设计应考虑各种威胁和安全攻击,以确保系统的数据和用户得到保护。

15. 高可用性与容错性

高可用性和容错性是系统设计的关键目标。高可用性涉及确保系统在面临故障或中断时保持可用。容错性涉及系统在出现故障或错误时能够恢复正常运行。实现高可用性和容错性通常需要使用负载均衡、故障转移、冗余和监控等技术。

16. 事件驱动架构

事件驱动架构是一种应用程序架构,其中应用程序的不同组件通过事件进行通信。事件是应用程序中发生的特定动作或状态更改,可以触发其他组件的响应。事件驱动架构通常用于实现松散耦合的组件,以便能够更轻松地扩展和修改系统。

17. 日志和监控

在系统设计中,日志和监控是关键工具,用于识别和解决性能问题、故障和安全问题。日志记录有助于跟踪系统的操作和问题,而监控则提供了实时的性能数据和警报。在分布式系统中,有效的日志和监控可以帮助工程师快速诊断问题和优化系统

18. 测试策略

测试是系统设计和开发的关键组成部分。测试策略涉及确定测试范围创建测试计划编写测试用例执行测试自动化测试性能测试等。有效的测试策略有助于确保系统的可靠性、性能和安全性。

结束语

这18个系统设计概念涵盖了构建可伸缩、高性能、高可用性和安全的系统所需的核心知识。

希望这篇文章对你有所帮助,没有浪费你的时间~


(* ̄︶ ̄)创作不易!期待你们的 点赞收藏评论喔。

本文来源网络,免费分享知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除!

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

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

相关文章

阿里云双11优惠活动:新老用户99元服务器和代金券领取攻略

2023阿里云双11优惠活动开启了,轻量2核2G3M带宽服务器87元一年、2核4G4M带宽165元一年,云服务器ECS经济型e实例2核2G3M固定带宽优惠价格99元一年,新老用户同享,并且续费不涨价,第二年99元续费。阿里云个人和企业用户还…

JAVA技术栈的有福啦!这款IDEA插件,写完代码即可调试

国产API调试工具 Apipost 推出IDEA插件,写完代码就可以调试接口并一键生成接口文档!而且还可以根据已有的方法帮助您快速生成 url 和 params。Apipost Helper API 调试工具 API 管理工具 API 搜索工具。 在商店中搜索或直接点击下方链接即可下载&…

天猫商品评论API接口(评论内容|日期|买家昵称|追评内容|评论图片|评论视频..)

要获取天猫商品评论接口,您需要使用天猫开放平台提供的API接口。以下是一些可能有用的步骤: 注册并登录天猫开放平台,获取开发者账号。在开发者中心创建一个应用,获取应用的App Key和App Secret。使用天猫开放平台的API接口&…

Yolov8目标识别与实例分割——算法原理详细解析

前言 YOLO是一种基于图像全局信息进行预测并且它是一种端到端的目标检测系统,最初的YOLO模型由Joseph Redmon和Ali Farhadi于2015年提出,并随后进行了多次改进和迭代,产生了一系列不同版本的YOLO模型,如YOLOv2、YOLOv3、YOLOv4&a…

【进程控制⑦】:制作简易shell理解shell运行原理

【进程控制⑦】:制作简易shell&&理解shell运行原理 一.交互问题,获取命令行二.字串分割问题,解析命令行三.指令的判断四.普通命令的执行五.shell原理本质 一.交互问题,获取命令行 shell刚启动时就会出现一行命令行&#x…

如何建立个人百科,事半功倍

在现代社会,人们越来越重视个人品牌建设,而打造个人百科是其中重要的一环。那么,什么是个人百科呢?简单来说,它是一本介绍个人生平、成就和贡献的百科全书,其好处不言而喻。 首先,它可以提高个人…

vm虚拟机逆向---[GWCTF 2019]babyvm 复现【详解】

文章目录 前言题目分析CD1mov指令xor指令and其他指令 E0BF83 汇编提取编写exp 前言 好难。大家都觉得简单,就我觉得难是吧,,,,, 题目分析 、 代码看着挺少,三个主要函数,一开始好像…

足足68个!Python函数合集请收好!

内置函数就是python给你提供的, 拿来直接用的函数,比如print.,input等。 #68个内置函数 # abs()   dict()   help()   min()   setattr() # all()   dir()   hex()   next()   sli…

git clone 报错:fatal: unable to access ‘https://github.com/XXXXXXXXX‘

国内使用GIT工具,拉取github代码,会因为网络原因无法成功拉取。出现如下类似情形: 此时更改 web URL即可,改用镜像的github网站替换https://github.com/。即URL里的https://github.com/换成https://hub.nuaa.cf/,即可…

鸿蒙应用开发之后台代理提醒

一、简介 随着生活节奏的加快,我们有时会忘记一些重要的事情或日子,所以提醒功能必不可少。应用可能需要在指定的时刻,向用户发送一些业务提醒通知。例如购物类应用,希望在指定时间点提醒用户有优惠活动。为满足此类业务诉求&…

取消elementUI中table的选中状态

1、表格上绑定ref 2、清空用户选中数据 this.$refs.loopRef.clearSelection()

ATE新能源汽车充电桩自动负载测试系统

随着新能源汽车的普及,充电桩的需求也在不断增加,为了确保充电桩的性能和安全性,对其进行负载测试是非常重要的。ATE新能源汽车充电桩自动负载测试系统是一种专门用于检测充电桩性能的设备,它可以模拟各种实际使用场景&#xff0c…

swift语言下SurfGen库做的爬虫是什么样的 ?

Swift语言并没有内置的爬虫库,但是你可以使用第三方库来实现爬虫功能。其中比较常用的是Alamofire和SwiftyJSON。Alamofire是一个基于Swift语言的HTTP网络库,可以用来发送HTTP请求和接收HTTP响应。而SwiftyJSON则是一个用于处理JSON数据的Swift库&#x…

22款奔驰GLS450升级迈巴赫踏板 上下车更加方便

原车升级前今天来一台奔驰GLS升级电动踏板,这台车原车是带固定踏板的,但是车主觉得不如电踏好,就来升级一套迈巴赫1:1的电动踏板。电动踏板我们也是经常改的项目,因为大型车没有个踏板确实不太方便。

数智赋能!麒麟信安参展全球智慧城市大会

10月31日至11月2日,为期三天的2023全球智慧城市大会长沙在湖南国际会展中心举办,大会已连续举办12届,是目前全球规模最大、专注于城市和社会智慧化发展及转型的主题展会。长沙市委常委、常务副市长彭华松宣布开幕,全球智慧城市大会…

2023最新版本 FreeRTOS教程 -3-消息队列-验证(动态创建)

队列概述 一块可读写的特殊缓冲区,读取空会导致任务挂起,以此来优化MCU的使用率 API函数 创建 g_xQueuePlatform xQueueCreate(10, //队列长度sizeof(struct input_data)//队列中每一个块的大小); 写入 xQueueSend(g_xQueuePlatform, &idata, 0);读取 xQueueReceive(g…

如何让企业配件管理高效又智能!仓库配件出入库管理系统哪家的好用?

在当今快速发展的商业环境中,企业运营的效率和管理的重要性日益凸显。对于许多企业来说,仓库配件管理是一个关键的环节,它不仅涉及到物品的存储和分发,还与企业的成本控制和运营流程紧密相关。然而,管理仓库配件是一项…

Oracle-执行计划生成及查看的几种方法

1. EXPLAIN FOR 语法: EXPLAIN PLAN FOR SQL语句SELECT * FROM TABLE(dbms_xplan.display());优点: 无需真正执行SQL 缺点: 没有输出相关的统计信息,例如产生了多少逻辑读、物理读、递归调用等情况无法判断处理了多少行无法判断…

跨境商城开发指南:10个必备步骤助您实现国际化零售业务飞跃

欢迎阅读本篇文章,作为跨境商城开发领域的专家,我将为您提供一份全面的指南,帮助您实现国际化零售业务的飞跃。在如今全球化的商业环境下,跨境电商已成为许多企业拓展市场的重要途径。通过合理规划和正确执行,您可以在…

java APP自动化测试AppIum

一、前言 二、Appium环境搭建 2.1 JDK安装 2.2 Android SDK安装配置 2.3 模拟器安装及配置 2.4 Appium Desktop安装及使用 2.5 Appium配置连接模拟器 三、实战基本脚本编写 3.1 创建Maven项目并配置 3.2 简单Demo 四、写在最后 一、前言 随着移动互联网的发展,AP…