6个系统设计的基本概念

da0e58d727de0f1cd105de786c037d61.png
1*Xl9kK7ffgu18IaJ637-cTg.png

简介

这份综合指南将引导你掌握在系统设计中取得成功所需的基本概念。

垂直和水平扩展

1. 垂直扩展

系统扩展的最直接方式是通过垂直扩展。这涉及升级现有服务器,例如增加更多的RAM或更快的CPU。

f6b3816b443dbbb6840d48c44fe5a364.png
1*8OAEF45gAfOxvrTUz6hp3w.png

垂直扩展通常是处理用户负载增加的快速解决方案。然而,从长远来看,这并不是最有效的扩展方式。

2. 水平扩展

更高效的方法是水平扩展。在这种情况下,会添加服务器的副本,使每个副本处理一部分请求。

1db15a2085ddd74a6caf0994b506e98a.png
1*LfHAtNeWaNARDcmIaGVkXw.png

这比垂直扩展更为健壮,它带来两个关键的好处:

1.无限扩展性:你可以不断添加服务器。2.可靠性:如果一个服务器失败,其他服务器可以继续处理请求,减轻单点故障问题。

3. 负载均衡

为了防止服务器超载并有效地分发流量,负载均衡至关重要。

18787f1b073b091367a496611a19d0dc.png
1*UmNTQRCU97JYoLAIqYMAyA.png

负载均衡器将入站用户请求分配到多个服务器上,防止任何一个服务器成为瓶颈。

算法

负载均衡器使用各种算法来分发流量:

•最少连接:将流量发送到具有最少打开连接的服务器。•基于资源:根据可用资源选择服务器。•IP哈希:根据源和目标IP地址的哈希将流量分配给服务器。•轮询:按顺序在服务器列表上分发流量。•自定义脚本:你还可以编写根据需要定制的自定义算法。

技术

负载均衡的常见方法包括:

•专业软件:你可以使用像 Nginx 这样的软件,或者使用 AWS Elastic Load Balancing 等服务来实现负载均衡。•基于DNS:通过为域分配多个IP,使用DNS本身作为简单的负载均衡器。然而,这种方法提供的定制性较少。

4. 缓存

在系统中瓶颈通常不是Web服务器而是数据库服务器。缓存涉及临时存储数据,通常在计算机的RAM中,以便在减轻数据库负载的同时更快地服务未来的请求。

技术

为了实施缓存,你需要根据特定要求从一系列可用的软件选项中进行选择,例如 Redis、Nginx、Memcached 或 Cassandra。

缓存失效

为了保持缓存和数据库同步,可以使用各种缓存失效策略。选择正确的算法确保你的缓存既有效又高效。常见的算法有:

写穿透缓存: 先更新缓存,然后更新数据库。•写回缓存: 先更新缓存,然后与数据库同步。

但缓存在哪里?

缓存可以存在于应用程序架构的不同级别,包括:

1.客户端: 在浏览器的缓存中。2.服务器端: 使用像Redis或Memcached这样的软件。3.数据库: 通过在诸如MySQL的数据库中进行查询缓存。

5. 内容交付网络(CDN)

通过内容交付网络,可以实现另一层次的缓存。CDN是分布在多个地理位置的服务器网络,用于存储和提供Web内容,如图像和视频。它们在多个地理位置存储您内容的缓存副本。

32f687cf11bac39112991500aa245443.png
1*R5dl3WetVphgtjSjW1Kajg.png

设置

CDN通常以以下几种方式设置:

拉取式: CDN在首次用户请求时从源服务器获取数据并缓存。•推送式: 源服务器事先将数据推送到CDN。

知名的CDN提供商包括 Cloudflare、Google Cloud CDN、Amazon CloudFront 和 Microsoft Azure CDN。

6. API设计

API设计充

当客户端和服务器之间的契约。在设计API时,考虑以下关键因素:

•API类型:在设计API时,首先决定类型:RESTful、GraphQL或gRPC。•通信协议:HTTP、WebSockets等。•数据传输机制:JSON、XML或协议缓冲区。•安全性:考虑采取措施防范字典攻击、XSS、CSRF、HPP攻击,并使用速率限制。•查询和排序:如何检索和排序数据?•分页:不要在一个请求中获取所有数据,你需要分页。•性能:优化应用程序的初始加载时间。•错误处理:确保错误是一致且信息丰富的。

