我想将Spring Boot部署在分布式环境中。一般来说,最佳做法是什么?
1。分布式环境的每个节点都有自己的application.properties
2。分布式环境的所有节点共享一个application.properties
这是我的第一个春季启动项目,请不要因为这个问题而杀了我:P
答案 0 :(得分:2)
根据您的需求,可能有很多选择,有些是微不足道的,有些则更复杂但更灵活。
首先,您可以将配置保留在spring boot应用程序内部,这当然不是理想的方法,但是它的简单性。 您可以在资源文件夹中放置application-local.properties,application-production.properties等,并使用具有活动配置文件的spring boot应用程序运行所需的环境。
另一种更高级的设置是使用配置文件,但将其保留在应用程序之外。
在这里,您将与应用程序分开部署此配置文件,在这里,可以使用许多选项,包括共享文件系统,自动部署等。
您可以使用--spring.config.location=<path to configuration file>
现在,如果您想将配置保留在git存储库或文件系统中,并且组织中有许多微服务,那么管理它们就会一团糟。因此,在这种情况下,您可以检查配置服务器。 Spring Boot集成了配置服务器,该服务器是Spring Cloud项目的一部分。您可以找到here的更多信息。
这是迄今为止最先进的设置-您甚至可以动态更改配置,而无需重新启动Spring Boot微服务(对于Google Spring Boot配置中的Refreshable Bean,则为Google)。此外,您可以将配置保留在git存储库中,它将自动能够使用它。
还有其他解决方案,可能与Spring Boot应用程序的集成较少,但是如果您已经在组织中使用过它们,可以考虑使用:d,领事等。
通常,进入Spring Boot世界的人们从第一个或第二个选项开始,然后采用其备选方案的第三个选项。
答案 1 :(得分:1)
我个人会尝试使用配置服务器:Centralized Configuration。基本上,您将配置文件保存在一个git repo中,并在其顶部有一个相对简单的Spring Boot应用程序,其他Spring Boot应用程序可以连接到该仓库并请求配置。
此外,与执行器结合使用,您还可以在不重新启动应用程序的情况下即时更改配置。
答案 2 :(得分:0)
所有两种策略:
这取决于您要实现的目标。
在第一种情况下,我建议遵循“每个服务单一主机”模式,并将您的spring boot应用程序作为docker容器提供,然后将其部署在诸如AWS ECS,Kubernetes,Swarm等编排器上,甚至每个服务器提供一个VM。服务可能是一个解决方案,但我想这可能会很昂贵。
听到的好处是我们的应用程序无需开发即可使用,因为您拥有靠近代码的所有配置,此模式下的任何配置更改将是一个新的部署,它将在您的服务器上创建一个新的docker映像。泊坞窗注册表。这样,您可以防止配置漂移,所有副本和所有副本都将被更新并且保持一致,您可能将使用canary部署或蓝绿色部署模式。
第二种策略为您提供了许多类似Cloud Foundry和Openshift的PAAS的配置模式。所有应用程序副本将共享一个配置入口点。
如果是使用Spring Cloud的Spring,则可以选择Spring Cloud Configuration Server。在这种情况下,所有应用程序都会向服务器询问配置,可以通过嵌入式客户端(尝试尝试检索配置)或通过诸如Netflix Eureka或Consul的发现服务系统来发现服务器。
在这种情况下的好处是,您可以动态地扩展配置服务器实例的数量,这将是发现系统来提供所有已注册的副本。对于配置服务器,您可以受益于许多配置存储,例如文件系统,SVN,GIT或最近的JDBC。更重要的是,您可以受益于特殊的@RefreshScope
,它将创建您的bean作为代理,并允许您通过执行器端点/ actuator / refresh上的最后一个Spring Cloud(Finchley)或/ refresh来通过热重新刷新配置。以前的Spring Cloud版本,甚至Spring Cloud Bus都可以用来传播reshresh事件。
如果您使用zuul,则路由会在发生更改和刷新的情况下进行更新,这样您就可以用来实施蓝绿色部署或金丝雀部署策略。
我希望它对您有用