我想比较一下两种托管架构对于小型服务器的优势(意味着 2 核 CPU 和 250GB SSD,其中 100GB 专用于数据,绰绰有余),该服务器主要由提供 Web 服务的自定义应用程序组成,具有 REST 架构,并且所有数据都在关系数据库中。
- 托管在云中的单台机器上(例如 EC2 实例),并在本地运行关系数据库(例如 mySQL、PostGreSQL),并频繁进行加密数据库外部备份(例如备份到 S3/Glacier)。
- 托管在云中的机器上(例如具有较少 SSD 的类似 EC2 实例),并使用 RDBMS 托管服务,例如 Amazon Relational Database Service,可能使用不太频繁的加密数据库外部备份。
我认为 1 的好处
- 我相信,便宜 3 倍左右(节省 RDBMS 管理服务和网络)。
- 数据库访问延迟可能会更好吗?
2
- 如果 EC2 实例被摧毁,我们不会丢失数据。
- 从头重建服务器或进行操作系统更改等重大升级时,无需将数据库从一个 EC2 实例复制到另一个 EC2 实例;从而减少停机时间。
- 也许可以更轻松地管理数据库。
我错过了什么?有没有什么权威人士可以指点一下?
答案1
关于第一点:
当你的 Web 服务受到威胁时,数据库也会受到威胁。最佳做法是将表示层与数据层分离。
同一个 AZ 内甚至两个 AZ 之间的延迟很小,可以从考虑中省略。
我不会说这个解决方案会比 RDS 便宜很多,因为影响价格的相关因素是 SSD 存储。RDS 和 EC2 之间的价格大约相差 30%。
关于 SSD 类型,您必须决定,或者您可能已经知道您的数据库将来需要的峰值 IOPS 和 MB/s 水平。这也是改善解决方案最终价格的一个很好的选择。
关于第二点:
您可以避免这种情况。默认情况下,当您将非根 EBS 卷附加到实例时,终止时删除属性设置为错误的。我假设数据库位于非根 EBS 卷上。该标志可能设置为错误的在根卷上也是如此。
您不必将数据库从 EC2 复制到 EC2,您可以将 EBS 卷与数据库附加或分离。
正如您在 RDS 解决方案中指出的那样,管理责任在 AWS 上。但是,数据库架构越复杂,我越会选择非托管数据库服务。
您没有提到架构的关键因素是什么。成本还是运营管理节省?当您决定定价模型的类型时,价格会有很大差异:无预付款还是全预付款。我不知道这项服务是否会在工作时间内工作,并且可能会在夜间关闭。您还没有提到将在 Web 服务上运行什么。这对业务至关重要吗?如果 Web 服务是基于事件的应用程序,那么一个好的且具有成本效益的解决方案可能是考虑无服务器架构。