簡體   English   中英

在上一個任務將關閉后,在部署在 ECS fargate 中的 Java 應用程序內啟動計划作業

[英]Start scheduled job inside of a Java app deployed in ECS fargate after previous task will be shutdown

今天是個好日子。 我在 AWS ECS Fargate 實例中部署的 Java 應用程序有問題。 通過我們的配置,fargate 實例一直在運行,在重新部署期間,ECS 生成一個新實例(實例 A)等待它達到穩定狀態,然后關閉舊實例(實例 B)問題是主要方法這些實例中的一個啟動計划作業。 並且因為實例 A 達到穩定狀態,所以計划的作業由兩個實例執行一小段時間,直到 B 將關閉。 如何確保實例A僅在B不工作時才開始工作? java實例是dockerized到目前為止我試過

  1. Runtime.addShutdownHook - 不起作用,因為我們使用的專有 java 框架要求我們使用 shell 腳本啟動它(PID 1 提供給 shell 而不是 java 應用程序)
  2. Self written cluster healthcheck - 自寫代碼,從實例發送心跳消息並將它們保存在 Dynamo 中,一旦實例 B 不工作,實例 A 檢查最后的心跳時間戳,如果它超過 30 秒,則開始工作
  3. Event bridge - ecs 文檔說它將事件發布到事件橋。 但我的客戶不想為其他服務付費

所有建議將不勝感激!

  1. Runtime.addShutdownHook - 不起作用,因為我們使用的專有 java 框架要求我們使用 shell 腳本啟動它(PID 1 提供給 shell 而不是 java 應用程序)

您可以在 shell 腳本中捕獲SIGTERM ,並從中觸發 Java 應用程序的關閉。 但是,我認為直到容器被殺死之前才會發生這種情況,這對您的情況沒有任何幫助。 Java shutdown hook 所做的只是允許您在容器被殺死之前關閉一些東西,它直到部署過程的最后才會觸發,看起來您需要它在部署后立即運行開始。

  1. 自寫集群健康檢查 - 自寫代碼,從實例發送心跳消息並將它們保存在 Dynamo 中,一旦實例 B 不工作,實例 A 檢查最后的心跳時間戳,如果它超過 30 秒,則開始工作

如果您使用的是Quartz 調度程序,則可以為調度程序使用數據庫后端,它會自動處理這種並發事件。 聽起來您正在使用某種專有的內部調度程序解決方案,因此如果您想要像這樣的數據庫支持的作業並發解決方案,您將必須自己構建它,而 DynamoDB 是一個不錯的選擇。

  1. 事件橋 - ecs 文檔說它將事件發布到事件橋。 但我的客戶不想為其他服務付費

AWS 免費套餐: “默認情況下,AWS 服務發布的所有狀態更改事件都是免費的。”

如果您僅將 EventBridge 用於 AWS 服務事件,則使用 EventBridge 無需支付額外費用。 從字面上看,您已經在使用 EventBridge,因為 AWS 已經將所有這些 ECS 服務事件發布到 EventBridge。 您只是目前沒有在聽他們說話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM