前言
上篇介紹如何監控 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 來解決問題
參考資料
鐵人賽文章連結:https://ithelp.ithome.com.tw/articles/10264576
medium 文章連結:https://link.medium.com/WH74csl2Mjb
本文同步發布於 小菜的 Blog https://riverye.com/
備註:之後文章修改更新,以個人部落格為主