服务器驱动和客户端驱动设计

根据你的应用程序,你可能会选择服务器驱动或客户端驱动的API设计,每种设计都提供一套自己的优势。

84eef2c9364d4bcacc4e20f956847ec9.png
1*w0ybXh8JwTLGstzTREODIw.png

•服务器驱动:适用于需要应用商店批准的移动应用程序发布的情况。•客户端驱动:在客户端方面提供更大的灵活性。

结论

从扩展策略和负载均衡技术到缓存和API设计的微妙之处,掌握这些领域可以让你在竞争中具备强大的优势。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《向量数据库指南》——亚马逊云科技向量数据库揭秘:点亮数据未来!

在我们讨论亚马逊云科技向量数据库之前,我们必须先搞懂向量数据库。 那么,向量数据库是什么呢?简单来说,向量数据库就是一种专门用于处理和查询向量数据的数据库。与传统数据库以表格形式组织和存储数据不同,向量数据库采用多维数值数组的形式处理和存储数据。它的主要目标…

从多表连接视图对比人大金仓和Oracle

KING BASE 信息时代,数据是驱动业务决策和创新的核心资源。然而,随着数据量的不断增加,有效地处理和整合数据的过程变得愈发复杂。这时,多表连接视图悄然走进数据库世界,不仅能够将多个表中的数据整合在一起&#xff0…

和解电话(匿名电话)/情侣拉黑联系电话/虚拟号/虚拟中间号/拉黑联系项目代码

和解电话&#xff0c;又名匿名电话 使用中间号转接到被叫人&#xff0c;不显示呼叫人号码&#xff0c;类似美团隐私号 呼叫人A->中间号B->被叫人C 演示地址&#xff1a;微信打开(http://sms.test.4php.top/sms/phone) 实现代码如下 <section class"section&q…

Java工具包Hutool框架

Hutool是一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML 等 JDK 方法进行封装,组成各种 Util 工具类。官网地址:https://www.hutool.cn/。 添加依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artif…

【具身智能评估2】具身视觉语言规划(EVLP)数据集基准汇总

参考论文&#xff1a;Core Challenges in Embodied Vision-Language Planning 论文作者&#xff1a;Jonathan Francis, Nariaki Kitamura, Felix Labelle, Xiaopeng Lu, Ingrid Navarro, Jean Oh 论文原文&#xff1a;https://arxiv.org/abs/2106.13948 论文出处&#xff1a;Jo…

WIFI版本云音响设置教程腾讯云平台版本

文章目录 WIFI版本云音响设置教程腾讯云平台版本一、申请设备三元素1.腾讯云物联网平台2.创建产品3.设置产品参数4.添加设备5.获取三元素 二、设置设备三元素1.打开MQTTConfigTools2.计算MQTT参数3.使用windows电脑的WIFI连接到设备热点4.设置参数 三、腾讯云物联网套件协议使用…

基于鼠群算法优化概率神经网络PNN的分类预测 - 附代码

基于鼠群算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于鼠群算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于鼠群优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…

简历技术栈redis点

熟悉Redis常见的数据类型以及缓存问题&#xff0c;如缓存穿透、雪崩 、击穿等 Redis五种数据类型 Redis常用命令 查看所有 keys * 字符串类型string 常用命令 举例&#xff1a; 放置一个字符串数据到redis中&#xff0c;先为数据定义一个名称&#xff0c;比如name,age等&am…

线性方程组

