如何扩展Spring Boot应用程序?

时间:2016-08-24 17:55:03

标签: spring tomcat spring-boot scalability

我知道Spring Boot有一个内置的Tomcat服务器(或Jetty),可以促进快速开发。但是,当您因为流量增加而需要扩展应用程序时,您会怎么做?

1 个答案:

答案 0 :(得分:6)

如评论中所指出的,这里没有万灵药,它取决于您的基础结构,并且有几种工具可以帮助您,您只需要选择最适合您的方法即可。

对于负载平衡,您可以选择Nginx之类的东西,也可以将其留给spring cloud,后者还具有许多其他方便的缩放/群集功能。 扩展应该不会很困难,因为spring boot在它自己的服务器上运行。

一些有助于缩放/聚类的工具:

春季启动应用:

  • 如果要扩展,则您的应用必须为近乎无状态(例如:您无法执行预定任务或类似任务,因为当您扩展到x个实例时,它们会被执行了x次)。

  • 您可以将spring cloud项目用于其他新增功能,例如服务发现和其他使扩展更容易的功能(例如:启动新实例时,它可以轻松地从配置中获取配置)服务器,“注册”以减轻服务之间的负载平衡,具有类似群集的行为等)。

基础结构和容器:

  • 在这里,Docker毫无疑问,可以轻松启动应用程序及其副本(如果需要)。如果您可以在资源上走得更远,在Kubernetes上走,但这全取决于用例。

  • 各种服务器(节点),以防其中之一发生故障并轻松分配负载。

  • 用于负载均衡的Ngnix非常简单,如果您还没有对Spring Cloud做任何事情。

数据库:

  • 您真的不想在这里使用MySQL,因为它不能像Spring应用程序那样很好地扩展。您可以选择诸如Cassandra或Redis之类的东西,但这将意味着重组数据模型。从MySQL到NoSQL可以扩展的最低痛苦过渡可能是MongoDB(恕我直言:Cassandra的表现更好)。

记录:

  • 这可能是一场噩梦,但春天也有解决方案。检出zipkin和春季侦探。

此外,有很多资源here讨论了一般的体系结构以及在尝试运行分布式服务时如何改变思维方式。

希望这会有所帮助。