Java 在spring boot应用程序中运行cron作业的微服务

Java 在spring boot应用程序中运行cron作业的微服务,java,spring,spring-boot,design-patterns,cron,Java,Spring,Spring Boot,Design Patterns,Cron,此处的应用程序设计问题: 我有一个spring boot应用程序,我的任务是设计一个cron作业,每1小时运行一次,从我们的RDS数据库收集一些数据,并将其发送到一个共享的红移实例。模式分析工具使用红移实例为相关人员提取一些数据并运行一些报告。 问题是:我应该为这份工作写一个新的微服务吗?我们不希望它成为我们应用程序的一部分,因为这个任务有点繁重,与实际应用程序无关。但是,如果我为此编写服务,当cron作业没有运行并且浪费资源时,它将处于空闲状态。lambda是否更适合于此?如果您托管在AWS上

此处的应用程序设计问题: 我有一个spring boot应用程序,我的任务是设计一个cron作业,每1小时运行一次,从我们的RDS数据库收集一些数据,并将其发送到一个共享的红移实例。模式分析工具使用红移实例为相关人员提取一些数据并运行一些报告。

问题是:我应该为这份工作写一个新的微服务吗?我们不希望它成为我们应用程序的一部分,因为这个任务有点繁重,与实际应用程序无关。但是,如果我为此编写服务,当cron作业没有运行并且浪费资源时,它将处于空闲状态。lambda是否更适合于此?

如果您托管在AWS上,那么在无服务器环境中使用[scheduled]作业运行lambda肯定是更好的选择。这将大大减少您的AWS账单,并为您的公司节省资金。如果需要转储这些报告,请使用S3。如果您需要密集的IOPS和/或多个可用性区域之间的可用性,请使用EFS。()

只需创建lambda并使用CloudWatch每小时安排一次。

如果您托管Kubernetes,您还可以创建CronJob

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

来源:

如果您托管在AWS上,那么在无服务器环境中使用[scheduled]作业运行它肯定是更好的选择。这将大大减少您的AWS账单,并为您的公司节省资金。如果需要转储这些报告,请使用S3。如果您需要密集的IOPS和/或多个可用性区域之间的可用性,请使用EFS。()

只需创建lambda并使用CloudWatch每小时安排一次。

如果您托管Kubernetes,您还可以创建CronJob

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - date; echo Hello from the Kubernetes cluster
          restartPolicy: OnFailure

来源:

调度程序将在后台运行,但不会消耗很少的资源。应该易于管理。这应该是您应该考虑的实际作业所消耗的资源。更正:但它将消耗非常少的资源。但与连续运行调度程序相关的aws成本我主要使用GCP,但我确信aws必须有一个托管服务,用于运行具有API的计划任务,以便为作业分配资源。但是,您可以启动一个最便宜的虚拟机并在其上运行调度程序。如果此任务不会频繁运行,那么为什么还要编写一个新服务(全天候运行)?使用基于计划(或触发器)运行此作业的托管工作流编排服务。计划程序将在后台运行,但不会消耗很少的资源。应该易于管理。这应该是您应该考虑的实际作业所消耗的资源。更正:但它将消耗非常少的资源。但与连续运行调度程序相关的aws成本我主要使用GCP,但我确信aws必须有一个托管服务,用于运行具有API的计划任务,以便为作业分配资源。但是,您可以启动一个最便宜的虚拟机并在其上运行调度程序。如果此任务不会频繁运行,那么为什么还要编写一个新服务(全天候运行)?使用基于计划(或触发器)运行此作业的托管工作流编排服务。我们在aws上,也在主机k8s上。但k8s作业的问题是,由于它不在应用程序中,因此无法访问rds以获取数据。我不确定这种理解是否正确。如果可能的话,最好放在集群内部,通过API层来实现,这样您就可以依赖持久的端点。但是,如果通过数据库进行集成是您唯一的选择,那么您可以创建一个lambda,并为其提供RDS只读(和/或写)角色。我们在aws上,也在主机k8s上。但k8s作业的问题是,由于它不在应用程序中,因此无法访问rds以获取数据。我不确定这种理解是否正确。如果可能的话,最好放在集群内部,通过API层来实现,这样您就可以依赖持久的端点。但是,如果通过数据库进行集成是您唯一的选择,那么您可以创建一个lambda,并将其授予RDS只读(和/或写)角色。