AWS:将软件和数据拆分成不同的卷
AWS : Splitting software & data in different volumes
AWS 建议将数据和 OS 保存在 separate EBS volumes 上。我在 EC2 上有一个带有 EBS 卷的网络服务器 运行。在裸机上,我安装了以下内容:
- webserver, wsgi, pip & related software/config (some in /etc some in /home/<user>)
- server code & static assets in /var/www/
- log files are written to /var/log/<respective-folder>
- maintenance scripts in /home/<user>/
数据库服务器是独立的。对于网络服务器,以上哪些项目会受益于更高的 IOPS,哪些无关紧要?我的理解是服务器代码和日志文件应该移动到具有更高 IOPS 的单独 EBS 卷。或者我应该将我所有的东西(我安装在 /etc 中的软件除外,即网络服务器)移动到具有更好 IOPS 的单独卷?
我建议您有一个单独的 EBS 卷用于代码、日志和维护,以防您需要将其移动到另一台服务器。与必须构建整个服务器相比,这使您可以更快地完成 TTR(解决问题的时间)。
代码在部署后应该不会有很大变化,所以我会在这里关注通用 SSD,并着眼于缓存层(Varnish(整页缓存)和 CDN(静态资产))而不是拥有磁盘 I/O 问题。 CDN 是一种快速取胜的方法,可以减轻大多数 I/O 读取静态资产的负担。在 50GB 时,您将获得 150 IOPS,并减少了静态资产; I/O 应该没问题。
至于日志,如果您是一个高流量站点,那么您绝对应该关注这里的 I/O,因为您不想在这里阻塞 I/O。这主要侧重于访问日志而不是错误日志,因为那些在生产系统上不应该超过 ERROR 级别。如果您的流量不高,那么您应该使用通用 SSD,在 10GB 时,您可以获得 30 IOPS,这通常就足够了。
您的维护脚本在做什么?如果他们正在生成和输出文件,那么你可以使用 SSD,但如果你需要高 I/O,你应该重新访问代码并优化代码,因为这些磁盘可能会变得昂贵,而且该成本通常用于维护间歇性运行。
至于您的网络服务器等,应该基于基础架构即代码,通过 OpsWorks 或 Puppet,并且在 I/O 方面不需要太多,因为它们通常是内存-基于流程一旦构建和部署。
AWS 建议将数据和 OS 保存在 separate EBS volumes 上。我在 EC2 上有一个带有 EBS 卷的网络服务器 运行。在裸机上,我安装了以下内容:
- webserver, wsgi, pip & related software/config (some in /etc some in /home/<user>)
- server code & static assets in /var/www/
- log files are written to /var/log/<respective-folder>
- maintenance scripts in /home/<user>/
数据库服务器是独立的。对于网络服务器,以上哪些项目会受益于更高的 IOPS,哪些无关紧要?我的理解是服务器代码和日志文件应该移动到具有更高 IOPS 的单独 EBS 卷。或者我应该将我所有的东西(我安装在 /etc 中的软件除外,即网络服务器)移动到具有更好 IOPS 的单独卷?
我建议您有一个单独的 EBS 卷用于代码、日志和维护,以防您需要将其移动到另一台服务器。与必须构建整个服务器相比,这使您可以更快地完成 TTR(解决问题的时间)。
代码在部署后应该不会有很大变化,所以我会在这里关注通用 SSD,并着眼于缓存层(Varnish(整页缓存)和 CDN(静态资产))而不是拥有磁盘 I/O 问题。 CDN 是一种快速取胜的方法,可以减轻大多数 I/O 读取静态资产的负担。在 50GB 时,您将获得 150 IOPS,并减少了静态资产; I/O 应该没问题。
至于日志,如果您是一个高流量站点,那么您绝对应该关注这里的 I/O,因为您不想在这里阻塞 I/O。这主要侧重于访问日志而不是错误日志,因为那些在生产系统上不应该超过 ERROR 级别。如果您的流量不高,那么您应该使用通用 SSD,在 10GB 时,您可以获得 30 IOPS,这通常就足够了。
您的维护脚本在做什么?如果他们正在生成和输出文件,那么你可以使用 SSD,但如果你需要高 I/O,你应该重新访问代码并优化代码,因为这些磁盘可能会变得昂贵,而且该成本通常用于维护间歇性运行。
至于您的网络服务器等,应该基于基础架构即代码,通过 OpsWorks 或 Puppet,并且在 I/O 方面不需要太多,因为它们通常是内存-基于流程一旦构建和部署。