线性方程组 设存在线性方程组 { a 1 , 1 x 1 a 1 , 2 x 2 ⋯ a 1 , n x n b 1 a 2 , 1 x 1 a 2 , 2 x 2 ⋯ a 2 , n x n b 2 ⋮ ⋮ a m , 1 x 1 a m , 2 x 2 ⋯ a m , n x n b m \left.\left\{\begin{array}{l}a_{1,1}x_1a_{1,2}x_2\cdotsa_{1,n}x_nb_1\\a_{2,1}…

大模型的语言能力

NLP作为一个领域为基础模型开辟了道路。虽然这些模型在标准基准测试中占据主导地位&#xff0c;但这些模型目前获得的能力与那些将语言描述为人类交流和思维的复杂系统的能力之间存在明显的差距。针对这一点&#xff0c;我们强调语言变异的全部范围&#xff08;例如&#xff0c…

大模型的视觉能力

摘要&#xff1a; 计算机视觉引领了人工智能中深度学习的采用&#xff0c;这表明在大型注释数据集上预训练的模型可以转移到许多下游设置。现在&#xff0c;在网络规模的原始数据而不是策划的数据集上进行预训练&#xff0c;基础大模型在计算机视觉中正在崛起。这些模型…

Windows安装多个版本的Java

在做持续集成CI/CD时&#xff0c;需要用到Jenkins&#xff0c;本人爱好使用各种最新版&#xff0c;down下来之后发现&#xff0c;新版只支持Java11以上的版本了&#xff01;&#xff01; 苦苦找了很久&#xff0c;找不到正规Java8版本的Jenkins安装包&#xff01; 干脆换个思路…

盘点54个Python实用工具源码Python爱好者不容错过

盘点54个Python实用工具源码Python爱好者不容错过 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 链接&#xff1a;https://pan.baidu.com/s/1OXyEh-Yy3JI90jvn6d6wRw?pwd8888 提取码&#xff1a;8888 项目名称 7z辅助破解工…

遥感数据

在研究中&#xff0c;我们常需要遥感数据。在下面的网站中&#xff0c;可以得到遥感数据。 EarthExplorer (usgs.gov)https://earthexplorer.usgs.gov/登陆网站&#xff1a; 通常&#xff0c;在Additional Criteria中&#xff0c;可以下载遥感数据。 不过&#xff0c;这个选项…

html综合笔记:设计实验室主页

&#xff11; 主页来源及效果 Overview - Lab Website Template docs (gitbook.io) greenelab/lab-website-template: An easy-to-use, flexible website template for labs (github.com) 2 创建网页 3 主要的一些file 3.1 index.md 主页面 3.1.1 intro 3.1.2 highlight …

mysql优化之explain 以及 索引优化

Mysql安装文档参考&#xff1a;https://blog.csdn.net/yougoule/article/details/56680952 Explain工具介绍 使用EXPLAIN关键字可以模拟优化器执行SQL语句&#xff0c;分析你的查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain 关键字&#xff0c;MySQL 会在查询上设…

Python 如何实现备忘录设计模式?什么是备忘录设计模式?Python 备忘录设计模式示例代码

什么是备忘录&#xff08;Memento&#xff09;设计模式&#xff1f; 备忘录&#xff08;Memento&#xff09;设计模式是一种行为型设计模式&#xff0c;用于捕获一个对象的内部状态&#xff0c;并在对象之外保存这个状态&#xff0c;以便在需要时恢复对象到先前的状态。这种模…

腾讯云服务器带宽计费模式_按流量和带宽收费说明

腾讯云服务器带宽计费模式分为“按带宽计费”和“按使用流量”两种计费模式&#xff1a;按带宽计费是预付费&#xff0c;一次性购买固定带宽值&#xff0c;先付费&#xff1b;按使用流量计费是先使用后付费&#xff0c;根据云服务器公网出方向实际产生流量来计算。如何选择带宽…

java--拼图游戏

1、了解拼图游戏基本功能&#xff1a; 拼图游戏内容由若干小图像块组成的&#xff0c;通过鼠标点击图像块上下左右移动&#xff0c;完成图像的拼凑。 2、拼图游戏交互界面设计与开发&#xff1a; 通过创建窗体类、菜单、中间面板和左右面板完成设计拼图的交互界面 &#xff…

突发 Chatgpt之父被开,GPT放开注册,注册难度大幅降低!

大家好&#xff0c;我是菜鸟哥&#xff0c;又到周末啦&#xff0c;我们聊一下非技术的话题。科技圈chatgpt属于当红辣子鸡&#xff0c;是目前最火的话题。前不久才开的发布会&#xff0c;然后没几天被黑客攻击&#xff0c;导致服务中断&#xff0c;然后openai 又突然宣布gpt4停…