اولویتبندی و عدالت در Task Queue تمپورال
خلاصهٔ کاملتر
تیمهایی که با تمپورال اپلیکیشنهای بزرگ میسازن، اغلب به یه مشکل میخورن: یه Task Queue ساده بدون هیچ کنترلی روی اجرا کافی نیست. نتیجهاش میشه راهحلهای خانگی پیچیده — چندین Queue جداگانه، منطق زمانبندی سفارشی، و هنوز هم یه تنانت پرحجم بیسروصدا بقیه رو کند میکنه. حالا تمپورال با انتشار رسمی Task Queue Priority و Fairness این مشکلات رو مستقیم حل کرده.
Priority (اولویتبندی) بهت اجازه میده یه عدد صحیح بین 1 (بالاترین) تا 5 (پایینترین) به Workflow یا Activity بدی. تسکها به ترتیب اولویت پردازش میشن — مثلاً همه تسکهای priority_key=1 قبل از تسکهای priority_key=4 اجرا میشن. این قابلیت برای سناریوهایی مثل پردازش پرداخت در کنار sync موجودی، یا جداسازی سطوح سرویس Enterprise از Free بدون زیرساخت جداگانه خیلی به درد میخوره.
await client.start_workflow(
MyWorkflow.run,
args="hello",
id="my-workflow-id",
task_queue="my-task-queue",
priority=Priority(priority_key=1), # highest priority
)Fairness (توزیع عادلانه) یه لایه دیگه روی Priority اضافه میکنه. با تعریف Fairness Key برای هر تنانت یا گروه منطقی، یه الگوریتم weighted round-robin تضمین میکنه که هر Key سهم متناسبی از زمان اجرا داشته باشه — حتی اگه تنانت A هزار Workflow در صف داشته باشه و تنانت B فقط دهتا. با Fairness Weight هم میتونی به بعضی گروهها سهم بیشتری بدی.
این دو قابلیت وقتی باهم استفاده بشن قویتر میشن: Priority ترتیب اجرا رو مشخص میکنه، Fairness توزیع رو بین تنانتها عادلانه نگه میداره. یعنی میتونی هم سطوح سرویس متفاوت داشته باشی، هم مطمئن باشی هیچ تنانتی از منابع کاملاً محروم نمیشه.
priority=Priority(
priority_key=1,
fairness_key="tenant-acme",
fairness_weight=5.0,
)هر دو قابلیت با Task Queueهای فعلی سازگارن و نیازی به تغییر کد Worker نداری. برای Temporal Cloud کافیه Priority و Fairness Key رو تنظیم کنی؛ برای سرور self-hosted باید گزینههای matching.useNewMatcher و matching.enableMigration رو فعال کنی. توجه داشته باش که استفاده از Fairness در Temporal Cloud هزینه اضافه داره (به ازای هر ساعت فعال بودن، ۰.۱ Action اضافه به ازای هر Action محاسبه میشه).
نکات کلیدی:
- Priority سطحهای 1 تا 5 داره؛ از یه ساختار ساده شروع کن و بعداً پیچیدهترش کن
- Fairness با Fairness Key تنانتها رو از هم جدا میکنه و با Fairness Weight سهم هر کدوم رو تنظیم میکنه
- هیچ تغییری در کد Worker لازم نیست — Workers خودشون به Priority و Fairness احترام میذارن
- این قابلیتها زیر بار سنگین بیشترین تأثیر رو دارن؛ حتماً زیر لود واقعی تست کن
- برای self-hosted، تنظیمات dynamic configuration سرور رو فراموش نکن




