你必須很努力

Day07 - Gem-sidekiq-limit_fetch 限制 sidekiq queue 執行數量

2021/09/20
字數統計: 382閱讀時間: 1 min

前言

上篇介紹如何監控 Sidekiq,這篇介紹如何限制每個 queue 的上限,若是 Sidekiq ENTERPRISE 可以左轉離開了,本身就有提供,免另外透過第三方 Gem 處理

說明

比方說有個 worker 負責處理影像轉檔 (可參考去年鐵人賽文章),轉檔時會吃比較多資源,擔心影響 server 其它服務,除了限制 CPU 使用量外,也要限制同時執行的數量,故可透過 sidekiq-limit_fetch Gem 來完成

示意圖

實作

官方文件中得知,在需要使用的 worker 中加入 require 'sidekiq-limit_fetch',並在 sidekiq.yml 檔案中增加 limits 即可,範例可參考此 commit

1
2
3
4
5
6
7
8
9
10
# 欲使用的 worker
require 'sidekiq-limit_fetch'

---

# config/sidekiq.yml
# 若沒幫 worker queue 命名,會使用預設 default
:limits:
queue_name1: 5
queue_name2: 10

小結

起初是為了影像轉檔時,想到要限制 queue(佇列) 的使用上限而使用。

後續在打 API 至第三方時,遇到會連續觸發 N 個 worker (超過設定最多同時 10 個 concurrency),同時對方又回應比較慢時 (ex: 每個都數十秒甚至更長時間才回應),進而影響到其它服務,確認該 worker 不用即時處理時,便透過這個 Gem 來解決問題

參考資料

  1. sidekiq-limit_fetch GitHub

鐵人賽文章連結:https://ithelp.ithome.com.tw/articles/10264576
medium 文章連結:https://link.medium.com/WH74csl2Mjb
本文同步發布於 小菜的 Blog https://riverye.com/

備註:之後文章修改更新,以個人部落格為主

原文連結:https://riverye.com/2021/09/20/Day07-Gem-sidekiq-limit-fetch-限制-sidekiq-queue-執行數量/

發表日期:2021-09-20

更新日期:2021-09-24

CATALOG
  1. 1. 前言
  2. 2. 說明
  3. 3. 示意圖
  4. 4. 實作
  5. 5. 小結
  6. 6. 參考資料