如何做到高可用、高吞吐、高扩展性

如何做到高可用、高吞吐、高扩展性

本文转自 公众号 ByteByteGo,如有侵权,请联系,立即删除

我们经常需要设计具有高可用性、高可扩展性和高吞吐量的系统。它们的确切含义是什么?

下图是一份系统设计小抄,包含“三高”常见的解决方案。

img

01 高可用性

高可用意味着我们需要达到一个高水平的正常运行时间。我们通常将设计目标描述为 "3 个 9 " 或 “4 个 9”。“4 个九”,即 99.99% 的正常运行时间,意味着服务每天只能中断 8.64 秒。

要实现高可用性,我们需要在系统中设计冗余。有几种方法可以做到这一点:

  • Hot-Hot

两个实例接收相同的输入,并将输出发送到下游服务。如果其中一方宕机,另一方可以立即接替。由于两边都向下游发送输出,下游系统需要能够处理重复数据。

  • Hot-Warm

两个实例接收相同的输入,只有 Hot 端向下游服务发送输出。如果 Hot 端宕机, Warm 端将接替并开始向下游服务发送输出。

  • 单领导集群 (Single Leader)

一个领导实例从上游系统接收数据并复制到其他副本。

  • 无领导集群 (Leaderless)

这种集群中没有领导者。任何写入都会复制到其他实例。只要写入实例数加上读取实例数大于实例总数,我们就能获得有效数据。这被称为 quorum。

02 高吞吐量

这意味着服务需要在一段时间内处理大量请求。常用的指标是 QPS(每秒查询次数)或 TPS(每秒事务次数)。

为了实现高吞吐量,我们通常会在架构中添加缓存,以避免经过数据库或磁盘等较慢的 I/O 设备。我们还可以为计算密集型任务增加线程数量。但是,增加过多的线程会降低性能。因此,我们需要找出系统的瓶颈,提高系统的吞吐量。

我们还可以在系统中使用异步处理,以有效地单独隔离耗时耗资源的组件。

03 高扩展性

高扩展性意味着系统可以快速、轻松地扩展,以容纳更多的容量(横向可扩展性)或更多的功能(纵向可扩展性)。通常,我们通过观察响应时间来决定是否需要扩展系统。

要实现高度可扩展性,需要隔离每个服务的职责。为此,微服务被广泛采用。我们还利用服务注册和负载平衡器将请求路由到适当的实例。

  • 16
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
此文档一共两部分,此下载链接为第1部分。 第1章 绪论 1.1 等待的真相 1.2 瓶颈在哪里 1.3 增加带宽 1.4 减少网页中的HTTP请求 1.5 加快服务器脚本计算速度 1.6 使用动态内容缓存 1.7 使用数据缓存 1.8 将动态内容静态化 1.9 更换Web服务器软件 1.1 页面组件分离 1.11 合理部署服务器 1.12 使用负载均衡 1.13 优化数据库 1.14 考虑可扩展性 1.15 减少视觉等待 第2章 数据的网络传输 2.1 分层网络模型 2.2 带宽 2.3 响应时间 2.4 互联互通 第3章 服务器并发处理能力 3.1 吞吐率 3.2 CPU并发计算 3.3 系统调用 3.4 内存分配 3.5 持久连接 3.6 I/O模型 3.7 服务器并发策略 第4章 动态内容缓存 4.1 重复的开销 4.2 缓存与速度 4.3 页面缓存 4.4 局部无缓存 4.5 静态化内容 第5章 动态脚本加速 5.1 opcode缓存 5.2 解释器扩展模块 5.3 脚本跟踪与分析 第6章 浏览器缓存 6.1 别忘了浏览器 6.2 缓存协商 6.3 彻底消灭请求 第7章 Web服务器缓存 7.1 URL映射 7.2 缓存响应内容 7.3 缓存文件描述符 第8章 反向代理缓存 8.1 传统代理 8.2 何为反向 8.3 在反向代理上创建缓存 8.4 小心穿过代理 8.5 流量分配 第9章 Web组件分离 9.1 备受争议的分离 9.2 因材施教 9.3 拥有不同的域名 9.4 浏览器并发数 9.5 发挥各自的潜力 第10章 分布式缓存 10.1 数据库的前端缓存区 10.2 使用memcached 10.3 读操作缓存 10.4 写操作缓存 10.5 监控状态 10.6 缓存扩展 第11章 数据库性能优化 11.1 友好的状态报告 11.2 正确使用索引 11.3 锁定与等待 11.4 事务性表的性能 11.5 使用查询缓存 11.6 临时表 11.7 线程池 11.8 反范式化设计 11.9 放弃关系型数据库 第12章 Web负载均衡 12.1 一些思考 12.2 HTTP重定向 12.3 DNS负载均衡 12.4 反向代理负载均衡 12.5 IP负载均衡 12.6 直接路由 12.7 IP隧道 12.8 考虑可用性 第13章 共享文件系统 13.1 网络共享 13.2 NFS 13.3 局限性 第14章 内容分发和同步 14.1 复制 14.2 SSH 14.3 WebDAV 14.4 rsync 14.5 Hash 14.6 分发还是同步 14.7 反向代理 第15章 分布式文件系统 15.1 文件系统 15.2 存储节点和追踪器 15.3 MogileFS 第16章 数据库扩展 16.1 复制和分离 16.2 垂直分区 16.3 水平分区 第17章 分布式计算 17.1 异步计算 17.2 并行计算 第18章 性能监控 18.1 实时监控 18.2 监控代理 18.3 系统监控 18.4 服务监控 参考文献 索引

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xwhking

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值