Bas*_*ire 16 database-migration amazon-web-services amazon-ecs laravel aws-fargate
我知道一些潜在的解决方案,但它们都让我感觉很糟糕。
每一个都有我不喜欢的东西。
php artisan migrate(没有任何可迁移的内容),以便它可以通过迁移捕获部署。好处是,使用 onOneServer(),它实际上应该解决这个问题:我们不希望多个实例都尝试在部署上迁移数据库,而只希望一个实例。这有一个很大的好处,就是将部署和迁移链接起来,所以如果部署失败,还没有迁移,如果迁移失败,至少可以更容易地将任务回滚到旧的任务版本。涉及的移动部件较少。每分钟发送垃圾邮件的资源开销php artisan migrate并且没有任何可回滚的内容,应该非常小/不明显的资源使用。但是,它在资源方面的效率低下仍然让我非常困扰。还有其他解决方案吗?我预计有人可能会建议我使用环境变量控制实例,但我也不想这样做。如果我们部署并运行 3 个实例,它们都应该更新并且它们都是“相同”的实例状态。否则,我必须创建第二个服务,该服务也 24/7 运行以检查迁移作为其自己的特殊工作。我猜这是解决方案5:
我认为解决方案 3 是我的首选解决方案,尽管它有资源开销。我很想听听其他人对这个问题的一些见解。我所处的情况是,如果我被公共汽车撞到,这条管道对于非操作人员来说确实应该很容易处理。在 Laravel 应用程序代码中保持简单似乎符合这一要求。我知道有计划任务/云信息事件解决方案,但请记住我有一个大目标as little entropy / moving parts as possible, within reason。
我已经阅读了关于这个主题的每一篇博客文章和每一篇谷歌点击,但还没有找到明确的答案。我自己提出了解决方案 3,但没有看到任何地方建议它。
在所有情况下都可能实现自动化数据库迁移太过雄心勃勃,应该开发并遵循手动流程。特别是如果数据库迁移包含不适用于旧实例的更改 - 在部署之前迁移它会暂时破坏这些更改。
在部署之前运行数据库迁移(选项 1)是行业标准,也是您应该做的事情,无论您的云平台、数据库引擎或应用程序语言如何。
简而言之,长答案是数据库迁移是为了容错 - 如果出于某种原因您需要反转部署,您可以确切地知道发生了什么以便能够回滚。
大多数(如果不是全部)ORM(例如 .NET 的 Entity Framework 或 Java 的 Liquibase)允许您使用简单的命令回滚迁移。Laravel for PHP 附带的 Eloquent ORM 还允许您使用php artisan migrate:rollback.
部署之前管道中的一个步骤应该应用数据库迁移。如果部署因任何原因失败,您应该手动回滚。
这是应用程序和数据库在基础设施级别的交集 - 不幸的是,如果出现故障,预计需要一些手动工作。
| 归档时间: |
|
| 查看次数: |
1094 次 |
| 最近记录: |