文档

高效性能

更新时间:

性能是业务系统的一个重要指标,如果性能无法达到用户预期,会导致用户流失,影响业务发展。任何架构设计都必须考虑可能带来的性能问题。在应用架构设计过程中,需要确定应用的性能目标,并遵循高效性能设计准则进行设计,通过压测的方式验证设计目标并做好监控,持续优化,最终实现预定的性能目标。

架构设计

设计准则

在云上,有以下性能相关的设计原则:

  • 根据业务性能目标选择合适的资源类型。

  • 设计可伸缩、可扩展的云架构。

  • 通过性能压测验证架构设计。

  • 对生产环境进行性能监控。

评估合适的云服务

充分了解自身业务特征以及指标,熟悉架构主要组件所涉及云产品方案类型,有利于业务各工作负载在不同的产品方案中受益,并使系统架构得以持续优化。在阿里云上,无论是计算、存储、网络还是数据库等,都提供了丰富的产品矩阵供架构评估时选择。

计算

首先,针对各业务系统和工作负载,评估使用合适的计算方案。

阿里云产品

主要特征

业务场景

云服务器(ECS)

运行于物理机之上、满足VM层面系统设置需求、丰富的类型与规格

服务器迁移、整体应用环境、定制化镜像

容器服务Kubernetes版(ACK)、弹性容器实例(ECI)

运行于云服务器之上、轻量化、快速部署、可移植、可扩展

微服务、混合云部署

函数计算(FC)

并发能力强、单个函数计算能力较弱且限制较多

事件驱动的应用

其次,需要考虑各计算方案涉及云产品的指标,如单台服务器网络带宽可达10Gbps等,并将识别和收集的业务系统指标与之关联。

最后,结合指标的跟踪分析,综合考虑工作负载与CPU、内存、磁盘以及网络使用率的关联性,用以选择合适的类型与内存核数比,满足最佳性能的同时优化成本效益。

存储

云相对传统自建数据中心,有更丰富的存储业务场景以及与之相匹配的存储服务,建议针对业务场景以及对应工作负载的存储需求进行梳理,并明确核心存储指标,用以评估符合需求且合适的解决方案。常规存储方案会重点从块存储、对象存储以及文件存储这三类来进行评估:

阿里云服务

主要特征

常见业务场景

块存储 EBS

高性能、低延迟,99.9999999%数据可靠性

应用程序、OLTP数据库、NoSQL数据库等I/O密集型的高性能、低时延业务

对象存储 OSS

海量、高吞吐、安全、低成本,多种访问方式,99.999999999999%数据可靠性

大规模数据分层存储、数据备份、网站托管、动静资源分离、CDN加速

文件存储 NAS/CPFS/HDFS

高吞吐、低延迟,99.999999999%数据可靠性

科学计算、容器共享访问与数据持久化、企业在线生产应用数据存储

在业务场景、功能和架构的基础上,建议将业务系统数据转化为存储性能指标以便进一步评估存储产品和类型选择,主要的存储指标包括吞吐量、IOPS、I/O延迟、访问频率、数据规模、数据增长率、数据可靠性等,必要的基准测试以及持续的性能数据收集将有助于我们获取和分析这些指标。

网络

选择合适的网络产品组合,往往能在不进行业务逻辑改造的前提下,高效实现性能优化。

阿里云服务

主要特征

常见业务场景

云企业网 CEN

超大规模、灵活组网、智能运维

混合云组网

全球加速 GA

高可用、高安全、易部署,高质量加速

游戏加速、企业应用加速、互联网应用加速

负载均衡 CLB/NLB/ALB

超高性能、自动弹性,99.995%高可靠性,转发功能丰富

按需业务转发、云原生应用

NAT网关

高性能、高可靠、易运维

统一公网出口

Anycast弹性公网IP

加速范围广、低延时、易部署、高可用

网站加速、互联网应用加速

相较于计算和存储,网络性能受更多方面限制,一般来说,需要重点关注时延、丢包率、带宽、吞吐量、每秒请求数、并发连接数、新建连接数等。对网络性能的分析意味着对整个请求整个链路的分析,压测和持续的监控有利于明确工作负载的核心指标并定位链路瓶颈,具体可以参考性能测试一节。

数据库

