我想在docker容器中部署我的微服务。我希望这些微服务尽可能无状态,只将状态保存到数据库中。
这意味着有以下要求:
这导致了我在处理架构创建和迁移时遇到的问题:
>
如果我有一个使用MySQL或Postgres作为数据存储的服务,我如何在第一次启动时创建表/模式?我应该只使用<code>CREATE IF NOT EXIST</code>语句,让实例在引导过程中“一决雌雄”吗?我无法设置一个环境变量来要求仅为其中一个实例创建表/模式。
如何处理具有上述约束的架构迁移?有许多操作,例如删除/添加无法封装在事务中的列。
在我个人看来,数据库迁移不应该是一个微服务的责任。
前段时间我读了很多关于Blue/Green部署和DB迁移的文章,我们的最终决定是在需要时触发DB迁移。
我现在没有链接,但它们很容易谷歌搜索。
我提到了蓝/绿部署,因为基于微服务的方法和容器使它变得更简单,所以如果你正朝着这个方向前进,你可能应该考虑蓝/绿部署,如果你决定从容器运行迁移,这将更加困难。
您还可以考虑实现一些类似断路器的方法,以便在出现数据库模式问题时,微服务将停止访问数据库。
您需要使用能够支持数据库迁移的工具。我在Java领域推荐的两个是:
这些绝不是这个类别中唯一的工具。它们所做的是记录已经应用到您的数据库实例的模式更改,确保模式与您的版本管理系统中捕获的所需状态相匹配。
问题内容: 我正在使用Docker,并且拥有PHP,MySQL,Apache和Redis的堆栈。我现在需要添加MongoDB,因此我正在检查Dockerfile中的最新版本以及MongoDB Dockerhub中 的docker- entrypoint.sh 文件,但是我找不到设置默认数据库,管理员用户/密码以及可能进行身份验证的方法文件中容器的方法。 在MySQL中,您可以设置一些ENV变量,例
这更多的是一个系统设计问题。 让我们假设我有一个微服务体系结构,我有X个实例(用于负载平衡对服务的HTTP请求)。但是,也是Kafka主题的消费者。如何避免将同一消息处理X次(X是的实例数)<如果处理是幂等的,至少一次就可以了。它不需要是,但不能是。 服务A可以是订单服务。它生成关于用户向订单主题下单的消息。 服务B可以是支付服务。它使用订单主题中的消息向用户收费。 支付订单可能是幂等操作。但是,
testcontainers oracleContainer在Dokerfile中定义的entrypoint发生更改之前启动,以完成并创建测试所需的用户。 容器运行后,将执行一些sql脚本创建表并用数据填充表。这些脚本失败,因为脚本中提到的用户尚未创建。 testcontainers没有等待完成安装。 通过使用以下命令检查日志: 我可以看到testcontainers从不等待它完成。 关于这个“b
我想在Docker容器中启动两个不同的服务,并在其中一个退出后立即退出容器。我查看了supervisor,但找不到如何让它在一个托管应用程序退出后立即退出。它试图重启它们多达三次,就像标准设置一样,然后什么也不做。主管是否能够做到这一点,或者是否有其他工具可以做到这一点?如果还有一种方法可以让两个托管程序都写入到stdout,并标记它们的应用程序名,则会有好处,例如:
我正在使用Spark,Flink创建流式分析应用程序 我在简单的Scala应用程序中完美地运行Spark/Flink作业,并通过Spark提交此作业 如何整合我的Spark 到目前为止,我尝试了Lagom Microservice,但我发现了很多问题,您可以检查 在Lagom Microservice中摄取流式数据的最佳方法 我认为我没有为流处理微服务应用程序选择正确的方向。正在寻找正确的方向来通
使用 LiquiBase 管理数据库变更 数据库通常不能够与它们支持的应用程序保持同步,从管理方面来讲,将数据库和数据置于一个已知状态是个很大的挑战。在本期的 让开发自动化中,自动化专家 Paul Duvall 演示了如何使用开源的 LiquiBase 数据库迁移工具轻松地处理数据库和应用程序的频繁变更。 在过去几年中,我使用过的大多数应用程序都是需要管理大量数据的企业应用程序。从事这类项目的开发