Cloud 运行 - 我的应用程序每天都需要新的数据库文件
Cloud Run - new database file needed each day in my app
我有一个 docker 化的 Spring 启动应用程序,想 运行 在云端 运行。
问题是我需要每天更新数据库文件(大约 ~1MB)。
我有什么选择?
- 每天使用 CD 构建新的 docker 映像 - 部署过程中有一些失败的风险,只有数据库在变化
- 在开始时和每天从存储中下载文件 - 但我无法控制容器的生命周期
- 作为 ENV 变量传递 - 太大了吗?
你怎么看?
如果您想保持代码不变,您的解决方案是每天构建一个新容器。如果您正确定义了 Dockerfile,风险就不会那么大。实际上,执行之前的所有构建步骤,并且只将 db 文件添加到容器的最新层。
就像那样,每天,当你构建容器时,如果前一层保留在缓存中(取决于你的 CI/CD 平台),只有最新的层被替换,容器就这样构建。您的代码不会更改,您在打包和部署时不应该有风险。
你把数据库文件放在云存储上的想法不太好。当然你有版本控制问题,但你也有冷启动问题。事实上,当你的 Cloud 运行 实例启动时,它必须先下载文件,然后再执行它的正常启动。 Spring 在云上启动已经很慢 运行,在此冷启动时添加外部依赖和下载延迟不是一个好主意。
如果您可以处理您的代码,.db 文件意味着您有一个 SQL 数据库(我不知道是哪个,可能是 DB2 或 SQLite)。如果您使用抽象层,例如 Hibernate,则很容易切换到另一个数据库引擎,因此可以使用 Cloud SQL MySQL 实例。
当然,成本不一样,但管理云 运行 部署更容易。但是,您仍然需要创建一个流程(一个 CI/CD 作业?)来更新和部署云 SQL 上的新数据。版本控制也是一个问题(即使您可以在 CI/CD 管道中手动执行快照以在导入新数据之前保存云 SQL 数据。
我有一个 docker 化的 Spring 启动应用程序,想 运行 在云端 运行。 问题是我需要每天更新数据库文件(大约 ~1MB)。
我有什么选择?
- 每天使用 CD 构建新的 docker 映像 - 部署过程中有一些失败的风险,只有数据库在变化
- 在开始时和每天从存储中下载文件 - 但我无法控制容器的生命周期
- 作为 ENV 变量传递 - 太大了吗?
你怎么看?
如果您想保持代码不变,您的解决方案是每天构建一个新容器。如果您正确定义了 Dockerfile,风险就不会那么大。实际上,执行之前的所有构建步骤,并且只将 db 文件添加到容器的最新层。
就像那样,每天,当你构建容器时,如果前一层保留在缓存中(取决于你的 CI/CD 平台),只有最新的层被替换,容器就这样构建。您的代码不会更改,您在打包和部署时不应该有风险。
你把数据库文件放在云存储上的想法不太好。当然你有版本控制问题,但你也有冷启动问题。事实上,当你的 Cloud 运行 实例启动时,它必须先下载文件,然后再执行它的正常启动。 Spring 在云上启动已经很慢 运行,在此冷启动时添加外部依赖和下载延迟不是一个好主意。
如果您可以处理您的代码,.db 文件意味着您有一个 SQL 数据库(我不知道是哪个,可能是 DB2 或 SQLite)。如果您使用抽象层,例如 Hibernate,则很容易切换到另一个数据库引擎,因此可以使用 Cloud SQL MySQL 实例。
当然,成本不一样,但管理云 运行 部署更容易。但是,您仍然需要创建一个流程(一个 CI/CD 作业?)来更新和部署云 SQL 上的新数据。版本控制也是一个问题(即使您可以在 CI/CD 管道中手动执行快照以在导入新数据之前保存云 SQL 数据。