系统设计概念一览(更新中)
2021-12-22 20:00:53 0 举报
AI智能生成
记录系统设计相关的知识(更新中)
作者其他创作
大纲/内容
1. 系统设计思路
①描述使用场景、约束和假设
谁会使用它?
他们会怎样使用它?
有多少用户?
系统的作用是什么?
系统的输入输出分别是什么?
我们希望处理多少数据?
我们希望每秒处理多少请求?
我们希望的读写比率?
②创造一个高层级的设计
画出主要的组件和连接?
证明你的想法
③设计核心组件
以设计一个 url 缩写服务为例
生成并存储一个完整的 url 的 hash
MD5 和 BASE62
Hash 碰撞
SQL 还是 NoSQL
数据库模型
将一个 hashed url 翻译成完整的 url
数据库查找
API 和面向对象设计
④扩展设计
负载均衡
水平扩展
缓存
数据库分片
2.性能与可扩展性
如果服务性能的增长与资源的增加是成比例的,服务就是可扩展的。通常,提高性能意味着服务于更多的工作单元,另一方面,当数据集增长时,同样也可以处理更大的工作单位。
如果系统有性能问题,对于单个用户来说是缓慢的
如果系统有可扩展性问题,单个用户较快但在高负载下会变慢
3.延迟与吞吐量
延迟是执行操作或运算结果所花费的时间
吞吐量是单位时间内(执行)此类操作或运算的数量
应该以可接受级延迟下最大吞吐量为目标
4.可用性与一致性
CAP理论
一致性(Consisency )
每次访问都能获得最新数据但可能会受到错误响应
可用性(Availability)
每次访问都能受到非错响应,但不保证获取到最新数据
分区容错性(Partition Tolerance)
在任意分区网络故障的情况下系统仍继续运行
CP——一致性和分区容错性
等待分区节点的响应可能会导致延时错误,如果你的业务需要原子读写,CP 是一个不错的选择
AP--可用性和分区容错性
响应节点上可用数据的最近版本可能并不是最新的。当分区解析完成后,写入(操作)可能需要一些时间来传播。如果业务需求允许最终一致性,或当有外部故障时要求系统继续运行,AP 是一个不错的选择。
一致性模式
弱一致性
在写入之后,访问可能看到,也可能看不到(写入数据)。尽力优化让其访问 最新数据。
这种方式可以 memcached 等系统中看到。弱一致性在 VoIP,视频聊天和实时多人游戏等真实用例中表现不错。
最终一致性
在写入之后,访问最终能看到写入数据(通常在数毫秒内)。数据被异步复制。
DNS 和 email 等系统使用的是此种方式。最终一致性在高可用性系统中效果不错。
强一致性
在写入之后,访问立即可见。数据被同步复制。
文件系统和关系型数据库中使用的是此种方式。强一致性在需要记录的系统中运作良好。
可用性模式
故障切换(fail-over)
工作到备用切换(Active-passive)
工作服务器发送周期信号给待机中的备用服务器。如果周期信号中断,备用服务器切换成工作服务器的 IP 地址并恢复服务
宕机时间取决于备用服务器处于“热”待机状态还是需要从“冷”待机状态进行启动。
工作到备用的故障切换也称为主从切换。
双工作切换(Active-active)
双方都在管控流量,在它们之间分散负载
如果是外网服务器,DNS 将需要对两方都了解。如果是内网服务器,应用程序将需要对两方都了解
双工作切换也称为主主切换。
复制(replication)
主从复制
主主复制
5.域名系统
定义
域名系统是把域名转换成 IP 地址
分类
NS 记录(域名服务)
指定解析域名或子域名的 DNS 服务器
MX 记录(邮件交换)
指定接受信息的邮件服务器
A 记录(地址)
指定域名对应的 IP 地址记录
CNAME (规范)
一个域名映射到另一个域名或 CNAME 记录或映射到一个 A 记录
某些 DNS 服务通过集中方式来规划路由流量
加权轮询调度
防止流量进入维护中的服务器
在不同大小集群间负载均衡
A/B 测试
基于延迟路由
基于地理位置路由
缺陷
虽说缓存可以减轻 DNS 延迟,但连接 DNS 服务器还是带来了轻微的延迟。
虽然它们通常由[政府,网络服务提供商和大公司管理,但 DNS 服务管理仍可能是复杂的。
DNS 服务最近遭受 DDoS 攻击,阻止不知道 Twitter IP 地址的用户访问 Twitter。
6.内容分发网络(CDN)
定义
CDN 是一个全球性的代理服务器分布式网络,它从靠近用户的位置提供内容。
通常,HTML/CSS/JS 、图片和视频等静态内容由 CDN 提供。
CDN 的 DNS 解析会告诉客户端连接哪台服务器
性能保障
从靠近用户的数据中心提供资源
通过 CDN ,你的服务器不必真的处理请求
CDN 推送(push)
当你的服务器上内容发生变动时,推送 CDN 接收新的内容
直接推送给 CDN 并重写 URL 地址以指向你的内容的 CDN 地址
内容只有在更改或新增时才推送,流量最小化,但储存最大化
CDN 拉取(pull)
当地一个用户请求该资源时,从服务器上拉取资源
存活时间(TTL)决定缓存多长时间。CDN 拉取方式最小化 CDN 上的储存空间,但如果过期文件并在实际更改之前被拉取,则会导致冗余的流量。
高流量站点使用 CDN 拉取效果不错,因为只有最近请求的内容保存在 CDN 中,流量才能更平衡地分散。
缺陷
CDN 成本可能因流量而异,可能在权衡之后你讲不会使用 CDN
如果在 TTL 过期之前更新内容,CDN 缓存内容可能会过时
CDN 需要更改静态内容的 URL 地址以指向 CDN
0 条评论
下一页
为你推荐
查看更多