数据库的选型是一项专业性很强的工作,通常除了性能外还有很多考虑方面,此处不进行展开阐述,需要关注的是数据库产品组合在高性能架构设计上的合理使用,如很多业务场景利用Redis这类缓存数据库实现性能的显著提升。

资源伸缩和系统扩展

当系统需要面对大量用户的高并发访问和存储海量数据,通过集群的方式将计算资源和存储资源等组成一个整体提供服务,在需要的场景下,可以及时通过调整计算和存储资源来缓解高并发带来的计算和存储压力,从而实现在访问峰值场景下可以向用户有效提供稳定的服务,在访问低谷的时期又可以释放不必要的资源或保持系统的低位运行来节省IT支出。

云服务自动扩缩

在阿里云上实现计算资源 ECS 和 ECI 实例的自动伸缩能力依赖的是阿里云弹性伸缩产品(ESS),也称为Auto Scaling,是指根据业务需求和策略自动调整计算能力(即实例数量)的服务。弹性伸缩具有广泛的应用场景,不仅适合业务量不断波动的应用程序,同时也适合业务量稳定的应用程序。主要应用场景如下:

  • 无规律的业务量波动:业务量波动无规律,访问量突增和回落的具体时间难以预测,通过手动调整实例很难做到及时性,而且调整数量也不确定。此时可以利用弹性伸缩的报警任务,由阿里云自动根据CPU使用率等衡量指标进行弹性伸缩。

  • 有规律的业务量波动:波动有规律,但是每天手动调整计算资源浪费人力和时间成本。此时可以利用弹性伸缩的定时任务,由阿里云定时自动进行弹性伸缩。一般需要设置两个任务,一个在流量高峰到来之前扩容,另外一个在流量高峰结束后缩容。

  • 无明显的业务量波动:业务现有计算资源突然出现故障,导致业务受到影响且很难及时进行故障修复。此时可以利用弹性伸缩的高可用优势,开启健康检查模式。阿里云会自动检查实例的健康状态,当发现存在实例不健康时,自动增加实例替换不健康的实例,确保故障的计算资源及时得到修复。

  • 混合型的业务场景:根据业务场景灵活组合以上功能,从而在使用弹性伸缩的时候获得更丰富灵活的使用体验。

一般来说讨论伸缩都是水平伸缩实现快速扩容,不过在特殊场景下也需要纵向的垂直伸缩。垂直伸缩能够调整按量付费实例的实例规格(如vCPU和内存)。

容器自动扩缩

针对使用云原生技术部署的业务应用,阿里云容器服务 ACK 也提供了弹性伸缩的能力。典型的场景包含在线业务弹性、大规模计算训练、深度学习GPU或共享GPU的训练与推理、定时周期性负载变化等。弹性伸缩分为两个维度:

  • 调度层弹性,主要是负责修改负载的调度容量变化。例如,HPA是典型的调度层弹性组件,通过HPA可以调整应用的副本数,调整的副本数会改变当前负载占用的调度容量,从而实现调度层的伸缩。

  • 资源层弹性,主要是集群的容量规划不能满足集群调度容量时,会通过弹出ECS或ECI等资源的方式进行调度容量的补充。

两层的弹性组件与能力可以分开使用,也可以结合在一起使用,并且两者之间是通过调度层面的容量状态进行解耦。

Serverless

对于用户来说,之前无论是云服务的伸缩还是容器的伸缩都还是需要用户一定程度上参与基础设施层面的资源管理和维护。而Serverless技术则无需用户关心基础设施层面的扩容或者伸缩。Serverless相关的产品具有弹性快(毫秒级扩容)、成本优(按实际使用量付费)、开发效率高(不用关心底层云资源)的特点。

挑战和注意事项

在架构设计过程中,需要注意以下事项:

  • 业务优先:架构的性能规划始终是为业务服务的,需要依赖真实的业务需求展开,严谨的业务评估和预测是十分必要的,不能一味追求高性能。

  • 性能的权衡:设计业务系统时,平衡性能优化与其他制约因素是一个重点,主要因素如成本、稳定性、安全、可运维性等。

  • 持续的监控与性能优化:通常来说,高性能系统建设与性能优化都不是一蹴而就的事情,而是随着业务运行不断迭代和优化提升,这也是业务能持续健康运行的重要保障,需要纳入日常IT治理的范畴。

  • 测试左移:在更早的阶段、更小的业务场景进行压测,以便及时对产品规格、组合进行评估和调整,最大限度的降低整体部署完成后压测调优的复杂度。

