想要在AWS上构建具有高扩展性的应用时,通常可以动态启动新的EC2实例来实现。虽然现在实例启动的速度已经很快了,但是,操作系统和应用程序的启动过程总还是需要等候时间的。
此时,如果还要预加载缓存,或者还有其他依赖内存的应用程序组件时,等候的时间可能会更长。为了避免等候,为了更及时地应对需求高峰,不得不进行一些过度配置,这就造成了浪费。
为了解决这一问题,AWS推出了休眠功能。
当用户启动EC2实例,配置好环境之后,可以让它休眠,等需要时再唤醒。休眠不仅会将实例的内存状态保存下来,还会将私有IP和弹性IP地址都记录下来,从而让实例可以更完美地恢复到此前的运行状态。
目前,休眠功能支持在M3、M4、M5、C3、C4、C5、R3、R4和R5实例上运行的Amazon Linux 1,下一阶段,Amazon Linux 2也会支持休眠功能。
当实例接收到休眠指令时,它会将内存状态写入根EBS卷中,然后关机。用于启动实例的AMI会加密,根EBS卷也必须加密,从而确保数据从内存复制到EBS卷时的安全性。
更神奇的是,在实例处于休眠状态时,用户只需支付EBS卷和弹性IP地址的费用,不会有其他按小时计费的费用,就跟任何其他已停止的实例一样。
用户可以选择不活跃,或负载较低的时段将部分实例休眠,而不是让所有实例都一直在线,这对于开发和测试环境特别有用。
AWS首席布道师Jeff Barr表示,休眠功能最有趣的用例是那些,需要较长初始化时间才能接受流量的,需要长期运行的进程和服务。
想想就觉得挺美妙,一般而言,需要的初始化时间比较长的实例,还都是那种规格比较大的实例,这种实例的启动时间缩短本身就意味着省钱。
AWS还将休眠功能集成到了其他工具中,比如,可以通过AWS CloudFormation、AWS管理控制台、AWS SDK、AWS Powershell工具和AWS CLI来休眠这些EC2实例。
休眠功能简单易于用,但要注意,它只支持部分实例。而且,根EBS卷必须有等于实例内存大小的空闲空间,才能成功休眠。
还需要注意的是,处在休眠状态下的实例,无法修改实例大小或类型,但可以修改用户数据,可以更新应用、修补程序,执行一些维护任务,这可以减少服务中断。
此外,虽然新的功能会提高加载恢复的速度,但具体的休眠或恢复时间,还取决于实例的内存大小,需要保存的内存数据量的多EBS卷的吞吐性能。
下一阶段,AWS还会让Ubuntu、Windows Server 2008 R2、Windows Server 2012、Windows Server 2012 R2、Windows Server 2016等系统支持休眠功能。
我们注意到,其实谷歌GCP和微软Azure的云主机也都支持休眠功能,也都能达到类似的加快启动速度和降低成本的作用。