架构修炼-10:高并发设计

2023-11-04

一、如何衡量高并发的系统性能

1.吞吐量Throughput:

2.响应延迟Response Delay:

二、性能优化目标

1.缩短响应时间

2.提高系统并发数(提升吞吐量)

3.系统处理合理状态(机器利用率)

随着系统压力增加(X坐标:在线业务人数),

Y坐标:绿色机器利用率,紫色并发数,蓝色:响应时长

响应时间和并发数据在左边线位置达到优化目标,之后利用率60%提升非常缓慢,当超过右侧线是,系统性能急剧下降。

三、性能优化手段

1.空间换时间:当系统处理时间是瓶颈时使用。

例如:增加缓存,复用计算结果,降低时间开销,因为CPU的时间较内存容量而言更加昂贵。

2.时间换空间:当数据大小是瓶颈时使用。

例如:a.网络传输开启gzip压缩,b.页面根据版本号只下载更新数据

3.找到系统瓶颈:分析业务流程,找到关键路径,分解优化

例如:调用了多少RPC接口,载入多少数据,使用什么算法,非核心流程是否异步化,没有依赖逻辑是否并行化

四、性能优化层次

原则:从整体到细节,从全局视角到局部视角

1.架构设计层次优化:如何拆分系统;如何使各个部分负责更加均衡;充分发挥硬件性能优势;减少系统内部开销

a.系统微服务化

垂直拆分:网关层,业务逻辑层,数据访问层,判断实现需要加入MQ改造为异步化系统

水平拆分:先完成服务无状态化改造,进行水平扩展

b.调用链梳理,热点数据靠近用户

c.分布式cache,多级多类型缓存

d.提前拒绝,保证柔性可用

e.容量规划

f.分库分表,读写分离,数据分片

 

2.算法逻辑层次优化

a.关注算法是否高效,逻辑优化,空间时间优化,任务并行,无锁数据结构

b.空间换时间:ThreadLocal

c.时间换空间:采用压缩算法数据,增加逻辑计算,只传输结果减少数据传输

 

3.代码层次优化

a.代码实现逻辑是否合理

b.对象创建多少

c.循环是否高效

d.cache是否复用

e.是否重用计算结果

 

四、实战举例

朋友圈Feed系统

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

架构修炼-10:高并发设计 的相关文章

  • 在nodejs服务器的内存中存储

    似乎有很多有前途的软件包 但没有明确建议哪个是最快的 可扩展的 哪个是内存效率更高的 npm 安装memoizee https www npmjs com package memoizee npm 安装内存缓存 https www npmj
  • Redis 块推送直到列表有空位

    我正在寻找类似的东西BLPUSH该命令将阻塞 直到列表的长度低于指定值max size 目的是防止生产者运行速度快于消费者时列表无限增长 功能与 python 非常相似Queue put https docs python org 3 li
  • System.Web.Caching 与企业库缓存块

    对于将在 Web 应用程序和富客户端应用程序中使用的 NET 组件 似乎有两个明显的缓存选项 System Web Caching 或 Ent 库 缓存块 你用什么 Why 系统 Web 缓存 http msdn microsoft com
  • redis集群不断打印日志WSA_IO_PENDING

    当我启动redis集群的所有redis服务器时 所有这些服务器不断打印类似WSA IO PENDING clusterWriteDone的日志 9956 03 Feb 18 17 25 044 WSA IO PENDING writing
  • WSL Redis 遇到系统尚未使用 systemd 作为 init 系统(PID 1)启动。无法操作[已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试遵循本文中讨论的 Redis 安装过程article https www digitalocean com community
  • 是否有可嵌入的 Java 替代 Redis?

    根据这个线程 https stackoverflow com questions 3047010 best redis library for java 如果我想从Java中使用Redis Jedis是最好的选择 然而 我想知道是否有任何库
  • 使 ASP.NET MVC 应用程序为 Web Farm 做好准备

    使 ASP NET MVC 应用程序 Web 场做好准备的最有效方法是什么 最重要的是共享当前用户的信息 上下文 和 不太重要 缓存的对象 例如查找项目 州 街道类型 县等 我听说过 读过 MemCache 但还没有看到关于如何实现和测试它
  • Redis hash写入速度非常慢

    我面临一个非常奇怪的问题 使用 Redis 时 我的写入速度非常糟糕 在理想的情况下 写入速度应该接近 RAM 上的写入速度 这是我的基准 package redisbenchmark import redis clients jedis
  • Caffeine Expiry 中如何设置多个过期标准?

    我正在使用 Caffeine v2 8 5 我想创建一个具有可变到期时间的缓存 基于 值的创建 更新以及 该值的最后一次访问 读取 无论先发生什么都应该触发该条目的删除 缓存将成为三层值解析的一部分 The key is present i
  • 如何测试我的 Redis 缓存是否正常工作?

    我已经安装了 django redis cache 和 redis py 我遵循了 Django 的缓存文档 据我所知 以下设置就是我所需要的 但我如何判断它是否正常工作 设置 py CACHES default BACKEND redis
  • 在 Kubernetes/Openshift 中将客户端-服务器流量保持在同一区域的最佳方法?

    我们运行兼容 Kubernetes OKD 3 11 的本地 私有云集群 其中后端应用程序与用作缓存和 K V 存储的低延迟 Redis 数据库进行通信 新的架构设计将在两个地理上分布的数据中心 区域 之间平均划分工作节点 我们可以假设节点
  • ruby 运算符 ||= 智能吗?

    我有一个关于 ruby 中 语句的问题 这对我特别感兴趣 因为我正在使用它写入内存缓存 我想知道的是 首先检查接收器 看看它在调用该设置器之前是否已设置 或者它实际上是一个别名x x y 对于普通变量来说这并不重要 但使用类似以下内容 CA
  • Redis SYNC 套接字上的错误情况:连接被拒绝

    在我的 django 应用程序中使用 celery 和 redis 一切都工作正常 直到我遇到了问题 redis 文件的位置已更改 redis 无法访问它们 经过查找 原来这是由于网络随机攻击造成的 需要添加confg 我添加文件后 一段时
  • socket.io 广播功能 & Redis pub/sub 架构

    如果有人能帮助我解决一个小疑问 我将不胜感激 使用socket io广播功能和在Redis上使用pub sub设计架构有什么区别 例如 在另一个示例中 node js 服务器正在侦听 socket io 针对 键 模型 todo 和值 数据
  • 有没有办法在 ruby​​ 中重新定义 []=+

    我正在尝试编写一个简单的 DSL 针对 Redis 并且我想自己定义 I have def key val redis zadd name val key end 我想定义 def key val redis zincrby name va
  • Node Js:Redis 作业在完成其任务后未完成

    希望你们做得很好 我在我的 Nodejs 项目中实现了 BullMQ Bull 的下一个主要版本 来安排发送电子邮件的作业 例如 发送忘记密码请求的电子邮件 所以 我编写了如下所示的代码 用户服务 await resetPasswordJo
  • 为什么 Redis TimeSeries 不捕获聚合中的最后一个元素?

    我试图了解 Redis 的时间序列规则创建的工作原理 但我很困惑为什么 Redis 会忽略聚合中的最后一项 并想知道这是否是预期的行为 我在中创建了示例代码redis cli为了显示 127 0 0 1 6379 gt FLUSHALL O
  • 2 个具有共享 Redis 依赖的 Helm Chart

    目前 我有 2 个 Helm Charts Chart A 和 Chart B Chart A 和 Chart B 对 Redis 实例具有相同的依赖关系 如Chart yaml file dependencies name redis v
  • StackExchange.Redis的正确使用方法

    这个想法是使用更少的连接和更好的性能 连接会随时过期吗 对于另一个问题 redis GetDatabase 打开新连接 private static ConnectionMultiplexer redis private static ID
  • 如何在Redis中只保存一个数据库?

    我是 Redis 新手 有一个与备份相关的问题 目前 我有一个实例在 Windows 服务器上运行 在这个实例中 我当前有一项 工作 将数据存储在一个数据库中 我不想备份这些数据 我必须创造一份新工作 我的第一个想法是将数据存储在另一个数据

随机推荐