实习时接到一个听起来很简单的任务:把一台服务器迁到新的AWS区域,保持和原来一样,尽量少花钱。
![]()
最后那句"少花钱"让我记了很久。如果你翻过任何关于AWS省钱的资料,Spot实例几乎无处不在。AWS说它比常规的按需实例最多便宜90%。九成!我一度以为自己找到了那个轻松的省钱答案。
然后在站会上,一位队友问了一个问题,十秒钟就把这个想法按死了:
"这台服务器的数据存在哪儿?"
下面是我从这件事里学到的东西,以及我现在给任何东西选Spot之前都会先问的那个问题。
Spot实例到底是什么
AWS的数据中心里塞满了服务器,任何时刻都不是全部在用。Spot实例就是让你把这些闲置容量租下来,价格低很多。
代价藏在交易条款里。AWS随时可以在需要这批容量时把它收回去。你会收到两分钟的预警,然后实例就没了。
默认情况下,被中断的Spot实例会被终止,除非你另外做过设置,否则它自带的磁盘也会一起消失。
两分钟够存一点工作进度,不够把一台服务器的全部记忆存下来。
我们那台服务器扔不得
站会上那个问题就是冲这儿来的。
我要迁的这台服务器,把自己的上下文存在本地磁盘上。它知道的一切都活在这一台机器里,没有独立的数据库或存储替它留副本。
所以如果AWS把它收回去,我们丢的不只是一台运行中的服务器,而是它积累起来的全部东西,得从零开始。
那个便宜选项,最后可能变成最贵的那个。
宠物与牲口
DevOps里有一句老话,这件事之后我才真正理解。
牲口是你不会产生感情的服务器。它们长得都一样,死了一台就换一台,没人会注意到。比如负载均衡后面的Web服务器,真正的数据存在别处的数据库里。
宠物是你在乎的服务器。它们有自己的名字、自己的数据,死了一台,你这一天就不好过了。
Spot实例对牲口很合适,对宠物有风险。
我们那台服务器,妥妥是只宠物。
我现在会先问的问题
给任何东西选Spot之前,我会先问自己:
"如果这台服务器现在消失了,我们会失去什么?"
如果答案是"没什么,再起一台就行",Spot大概率很合适。比如这些场景:
- 可以重启的批处理任务
- CI运行器
- 测试环境
- 自动伸缩组里、数据存在别处的服务器
如果答案是"会失去很多",那就先用按需实例,至少等到数据搬到更安全的地方再说。
钱还是省下来了,只是换了种省法
目标依然是压成本,所以便宜并没有被排除,只是得是"对的那种便宜"。
计划是让这台服务器按开/关的时间表运行,只在需要的时候开着。用按需实例,实例停止期间不付计算费用,只为磁盘付一小笔钱。而停止实例会保留磁盘,过夜也不会丢东西。
Spot也没有被永久排除。迁移完成之后我们会再看一次。如果数据搬离了这台服务器,它就不再是宠物,Spot也就成了一个选项。
我一开始以为最便宜的选项就是最聪明的选项。站会上的一个问题让我明白:如果便宜可能弄丢你的数据,那它就不便宜。
说实话,这段实习里我学到的最好的东西,有些并不来自文档,而来自队友随口问出的、我自己没想到要问的简单问题。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.