SAE弹性伸缩可以实现在秒级流量波峰到来时应用实例自动扩容,波峰结束后自动缩容,保障应用平稳运行,具有高可靠性、免运维、低成本的特点。以应对电商大促为例,您可以通过部署应用、配置弹性规则、实时监控并调整策略,以及执行后续的运维优化的全流程,确保平台高效稳定响应用户的需求。
弹性伸缩流程图
SAE弹性伸缩场景的实践全流程如下图所示。
使用限制
仅适用于微服务应用。
准备工作
配置应用健康检查:确保应用在弹性伸缩过程中的整体可用性,仅在启动、运行并且准备完成时才接收流量。具体操作,请参见设置健康检查。
配置应用生命周期管理:确保缩容时按照预期实现应用优雅下线,配置停止前处理(PreStop设置)。具体操作,请参见设置应用生命周期管理。
采用指数重试机制:为避免因弹性不及时、应用启动不及时或应用没有优雅上下线导致服务调用异常,采用Java指数重试机制进行服务调用。
优化应用启动速度。
软件包优化:优化应用启动时间,降低因类加载、缓存等外部因素对应用启动时长造成的影响。
镜像优化:精简镜像大小,减少创建实例时镜像拉取耗时,可以借助开源工具分析并精简镜像层信息。
Java应用启动优化:在SAE上创建应用时,选择Dragonwell 11环境能够开启应用加速功能。
配置弹性规则
配置弹性伸缩指标
SAE支持基础监控、应用监控多指标组合配置,您可以根据当前应用的属性(CPU敏感、内存敏感或IO敏感)灵活配置。
您可以查看基础监控和应用监控对应指标的历史数据( 例如过去6小时、12小时、1天或7天峰值,P95或P99数值)并预估指标目标值,借助PTS等压测工具进行压测,了解应用可以应对的并发请求数量、需要的CPU和内存数量,以及高负载状态下的应用响应方式,以评估应用容量峰值大小。
在配置弹性伸缩策略时,您需要考虑以下因素:
权衡可用性与成本,配置指标目标值。示例如下:
可用性优化策略:配置指标值为40%。
可用性成本平衡策略:配置指标值为50%。
成本优化策略:配置指标值为70%。
考虑梳理上下游、中间件和DB等相关依赖性,并配置对应的弹性规则或限流降级手段,以确保扩容时全链路的可用性。
弹性规则配置完成后,您可以通过监控并调整弹性规则使容量接近应用实际负载。关于查看监控的具体步骤,请参见查看基础监控数据。
配置内存指标
Java应用运行时优化是通过释放物理内存,增强内存指标与业务关联性。借助Dragonwell运行时的环境,通过增加JVM参数开启ElasticHeap能力,支持Java堆内存的动态弹性伸缩,从而节约了Java应用在运行时实际使用的物理内存。关于ElasticHeap的更多信息,请参见G1ElasticHeap。
推荐配置为Dragonwell+ElasticHeap Periodic uncommit模式 (自动模式)。具体操作,请参见在SAE控制台使用JAR文件部署微服务应用和设置启动命令。
Java环境:在配置JAR包区域,从Java环境下拉列表中,选择Dragonwell类型的配置项。
JVM参数:在启动命令设置区域,输入-XX:+ElasticHeapPeriodicUncommit。
不适用配置内存指标的应用类型:采用动态内存管理进行内存分配(例如Java JVM内存管理、Glibc Malloc和Free操作)的部分应用,没有及时向操作系统释放其闲置内存,导致无法实时减少实例消耗的物理内存和新增实例消耗的平均内存,进而导致无法触发缩容。
配置实例数
最小实例数配置
确认最小实例数≥2,配置多可用区vSwitch。避免因底层节点异常导致实例驱逐或可用区无可用实例,应用停止工作。
最大实例数配置
确认最大实例数≤可用区IP数。避免因配置的IP数超出限制,应用无法新增实例。
您可以在基本信息页面的应用信息区域查看当前应用的可用IP数。如果可用IP较少,请替换或新增vSwitch。
观测弹性伸缩过程
弹性达到最大值
您可以在应用概览页页面查看当前开启弹性伸缩配置的应用,并监控当前实例数已经到达峰值的应用,对其弹性伸缩配置重新进行评估。
如果单个应用需要弹出超过50个实例,请加入钉群(钉群号:32874633)申请白名单。
可用区再均衡
弹性伸缩触发缩容后,可能会导致可用区分配不均。您可以在应用基本信息页面的实例列表,查看实例所属可用区。如果可用区不均衡,您可以通过重启实例实现再均衡。
配置自动恢复弹性
进行部署应用等变更单操作时,SAE会停止当前应用的弹性伸缩配置,避免两种操作冲突。如果您希望变更单完成后能够恢复弹性配置,可以在部署应用页面选择系统自动恢复。
运维弹性伸缩
查看应用事件
您可以在目标应用的应用事件页面,观测SAE弹性生效行为,包括查看弹性伸缩时间和动作,以此来衡量弹性伸缩策略的有效性并按需调整。更多信息,请参见查看应用事件。
查看应用实例监控图
您可以在目标应用的基本信息页面的基本信息页签,观测应用实例趋势图,包括7天内的CPU使用率、内存使用率和TCP活跃连接数、服务请求量和平均响应时间等监控指标。