微服务领域弹簧引导自动伸缩的实现方法

  

  

自动伸缩是每个人都想要的,尤其是在微服务领域。让我们看看如何在基于弹簧引导的应用程序中实现。

  

我们决定使用Kubernetes,关键云计算或HashiCorp的游牧等工具的一个更重要的原因是为了让系统可以自动伸缩。当然,这些工具也提供了许多其他有用的功能,在这里,我们只是用它们来实现系统的自动伸缩。乍一看,这似乎很困难,但是,如果我们使用弹簧引导来构建应用程序,并使用詹金斯来实现,那么就用不了太多工作。

  

今天,我将向您展示如何使用以下框架/工具实现这样的解决方案:

  
      <李>春季启动   <李>弹簧引导驱动器李   <李>春云Netflix尤里卡李   <李>詹金斯CI李   
  


  

  

每一个包含弹簧引导致动器库的弹簧引导应用程序都可以在/致动器/指标端点下公开指标。许多有价值的指标都可以提供应用程序运行状态的详细信息。在讨论自动伸缩时,其中一些指标可能特别重要:JVM, CPU度规,正在运行的线程数和HTTP请求数。有专门的詹金斯流水线通过按一定频率轮询/致动器/指标端点来获取应用程序的指标。如果监控的任何指标【指标】低于或高于目标范围,则它会启动新实例或使用另一个驱动器端点/致动器/关闭来关闭一些正在运行的实例。在此之前,我们需要知道当前有那些实践在提供服务,只有这样我们才能在需要的时候关闭空闲的实例或启动新的新例。
  

  

微服务领域弹簧引导自动伸缩的实现方法”> <br/>
  </p>
  <p>在讨论了系统架构之后,我们就可以继续开发了。这个应用程序需要满足以下要求:它必须有公开的可以优雅地关闭应用程序和用来获取应用程序运行状态指标【指标】的端点,它需要在启动完成的同时就完成在尤里卡的注册,在关闭时取消注册,最后,它还应该能够从空闲端口池中随机获取一个可用的端口。感谢弹簧引导,只需要约五分钟,我们可以轻松地实现所有这些机制。</p>
  <p> <br/>
  </p>
  <p>由于可以在一台机器上运行多个应用程序实例,所以我们必须保证端口号不冲突。幸运的是,弹簧引导为应用程序提供了这样的机制。我们只需要将application.yml中的server.port属性设置为0,因为我们的应用程序会在尤里卡中注册,并且发送唯一的标识instanceId,默认情况下这个唯一标识是将字段spring.cloud.client。主机名、spring.application.name和server.port拼接而成的。</p>
  <p>示例应用程序的当前配置如下所示。<br/>
  </p>
  <p>可以看的到,我通过将端口号替换为随机生成的数字来改变了生成instanceId字段值的模板。</p>
  
  <pre类=   春天:   应用程序:   名称:示例服务   服务器:   端口:${端口:0}   尤里卡:   实例:   instanceId: $ {spring.cloud.client.hostname}: $ {spring.application.name}: $ {random.int [999999]}      


  

  

为了启用弹簧引导驱动器,我们需要将下面的依赖添加到pom.xml。

        & lt; dependency>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-starter-actuator   & lt;/dependency>      

我们还必须通过HTTP API将属性management.endpoints.web.exposure.include设置为‘*’来暴露致动器的端点。现在,所有可用的指标名称列表都可以在/致动器/指标端点中找的到,每个指标的详细信息可以通过/致动器/标准/{metricName}端点查看。

  


  

  

除了查看指标端点外,弹簧引导驱动器还提供了停止应用程序的端点。然而,与其他端点不同的是,缺省情况下,此端点是不可用的。我们必须把management.endpoint.shutdown.enabled设为真实的。在那之后,我们就可以通过发送一个帖子请求到/致动器/关闭端点来停止应用程序了。

  

这种停止应用程序的方法保证了服务在停止之前从尤里卡服务器注销。

  


  

  

尤里卡是最受欢迎的发现服务器,特别是使春天用云来构建微服务的架构,所以,如果你已经有了微服务,并且想要为他们提供自动伸缩机制,那么尤里卡将是一个自然的选择。它包含每个应用程序注册实例的IP地址和端口号。为了启用尤里卡客户端,您只需要将下面的依赖项添加到pom.xml中。

        & lt; dependency>   & lt; groupId> org.springframework.cloud

微服务领域弹簧引导自动伸缩的实现方法