微服务领域SpringBoot自动伸缩的实现方法-创新互联
前言
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、网页空间、营销软件、网站建设、大田网站维护、网站推广。自动伸缩是每个人都想要的,尤其是在微服务领域。让我们看看如何在基于Spring Boot的应用程序中实现。
我们决定使用Kubernetes、Pivotal Cloud Foundry或HashiCorp's Nomad等工具的一个更重要的原因是为了让系统可以自动伸缩。当然,这些工具也提供了许多其他有用的功能,在这里,我们只是用它们来实现系统的自动伸缩。乍一看,这似乎很困难,但是,如果我们使用Spring Boot来构建应用程序,并使用Jenkins来实现CI,那么就用不了太多工作。
今天,我将向您展示如何使用以下框架/工具实现这样的解决方案:
- Spring Boot
- Spring Boot Actuator
- Spring Cloud Netflix Eureka
- Jenkins CI
它是如何工作的
每一个包含Spring Boot Actuator库的Spring Boot应用程序都可以在/actuator/metrics端点下公开metric。许多有价值的metric都可以提供应用程序运行状态的详细信息。在讨论自动伸缩时,其中一些metric可能特别重要:JVM、CPU metric、正在运行的线程数和HTTP请求数。有专门的Jenkins流水线通过按一定频率轮询/actuator/metrics 端点来获取应用程序的指标。如果监控的任何metric【指标】低于或高于目标范围,则它会启动新实例或使用另一个Actuator端点/actuator/shutdown来关闭一些正在运行的实例。在此之前,我们需要知道当前有那些实践在提供服务,只有这样我们才能在需要的时候关闭空闲的实例或启动新的新例。
在讨论了系统架构之后,我们就可以继续开发了。这个应用程序需要满足以下要求:它必须有公开的可以优雅地关闭应用程序和用来获取应用程序运行状态metric【指标】的端点,它需要在启动完成的同时就完成在Eureka的注册,在关闭时取消注册,最后,它还应该能够从空闲端口池中随机获取一个可用的端口。感谢Spring Boot,只需要约五分钟,我们可以轻松地实现所有这些机制。
动态端口分配
由于可以在一台机器上运行多个应用程序实例,所以我们必须保证端口号不冲突。幸运的是,Spring Boot为应用程序提供了这样的机制。我们只需要将application.yml中的server.port属性设置为0。因为我们的应用程序会在Eureka中注册,并且发送唯一的标识instanceId,默认情况下这个唯一标识是将字段spring.cloud.client.hostname, spring.application.name和server.port拼接而成的。
示例应用程序的当前配置如下所示。
可以看到,我通过将端口号替换为随机生成的数字来改变了生成instanceId字段值的模板。
spring: application: name: example-service server: port: ${PORT:0} eureka: instance: instanceId: ${spring.cloud.client.hostname}:${spring.application.name}:${random.int[1,999999]}
名称栏目:微服务领域SpringBoot自动伸缩的实现方法-创新互联
文章URL:http://pwwzsj.com/article/csiose.html