高性能、高并发、高可用基础

高并发系统设计三大目标:高性能、高并发、高可用

高性能:

为什么需要高性能?

性能体现了系统的并行处理能力,在有限的硬件投入下,提高性能意味着节省成本。同时,性能也反映了用户体验,响应时间分别是100毫秒和1秒,给用户的感受是完全不同的。

高性能评估方式?

性能指标:

  • 平均响应时间:最常用,但是缺陷很明显,对于慢请求不敏感。比如1万次请求,其中9900次是1ms,100次是100ms,则平均响应时间为1.99ms,虽然平均耗时仅增加了0.99ms,但是1%请求的响应时间已经增加了100倍。

  • TP90、TP99等分位值:将响应时间按照从小到大排序,TP90表示排在第90分位的响应时间, 分位值越大,对慢请求越敏感。

  • 吞吐量:和响应时间呈反比,比如响应时间是1ms,则吞吐量为每秒1000次。

可用性指标:

  • 可用性 = 正常运行时间 / 系统总运行时间

高性能设计手段

纵向扩展和横向扩展:提升单机的处理能力,提高并发处理能力。

天下武功,唯快不破”。性能是系统设计成功与否的关键,实现高性能也是对程序员个人能力的挑战。不过在了解实现高性能的方法之前,我们先明确一下性能优化的原则。首先,性能优化一定不能盲目,一定是问题导向的。脱离了问题,盲目地提早优化会增加系统的复杂度,浪费开发人员的时间,也因为某些优化可能会对业务上有些折中的考虑,所以也会损伤业务。

其次,性能优化也遵循“八二原则”,即你可以用 20% 的精力解决 80% 的性能问题。所以我们在优化过程中一定要抓住主要矛盾,优先优化主要的性能瓶颈点。再次,性能优化也要有数据支撑。在优化过程中,你要时刻了解你的优化让响应时间减少了多少,提升了多少的吞吐量。

最后,性能优化的过程是持续的。高并发的系统通常是业务逻辑相对复杂的系统,那么在这类系统中出现的性能问题通常也会有多方面的原因。因此,我们在做性能优化的时候要明确目标,比方说,支撑每秒 1 万次请求的吞吐量下响应时间在 10ms,那么我们就需要持续不断地寻找性能瓶颈,制定优化方案,直到达到目标为止。

高可用:

为什么需要高可用?

软件

  • 软件总是有Bug的
  • 软件总会有性能极限的
  • 软件交互相互影响

硬件

  • 硬件总是有故障的
  • 硬件的生命周期
  • 硬件的网络划分问题

高可用评估方式?

传统

  • 一段时间的停机时间时间占比:停机时间/总时间

科学

  • 一段时间的停机影响请求量占比:停机时间影响请求量/总请求量

高可用设计手段

以微服务为例子:必须做到一下几点
1、服务冗余(无状态化)

  • 当系统发生故障时,冗余配置的部件介入并承担故障部件的工作,由此减少系统的故障时间
  • 当前资源足够提供一个服务的情况下多给点资源以防突发情况

2、幂等设计(负载均衡)

  • 实现数据一致性和事务完整性的重要手段
  • 负载均衡设备,实现流量分发。 负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。

3、超时机制(异步化设计)

  • 基于接口异步响应,常用在第三方对接流程
  • 基于消息生产和消费模式,解耦复杂流程
  • 基于发布和订阅的广播模式,常见系统通知

4、数据复制/缓存/Sharding(服务限流降级熔断)

  • 服务限流
    概述:当系统的处理能力不能应对外部请求的突增流量时,为了不让系统奔溃,必须采取限流的措施。

  • 实现技术:Hystrix,Sentinel

  • 服务降级
    概述:当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。

  • 实现技术:Hystrix,Dubbo(dubbo-admin,mork,@Reference)

  • 服务熔断
    概述:服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。

  • 实现技术:Hystrix

5、架构拆分、服务治理

  • 业务场景、系统水平拆分
  • 应用场景、功能垂直拆分

高并发:

为什么需要高并发?

随着流量变大,会遇到各种各样的技术问题,比如接口响应超时、CPU load升高、GC频繁、死锁、大数据量存储等等,这些问题能推动我们在技术深度上不断精进。

高并发评估方式?

1、系统性能指标:

  • 提高吞吐量
  • 缩短响应延迟

2、性能优化指标:

  • 缩短响应时间
  • 提高并发数&提高吞吐量
  • 让系统长期处于一个合理的时间节点

高并发设计手段

1、优化手段:

  • 当系统响应时间是瓶颈的时候,考虑空间换时间
  • 当系统数据大小是瓶颈的时候,考虑时间换空间
  • 最重要的是,找到系统的瓶颈

2、优化层次:
- 架构设计层次

  • 分布式系统微服务化
  • 分库分表、读写分离、数据分片
  • 无状态化设计、水平扩展
  • 调用链路梳理、热点数据尽量靠近用户
  • 分布式cache、多级多类型缓存
  • 对系统容量进行评估、规划
  • 提前拒绝、保证柔性可用

- 算法逻辑层次

  • 使用更高效的算法替换现有算法
  • 使用增量式算法
  • 进行并发和锁的优化
  • 当系统时间是瓶颈,采用空间换时间算法策略
  • 当系统空间容量是瓶颈,采用时间换空间算法策略
  • 并行执行、降低响应时间
  • 异步执行、业务流程解耦、提供稳定性和降低响应时间

- 代码优化层次
此处省略···

最后,安利一款阿里云产品
AHAS:应用高可用服务

可轻松抵御流量洪峰冲击,打造超高并发下稳定运行的系统环境。实现流量分发,系统扩缩容,数据库稳定性与线性扩容能力;通过解耦应用与缓存数据降低核心应用负载;解决系统实时监控与流控问题。

image.png

结尾:
希望这篇文章能带给你关于高并发更全面的认识,如果你也有可借鉴的经验和深入的思考,欢迎评论区留言讨论。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容