高并发系统设计-系统的“三高“目标

目录

一、高并发

1.高并发相关指标

2.如何提高并发能力

二、高并发的目标

1.高性能

2.高可用

3.高扩展


一、高并发

高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。

1.高并发相关指标

  1. QPS (Queries Per Second) / RPS (Requests Per Second): 每秒查询/请求数,表示服务器在一秒内能够处理的请求数量。这是衡量系统处理能力的一个重要指标,适用于所有类型的请求-响应系统。

  2. TPS (Transactions Per Second): 每秒事务数,特指系统每秒能处理的事务数量,通常用于数据库操作或者业务逻辑中一系列操作的集合。

  3. 响应时间 (Response Time): 从客户端发出请求到接收到响应的总时间。它直接影响用户体验,响应时间越短,用户体验越好。

  4. 吞吐量 (Throughput): 单位时间内系统处理的请求数量或完成的任务数量(QPS和TPS都可视为吞吐量的一种特定形式)。吞吐量可以用来衡量系统的处理能力,但需要注意区分是瞬时吞吐量还是持续吞吐量。

  5. 并发用户数: 系统在同一时间内能够同时处理的用户数量,是评估系统并发处理能力的重要依据。高并发用户数意味着系统需要处理更多的并发请求。

  6. 错误率 (Error Rate): 在特定时间段内失败请求占总请求的比例。在高并发场景下,维持低错误率对于保证服务稳定性至关重要。

  7. 饱和度 (Saturation): 表示系统接近其最大处理能力的程度。当系统达到饱和状态时,再增加负载可能会导致响应时间显著增加或错误率上升。

  8. 带宽 (Bandwidth): 网络传输速率,单位时间内能够传输的数据量。在高并发场景下,足够的带宽是确保数据流畅传输的基础。

  9. PV (Page View) - 页面浏览量: PV是指网站被访问的页面总数。每当用户浏览一次网页,无论是否是同一个人或同一个IP地址,都会记录为一次PV。因此,如果一个用户在网站上浏览了多个页面,这将增加多个PV。PV是评价网站活跃度的重要指标,反映了网站内容被浏览的次数。  

  10. UV (Unique Visitor) - 独立访客: UV是指在一定统计周期内访问网站的独立用户数。通常通过 cookies 或者设备标识符来识别唯一的访问者,即便同一用户使用不同的设备或浏览器访问,也会被计为多个UV。UV更能准确反映实际的用户数量,是衡量网站用户基础规模的指标。

  11. IP (Internet Protocol) - IP访问: 基于IP地址统计的访问量,即来自不同IP地址的访问次数。IP作为统计标准在现代互联网分析中已较少直接应用。

2.如何提高并发能力

  • 垂直扩展(Scale Up)
  1. 增强单机硬件性能(优先):例如:增加CPU核数如32核,升级更好的网卡如万兆,升级更好的硬盘如SSD,扩充硬盘容量如2T,扩充系统内存如128G。
  2. 提升单机架构性能:例如:使用Cache来减少IO次数,使用异步来增加单服务吞吐量,使用无锁数据结构来减少响应时间。
  3. 总结:管是提升单机硬件性能,还是提升单机架构性能,都有一个致命的不足:单机性能总是有极限的。所以互联网分布式架构设计高并发终极解决方案还是水平扩展。
  • 水平扩展(Scale Out)
  1. 只要增加服务器数量,就能线性扩充系统性能。水平扩展对系统架构设计是有要求的,难点在于:如何在架构各层进行可水平扩展的设计。

二、高并发的目标

1.高性能

  1. 简单的说,高性能(High Performance)就是指程序处理速度快,所占内存少,cpu占用率低。
  2. 高并发和高性能是紧密相关的,提高应用的性能,是肯定可以提高系统的并发能力的。
  3. 应用性能优化的时候,对于计算密集型和IO密集型还是有很大差别,需要分开来考虑。
  4. 增加服务器资源(CPU、内存、服务器数量),绝大部分时候是可以提高应用的并发能力和性能 (前提是应用能够支持多任务并行计算,多服务器分布式计算才行),但也是要避免其中的一些问题,才可以更好的更有效率的利用服务器资源。

