01 前言
说起伸性伸缩这个概念想必大家应该都不会陌生,在每年的一些节日中包括双11,双12等,像淘宝、天猫这样的平台访问量是平时访问流量的十几倍甚至几十倍,面对如此具大的访问量,这些大平台是如何轻松化解的呢?今天我来分享一则阿里云的一款产品“ESS弹性伸缩”的使用体验。这也是我在实际工作过程当中正在使用的一款产品。
那么我先来分享一下,究竟什么情况下比较适合使用弹性伸缩这款产品呢?那就是当我们的业务有明显的“波峰与波谷”(业务高峰期有大量的并发连接,业务低峰期并发数会大幅度下降)且对成本比较在意的时候,我强烈建议大家考虑使用“阿里云ESS弹性伸缩”这款产品。
还是以淘宝来举例,每当双11到来之前通过阿里云的弹性伸缩功能会提前把所需的资源弹出,当活动热度降低的时候再把弹出的部分或者全部资源释放掉,这样的机制既能满足业务的需要,又可以达到成本最优化的完美方案。
我所运维的是一个在线直播平台,流量也是具有非常明显的“波峰与波谷”的状态。虽然没有这些大的电商平台连接数那么大,但在直播高峰期对平台的压力也着实不小,后来使用阿里云ESS弹性伸缩后完美的解决了我的问题。接下来我就分享一下我具体的使用过程。
02 实际使用过程踩过的坑与避坑指南
本人在决定使用阿里云ESS弹性伸缩后,在实操的过程中遇到了两个“坑”,所谓的“坑”并不是产品本身的问题,而是我所运维的平台本身架构暂时还不具备使用弹性伸缩的条件。接下来我来分别描述一下具体遇到的问题。
配置弹性伸缩后用不起来(坑一)
当我按照阿里云官方的配置文档,配置完弹性伸缩的策略后,我选择了在高峰期弹出2台ECS资源来进行负载。当我兴致冲冲要体验下产品的使用效果时,却发现压根没有按照我预想的那样弹出资源,还是使用原来的那台“单薄”的ECS在负载。以下是我在配置弹性伸缩过程中的部分截图:
后来我提交了技术工单,经过工程师的回复后才得知,要想真正的使用起来是需要该系统为三层的解耦架构才可以,什么是三层的解耦架构?简单来说就是前端需要SLB负载均衡做为流量的总入口,后端的应用和数据库要分离,并且要使用RDS来做为数据库的解耦架构。
了解此前提条件后,我就在原来的ECS单体架构中,额外增加了SLB负载均衡和RDS MYSQL5.7的数据库服务。并成功的搭建起简单的三层架构,并把RDS服务和负载均衡加入了弹性伸缩组,以下是该描述的操作截图。
经过此次的整改后,弹性伸缩的功能终于可以正常使用啦,已经可以正常的弹出ECS的资源!具体弹出的效果图如下:
ECS侧弹出效果截图
ECS侧提示有实例正在加入,实例的控制台也已经增两了2台ECS实例,说明弹出的效果是OK的。
负载均衡侧弹出效果截图
负载均衡侧在弹性伸缩的场景里担任着流量总入口的角色,看到新弹出的实例已经加入到默认服务器组中,说明已经可以正常负载业务的流量了。
RDS侧增加白名单效果截图
数据库侧做为业务访问的最末端,担任着数据一致性的重要任务以便提供多台ECS实例的共享访问,为了安全考虑,在实际使用环节通常会开启数据库的白名单设置来增加数据库访问的安全性,在弹性伸缩的场景中,弹出或释放资源都会自动在RDS白名单设置里添加/删除IP白名单。本次我配置完弹性伸缩后,会自动把新弹出的ECS实例私网IP加入到数据库白名单中。
当直播平台到非高峰期的时候,弹出的资源就会自动的释放掉,接下来再来展示一下释放资源的相关信息:
ECS侧释放效果截图
ECS侧提示有实例正在停止中最终会被释放掉,说明资源释放的效果是OK的。
负载均衡侧释放效果截图
通过负载均衡侧,可以看到新弹出的实例已经被自动释放掉了,说明负载均衡侧的负载自动释放也是OK的。
RDS侧删除白名单效果截图
通过截图,数据库侧我们也可以清晰的看到之前加入白名单的的两个私网IP(172.19.40.13、172.19.40.14)也已经被自动删除掉了,至此呢说明弹性伸缩的功能是正常的,并且可以正式的应用了,完美的解决了我们业务对于资源弹性的需求。
资源没有及时的弹出,导致系统崩溃(坑二)
在使用弹性伸缩的场景中,遇到的第二个问题是当我搭配好三层架构且配置好伸缩规则验证无误后,在实际的使用过程中,资源没有及时的弹出,致使业务平台在高峰的时候支撑不住导致系统崩溃,影响了用户的访问体验。当时我一度怀疑是阿里云的弹性伸缩本身出现了问题,后来经过操作复盘后才知道致使此问题的关键点在创建自动伸缩规则类型和冷却时间 。
首先在弹性伸缩组里有两种不同的任务类型,一类是定时任务另一类则是报警任务。
定时任务
定时任务比较适合波峰和波谷较为规律的业务,通过定时任务可以在波峰到来之前提前弹出资源以应对高并发的需求,波峰过去之后逐渐的释放掉资源以节省成本, 是属于主动型任务。
报警任务
报警任务比较适合不能提前预测波峰和波谷的业务类型,通过设定CPU使用率、内存使用率,磁盘占用率等指标,来触发伸缩的规则 ,是属于被动型任务。
冷却时间
冷却时间指的当触发了自动伸缩任务后,执行任务的间隔时长。
而我运维的直播平台其直播的时间是可以提前预知的,采用定时任务就可以解决对于资源的预热和弹出的诉求,而我却使用了报警任务这一类被动型任务,当业务洪峰来临且触发了伸缩规则后,再过300秒的冷却时间就已经严重的影响了用户的访问体验了,症结就在于此。
以下是伸缩规则及伸缩组任务的部分配置截图:
创建定时任务的配置示例
创建伸缩规则的配置示例
03 实际使用过程的完整描述
接下来我再叙述一下本次业务在搭配弹性伸缩过程中的完整步骤。
业务拓扑图
以上是最初业务的三层架构图,借助ESS缩性伸缩来快速相应业务洪峰的高并发。
业务搭配完整流程
搭建弹性伸缩的业务环境共分为三个步骤,分别为:搭建三层架构、配置弹性伸缩、弹性业务验证。
第一步:搭建三层架构
1.准备ECS应用。 2.部署SLB负载均锋。 3.部署RDS 数据库
第二步:配置弹性伸缩
1.创建伸缩组:伸缩组用于管理有相同应用场景的ECS实例,并支持关联多个负载均衡实例和RDS实例。
2.创建伸缩配置:伸缩配置是弹性伸缩自动创建ECS实例时所使用的实例模板,用于指定伸缩的资源类型及具体配置。
3.启用伸缩配置:首次创建伸缩配置后,会自动提示启用伸缩组。
4.创建伸缩规则: 伸缩规则用于指定扩缩容ECS实例的数量等信息或者智能地设置伸缩组边界值,可根据业务需要创建对应类型的伸缩规则。
5.创建自动伸缩任务:创建伸缩规则后,可以通过自动伸缩任务自动执行伸缩规则,实现自动扩缩容。
第三步:功能验证
1.弹出资源验证:触发伸缩规则 ,首先验证云服务器资源有无自动弹出,其次验证SLB负载均衡侧有无自动加入新的负载实例,再次验证RDS数据库有无自动开通新负载的IP白名单。
2,释放资源验证:触发伸缩规则 ,首先验证云服务器资源有无自动停止并释放,其次验证SLB负载均衡侧有无自动删除新的负载实例,再次验证RDS数据库有无自动删除新负载的IP白名单。
04 总结
好了,上述就是我在具体使用该产品过程中遇到的问题以及相应的解决思路,目前问题均已经解决并完美的运行在我们的业务系统上,通过阿里云ESS弹性伸缩的功能为企业有效的降低了IT投入,提升了IT资源的使用效率,达到了企业降本增效的预期。
最后献上本人描绘的关于弹性伸缩场景中整体操作的思维导图: