短暂存储,或称实例存储,就像一个 /tmp 文件夹,其中的内容在重新启动后会消失。当然,短暂驱动器内容不会在软重启时被销毁,但应该将其视为已销毁,因为您无法真正控制或预测实例何时会死亡。
这已经指出过了。
我想指出的是,如果您创建和配置适当的 AMI,则仍然可以使用短暂存储来大幅提高(读取)吞吐量,只要您还保留 EBS 驱动器用于实际存储。
目前我正在使用 Linux(Ubuntu Tahr)实例与 bcache。这主要是因为 bcache 内核支持相对较新(如果我没记错的话,第一个带有 bcache 的内核版本是 3.10),而且您肯定希望使用尽可能新的内核。此外,Tahr 是 Ubuntu 的下一个 LTS 版本,在我的项目即将上线时它已经发布了最终版 ;)
Bcache在默认配置下,允许您享受临时存储的
读取速度,同时提供EBS的持久性:它使用快速缓存设备(临时SSD)来加速慢速设备(EBS),通过缓存设备进行写入(即同时写入临时缓存和EBS)。
这意味着,如果一个实例崩溃或停止,您仍然可以直接挂载EBS卷而无需使用缓存,并像使用EBS卷一样访问所有数据。您还可以重新配置已清除的临时设备,并将它们重新配置为EBS的缓存,以便重新享受非常快速的读取和查找。
我的特定设置是两个EBS设备,在mdadm中以条带模式组成+两个ephemeral SSD设备也以相同方式组成。然后,我使用临时阵列作为缓存,使用EBS阵列作为“备份”设备来配置它们。EBS驱动器可以是任何大小,并且您始终可以扩展它们(EC2有点棘手,因为您必须创建当前EBS卷的快照,然后基于该快照创建新的更大的卷,您不能调整现有的EBS卷的大小)。
当然,您需要创建一个脚本,在实例启动时运行,以配置临时存储并将其附加为缓存设备到您的EBS备份设备。我建议阅读并尝试使用
mdadm和
bcache。
值得一提的是,使用Cassandra压力测试工具,我使用EBS卷与临时驱动程序bcached获得了更好的读取性能,而不仅仅是条带化临时驱动程序。这是因为bcache中使用的算法非常聪明。
使用临时驱动器作为缓存还可以减少网络流量,并且具有成本效益,因为它减少了对EBS的I/O,从而减少了您的每月账单。
还请注意bcache提供的不同类型的缓存。
- 回写:将SSD用作读/写设备,并仅在需要从高速缓存中驱逐页面时写入备份设备。这对于EC2临时设置不有用,因为它会在崩溃或停止时使备份设备无法使用。
- 直写:所有写操作都同时写入高速缓存和备份。这确保备份设备始终与高速缓存设备一样更新,并且可以始终在没有高速缓存设备的情况下使用。对于EC2非常有用。
- 旁路写:所有写操作直接写入备份设备,并且在未来某个时间发生数据读取请求之前不会写入高速缓存设备。只有读取才会被缓存到高速缓存设备上。这与直写一样安全,并且在您知道您的写操作不太可能在不久的将来被读取时非常有用。这避免了用不太常请求的数据填充高速缓存设备,以便为请求频率更高的数据腾出更多空间。一些例子可以是文件上传服务器、您写入大量日志数据的系统等。如果您知道整个数据集明显大于临时存储的大小,则这很可能是许多用例中最有效的选项。