性能测试

性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。性能测试主要的应用场景是:

  • 容量规划:通过压测推算生产环境所能承载的流量,以及需要部署的资源数量。

  • 持续监测:作为性能监控的手段,当系统变更后验证应用是否仍旧满足性能基线要求。

  • 规格选型:通过性能测试来验证所选云资源规格是否满足性能要求。

要达成精准衡量业务承接能力的目标,业务压测就需要做到5个一样:

  • 一样的线上环境。

  • 一样的用户规模。

  • 一样的业务场景。

  • 一样的业务量级。

  • 一样的流量来源。

做到5个“一样”,让系统提前进行“模拟考”,从而达到精准衡量业务模型实际处理能力的目标,便于相应的性能提升、限流降级方案准备等配套工作。

业务压测需要有以下五大核心要素:

  • 压测环境:主要分为全新生产环境、等比性能环境和生产环境。

    • 全新生产环境适用于还未上线的业务,压测效果较好。

    • 等比性能环境是指在生产环境单独划分区域,准备等比的容量,共享接入层的性能测试环境。这种方案缺点是成本较高,优点是方案简单、风险可控,容量规划较为精准。

    • 生产环境是指直接在业务线上环境进行压测,这种方式尽量在业务低峰期进行从而避免影响生产的业务。

  • 压测基础数据:基础数据基本分为两种方式,一种是数据库层面不需要做改造,直接基于基础表里的测试账户(相关的数据完整性也要具备)进行,压测之后将相关的测试产生的流水数据清除(清除的方式可以固化SQL脚本或者落在系统上);另一种就是压测流量单独打标(如单独定义的Header),然后业务处理过程中识别这个标并传递下去,包括异步消息和中间件,最终落到数据库的影子表或者影子库中。

  • 压测流量(模型、数据):数据量在性能测试中起到非常重要的作用。 使用不同量级的数据量进行压测,结果可能会大相径庭。使用性能测试环境时,需要保持跟生产上相同级别的数据量。如果采用在生产环境中插入测试账户的方式,可以一定程度解决环境真实性和基础数据量同量级的问题。

  • 流量发起、掌控:在相应的环境、数据、流量准备完毕后,即可发起压测流量,对压测环境进行测试。在压测过程中,需要能够对流量进行实时掌控,动态调整流量大小,模拟真实的流量波峰场景,提升压测准确性。

  • 问题定位:瓶颈定位的目的是对系统中存在的瓶颈点进行分析,为调优做准备。系统的性能瓶颈点主要分布在操作系统资源、中间件参数配置、数据库问题以及应用算法上,通过进行针对性的调优,有利于系统性能的提升。在云上,可以配合APM工具(如阿里云应用实时监控服务ARMS)进行中间件、数据库、应用层面的问题定位。针对数据库中的慢查询等性能薄弱环节,可以结合数据库审计产品找出原因,并提供优化建议。

在阿里云上,推荐使用性能测试PTS(Performance Testing Service)进行云上应用的压测。在性能测试过程中,建议遵循以下最佳实践:

  • 通过多轮测试+定期测试持续调优。

  • 通过负载测试+压力测试确定常态容量和容量上限。

  • 实施自动化测试。

性能监控

伴随着突发流量、系统变更或代码腐化等因素,性能退化随时会发生。性能退化不仅会损害用户体验或服务可用性,还可能决定着业务的成与败。针对性能退化的防治,建议“预防为主、防治结合”。在架构设计、代码编写、测试验证等阶段,提前完成性能优化,规避常见的性能问题。此外,在性能退化发生期间,能够及时识别性能风险,快速定位性能瓶颈,及时修复解决。

无论是提前预防,还是事后治理,都需要一套精准、实时的性能监控体系,帮助研发人员准确、快速的识别性能瓶颈点与影响面,针对性的采取下一步措施。越是复杂、庞大的IT系统,越需要建立完备、好用的性能监控体系,尽早介入,快速定位,降低危害。

狭义上的性能监控是指请求响应时延(耗时)的度量监控,简单地说,就是统计请求的处理到底花费了多长时间。而广义上的性能监控涵盖了可以反映性能问题的各类指标或数据,包括但不限于超时错误数、缓存命中率、FullGC 次数与耗时、CPU 使用率、平均负载等等。