提高性能的注意事项

  1. 避免因为IO阻塞让CPU闲置,导致CPU的浪费。
  2. 避免多线程间增加锁来保证同步,导致并行系统串行化。
  3. 免创建、销毁、维护太多进程、线程,导致操作系统浪费资源在调度上。
  4. 避免分布式系统中多服务器的关联,比如:依赖同一个mysql,程序逻辑中使用分布式锁,导致瓶颈在mysql,分布式又变成串行化运算。

2.高可用

高可用性(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性(一直都能用)。

高可用性是指系统具有较高的无故障运行能力,可用性 = 平均故障时间 / 系统总运行时间,一般使用几个 9 来描述系统的可用性。 

高可用注意事项

  • 避免单点:使用单个服务器,一旦该服务器意外宕机,将导致服务不可用
  • 使用“集群”,一台服务器挂了,还有其他后备服务器能够顶上

3.高扩展

表示系统的扩展能力,流量高峰时能否在短时间内完成扩容,更平稳地承接峰值流量,比如双11活动、明星离婚等热点事件。

面对突发流量,不可能临时改造架构,最快的方式就是增加机器来线性提高系统的处理能力。

对于业务集群或者基础组件来说,扩展性 = 性能提升比例 / 机器增加比例,理想的扩展能力是:资源增加几倍,性能提升几倍。通常来说,扩展能力要维持在 70%以上。

但是从高并发系统的整体架构角度来看,扩展的目标不仅仅是把服务设计成无状态就行了,因为当流量增加 10 倍,业务服务可以快速扩容 10 倍,但是数据库可能就成为了新的瓶颈。

像 MySQL 这种有状态的存储服务通常是扩展的技术难点,如果架构上没提前做好规划(垂直和水平拆分),就会涉及到大量数据的迁移。

我们需要站在整体架构的角度,而不仅仅是业务服务器的角度来考虑系统的扩展性 。所以说,数据库、缓存、依赖的第三方、负载均衡、交换机带宽等等都是系统扩展时需要考虑的因素。我们要知 道系统并发到了某一个量级之后,哪一个因素会成为我们的瓶颈点,从而针对性地进行扩展。

 

相关推荐

  1. 3.架构设计系列并发系统设计目标

    2024-05-14 11:32:08       30 阅读
  2. [并发] - 2. 金融交易系统并发架构

    2024-05-14 11:32:08       25 阅读
  3. 网约车系统并发设计与优化:开篇

    2024-05-14 11:32:08       28 阅读

最近更新

  1. .Net Core WebAPI参数的传递方式

    2024-05-14 11:32:08       0 阅读
  2. QT--气泡框的实现

    2024-05-14 11:32:08       1 阅读
  3. LeetCode 968.监控二叉树 (hard)

    2024-05-14 11:32:08       0 阅读
  4. leetcode热题100.完全平方数(动态规划进阶)

    2024-05-14 11:32:08       0 阅读
  5. leetcode328-Odd Even Linked List

    2024-05-14 11:32:08       0 阅读
  6. C 语言设计模式(结构型)

    2024-05-14 11:32:08       0 阅读
  7. v-if 与 v-show(vue3条件渲染)

    2024-05-14 11:32:08       0 阅读
  8. kafka防止消息丢失配置

    2024-05-14 11:32:08       0 阅读

热门阅读

  1. aws s3

    aws s3

    2024-05-14 11:32:08      3 阅读
  2. python 基础(笔记)

    2024-05-14 11:32:08       5 阅读
  3. Python3 笔记:分支结构

    2024-05-14 11:32:08       4 阅读
  4. spring基于XML的声明式事务控制

    2024-05-14 11:32:08       2 阅读
  5. catti三笔真题解读-英译汉(2012上)①

    2024-05-14 11:32:08       4 阅读
  6. 使用Django构建高效的Web应用

    2024-05-14 11:32:08       2 阅读