java - 具有多个具有内部调用的微服务的蓝绿部署

标签 java amazon-web-services spring-boot microservices blue-green-deployment

我有 8 个 Spring Boot 微服务,它们在内部相互调用。其他微服务的调用dns,在每个服务的application.properties文件中定义。

假设微服务A由A -> a.mydns.com 和 B-> b.mydns.com 等表示

所以基本上每个微服务都由一个 ELB 和两个 HA 代理(分布 分布在两个可用区)和 4 个应用服务器(分布在两个可用区)。

目前,我正在创建新的绿色服务器(仅限应用程序服务器)并从 HA 代理级别切换实时流量。在这种情况下,新版本的微服务在测试的同时,也暴露给了现场客户。

理想情况下,方法应该是为每个微服务创建整个服务器结构,包括 ELB 和 HA 代理,对吗?

但是我怎么会面临使用测试 dns 进行测试的挑战呢?我可以将 ELB 映射到测试 dns。 但是硬编码在 application.properties 文件中的外部微服务 dns 怎么样?

在这种情况下我应该采取什么方法?

最佳答案

我建议对您的微服务进行 Docker 化(使用 spring-boot 即可轻松实现),然后将 ECS(弹性容器服务)和 ELB(弹性负载均衡器)与应用程序负载均衡器结合使用。 (可以是内部的,也可以是面向互联网的)。

当您部署新版本时,ECS 和 ELB 将利用您的微服务 /health 端点。

然后,您可以在 spring-boot 中实现更复杂的 HealthIndicator ,以确定应用程序是否健康(并因此准备好接收传入请求)。只有当新应用程序运行良好时,它才会投入使用,而旧应用程序则会进入 hibernate 状态。

然后在测试环境上测试您的所有业务逻辑,并且由于 Docker,您在所有环境上运行完全相同的镜像,您不需要运行(任何)测试部署到生产时。 (因为它已经过测试,如果它启动了,那么就可以开始了)。

关于java - 具有多个具有内部调用的微服务的蓝绿部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45547556/

相关文章:

java - 在 Spring Boot 中自动将参数从表单传递到 URL

java - 必要时设置 Java 类路径

java - jpa使用mysql的一对一关系

java - 如果我重写 equals 并且不使用任何哈希集合,是否有必要重写哈希码

java - 如何同步2个ConcurrentHashMap?

ios - 如何避免在 Cognito 联合身份中创建未使用的身份

java - 如何在spring boot项目启动时创建目录

java - 在 Spring Boot 中使用嵌入式 stub /虚拟应用程序进行测试

java - 如何通过eclipse连接mysql数据库

amazon-web-services - 使用Docker进行Tensorflow服务