性能监控的对象可以是微服务应用或接口,也可以是用户终端,又或是网关、数据库、容器基础设施等等。不同监控对象的性能度量指标略有差异。

常见的性能监控工具有 APM、Tracing、Logs 等,在阿里云上的性能监控推荐以下方案:

  • 构建一体化性能监控告警平台。通过 ARMS + Prometheus + Grafana 构建可观测基础设施,可参考卓越运营支柱中可观测相关章节内容。

  • 端到端全链路追踪。ARMS 链路追踪Tracing Analysis 为分布式应用的开发者提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等工具,可以帮助开发者快速分析和诊断分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效率。同时兼容 OpenTelemetry 标准。

  • 跨平台日志查询。在链路追踪的基础上,结合存储在 SLS 中的应用日志,方便快速查询问题上下文,提升问题定位效率。

性能优化

识别出应用中相关性能问题,还需要针对性的进行改进。以下是针对用云过程中部分常见的性能优化手段。

计算资源优化

  • 基于云基础设施的操作系统优化:通过优化系统内核参数提升运行环境性能。 在阿里云上可以选择Alibaba Cloud Linux操作系统镜像,该镜像兼容RHEL/CentOS生态,针对云基础设施进行了深度优化,能够提升系统的启动速度、运行时的性能。同时经过海量阿里巴巴和阿里云的产品打磨,提供优良的稳定性体验。

  • 针对特定业务场景性能优化的 ECS 实例规格族选项:ECS 产品序列包含通用计算、异构计算、高性能计算三大类,支持包括各类垂直场景增强型实例,比如网络增强型、存储增强型、内存增强型、安全增强型、大数据型、高主频型、异构计算实例等,对于特定的高性能场景,选择合适的实例规格族。

  • 合理利用弹性资源:云上计算类产品提供灵活的弹性功能和策略,对无规律的业务量波动和有规律的业务量波动性能要求都能完成较好的适配。针对应用部署环境,弹性资源的类型主要包括弹性伸缩、容器服务 ACK 的弹性伸缩、函数计算。

网络优化

从网络层面,阿里云产品基于基础设施能力为用户提供优质的BGP带宽和全球传输网络。随着云上应用场景的多样性趋势和复杂度增加,需要从如下几个方面考虑网络优化方案:

  • 全球化部署优化:用户业务的全球化布局,带来了基础设施的全球化部署需求。阿里云为全球部署的场景提供了云企业网CEN(Cloud Enterprise Network)、全球加速GA(Global Accelerator)。

  • 网络路径优化:

    • 在公网场景中,如海外流量在公网回中国内地的场景,因为跨境公网质量差导致了拥塞丢包,同时因为无直连回国公网线路导致了延迟高。阿里云提供BGP(多线)精品线路EIP,可以提高国际业务访问质量。

    • 在就近访问场景中,可以利用CDN将源站资源缓存到阿里云遍布全球的加速节点,当终端用户请求访问和获取源站资源时无需回源,可就近获取CDN节点上已经缓存的资源,提高资源访问速度,同时分担源站压力。

    • 在专线回源场景中,阿里云提供了诸如GA加速IP和Anycast EIP这类产品,让用户及用户的终端能通过公网 IP 就近接入阿里云的POP点,通过阿里云的专线来进行源站回源,解决了跨国互联网线路可能出现的延迟和丢包问题。

  • 混合云网络优化:当用户需要打通本地数据中心 IDC、总部、分支、移动终端等和云上专有网络 VPC 来实现私网互访时,可以根据所需要的性能要求、网络链路质量等指标选择高速通道、VPN和智能接入网关等几种解决方案。

数据库优化

在使用数据库的过程中,可能面临的性能问题有:慢SQL、活跃线程高导致响应变慢以及内存、磁盘、I/O等引起的问题。导致这些问题的原因可能很多,总体上需要根据业务实际情况、代码层面、数据表设计等方面结合起来进行优化。在阿里云上,可以结合数据库自治服务DAS(Database Autonomy Service),利用其中的一键诊断、锁分析、慢SQL、自动SQL限流等功能,更好地洞察和优化数据库性能。

  • 本页导读
文档反馈