iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0
自我挑戰組

Ruby on Rails 與它們相關的東西 II系列 第 7

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

前言

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

說明

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

示意圖

實作

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

# 欲使用的 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/

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


上一篇
Day06 - 監控 Sidekiq 有無正常運作(或執行超過多久)
下一篇
Day08 - Gem-sidekiq-grouping 允許單個 sidekiq 處理多個相似(一樣)的 jobs
系列文
Ruby on Rails 與它們相關的東西 II30

尚未有邦友留言

立即登入留言