GEARMAND(8) Gearmand GEARMAND(8)

gearmand - سرور صف کار و توزیع وظایف Gearman

گزینه‌های عمومی

تعداد اتصالات در صف انتظار (backlog) برای شنود.
بررسی آرگومان‌های خط فرمان و فایل پیکربندی و سپس خروج.
دیمن، جدا شدن از ترمینال و اجرا در پس‌زمینه.
تعداد توصیف‌کننده‌های مجاز فایل برای فرایند (مجموع کل اتصالات اندکی کمتر خواهد بود). مقدار پیش‌فرض حداکثر مقدار مجاز برای کاربر است.
چاپ این منوی راهنما.
تعداد تلاش‌ها برای اجرای کار پیش از آنکه سرور کار آن را حذف کند. این گزینه برای جلوگیری از متوقف شدن تمام ورکرها به دلیل یک کار معیوب مفید است. حالت پیش‌فرض نامحدود است.
فایل گزارش (log) برای ثبت خطاها و اطلاعات. فعال‌سازی این گزینه همچنین نخستین سطح پرحرفی (verbose) را اجباری می‌کند.
نشانی‌ای که سرور باید روی آن شنود کند. پیش‌فرض INADDR_ANY است.
درگاهی که سرور باید روی آن شنود کند.
فایلی برای ذخیره شناسه فرایند (PID).
بارگذاری ماژول پروتکل.
تخصیص کارها به ترتیب نوبت‌گردشی (round-robin) به ازای هر اتصال ورکر. از نسخه 2.0.0، این رفتار پیش‌فرض است و غیرفعال نمی‌شود. این گزینه خط فرمان هیچ کاری انجام نمی‌دهد و نگه‌داشتن آن صرفاً برای سازگاری با نسخه‌های پیشین است.
نوع صف ماندگار برای استفاده.
تعداد نخ‌های ورودی/خروجی (I/O) برای استفاده. پیش‌فرض=4.
تغییر به کاربر داده‌شده پس از راه‌اندازی.
تنظیم سطح پرحرفی. پیش‌فرض بر روی ERROR است. مقادیر FATAL، ALERT، CRITICAL، ERROR، WARNING، NOTICE، INFO و DEBUG را می‌پذیرد.
نمایش نسخه gearmand و خروج.
تعداد ورکرهایی که به ازای هر کار دریافتی باید بیدار شوند. پیش‌فرض بیدار کردن تمام ورکرهای در دسترس است.
فعال‌سازی keepalive روی سوکت‌ها.
--keepalive-idle arg (=-1)
در صورت فعال بودن keepalive، مقدار TCP_KEEPIDLE را برای سیستم‌هایی که از آن پشتیبانی می‌کنند تعیین می‌کند. مقدار -1 نشان می‌دهد که یا سیستم از آن پشتیبانی نمی‌کند یا هنگام دریافت مقدار پیش‌فرض خطایی رخ داده است.
--keepalive-interval arg (=-1)
در صورت فعال بودن keepalive، مقدار TCP_KEEPINTVL را برای سیستم‌هایی که از آن پشتیبانی می‌کنند تعیین می‌کند. مقدار -1 نشان می‌دهد که یا سیستم از آن پشتیبانی نمی‌کند یا هنگام دریافت مقدار پیش‌فرض خطایی رخ داده است.
--keepalive-count arg (=-1)
در صورت فعال بودن keepalive، مقدار TCP_KEEPCNT را برای سیستم‌هایی که از آن پشتیبانی می‌کنند تعیین می‌کند. مقدار -1 نشان می‌دهد که یا سیستم از آن پشتیبانی نمی‌کند یا هنگام دریافت مقدار پیش‌فرض خطایی رخ داده است.

HTTP:

درگاه برای شنود.

sqlite

فایل پایگاه‌داده برای استفاده.
جدول برای استفاده.

Memcached(libmemcached)

فهرست سرورهای Memcached برای استفاده.

Drizzle/MySQL(libdrizzle)

میزبان (Host) سرور.
درگاه سرور (به‌طور پیش‌فرض Drizzle).
سوکت دامنه یونیکس (UDS) برای سرور.
نام کاربری برای احراز هویت.
گذرواژه برای احراز هویت.
طرحواره/پایگاه‌داده برای استفاده.
جدول برای استفاده.
استفاده از پروتکل MySQL.

Postgres

رشته اطلاعات اتصال PostgreSQL.
جدول برای استفاده.

tokyocabinet

نام فایل پایگاه‌داده. [برای راهنمای نام‌گذاری به tcadb(1) و ()tcadbopen مراجعه کنید]
بهینه‌سازی پایگاه‌داده هنگام باز کردن. [پیش‌فرض=true]

ابزار Gearman یک چارچوب برنامه‌نویسی عمومی فراهم می‌کند تا کارها به دیگر ماشین‌ها یا فرایندهایی که برای انجام آن مناسب‌تر هستند واگذار شوند. این ابزار امکان می‌دهد کارها را به صورت موازی انجام دهید، توازن بار پردازشی را برقرار کنید و توابع را میان زبان‌های گوناگون فراخوانی نمایید. از این ابزار می‌توان در کاربردهای متنوعی بهره برد؛ از وب‌سایت‌های با دسترسی‌پذیری بالا گرفته تا انتقال رویدادهای همانندسازی پایگاه‌داده. به بیانی دیگر، این سامانه دستگاه عصبی چگونگی ارتباط در پردازش‌های توزیع‌شده است. چند ویژگی برجسته درباره Gearman:

  • متن‌باز - کاملاً رایگان و آزاد است! (در هر دو معنای کلمه) Gearman دارای یک جامعه متن‌باز فعال است که در صورت نیاز به کمک یا تمایل به مشارکت، پیوستن به آن آسان است.
  • چندزبانه - رابط‌هایی برای زبان‌های متعددی فراهم است و این فهرست پیوسته گسترش می‌یابد. همچنین می‌توانید برنامه‌های ناهمگونی بنویسید که در آن‌ها کلاینت‌ها کار را به یک زبان ارسال کرده و ورکرها آن کار را به زبان دیگری اجرا کنند.
  • انعطاف‌پذیر - به هیچ الگوی طراحی خاصی وابسته نیستید. می‌توانید برنامه‌های توزیع‌شده را با هر مدلی که انتخاب می‌کنید به‌سرعت راه‌اندازی نمایید که یکی از آن گزینه‌ها Map/Reduce است.
  • سریع - ابزار Gearman دارای پروتکل و رابطی ساده همراه با سروری بهینه‌شده به زبان C است تا سربار برنامه شما را به حداقل برساند.
  • قابل جاسازی - از آنجا که Gearman سریع و سبک است، برای برنامه‌ها در هر اندازه‌ای عالی است. همچنین افزودن آن به برنامه‌های موجود با کمترین سربار بسیار آسان است.
  • بدون نقطه شکست منفرد - ابزار Gearman نه‌تنها به مقیاس‌پذیری سیستم‌ها کمک می‌کند، بلکه این کار را به شیوه‌ای خطاپذیر (fault tolerant) انجام می‌دهد.

گزینه -t در gearmand به شما امکان می‌دهد چندین نخ I/O را مشخص کنید؛ این ویژگی به طور پیش‌فرض فعال است. در حال حاضر سه نوع نخ در سرور کار وجود دارد:

نخ شنود و مدیریت - فقط یکی
نخ I/O - می‌تواند چندین مورد باشد
نخ پردازش - فقط یکی

هنگامی که هیچ گزینه -t یا -t 0 داده نشود، هر سه نوع نخ درون یک نخ واحد اجرا می‌شوند. هنگامی که -t 1 داده شود، یک نخ برای شنود/مدیریت و یک نخ برای I/O و پردازش وجود خواهد داشت. هنگامی که -t 2 داده شود، برای هر یک از انواع نخ‌های بالا یک نخ وجود خواهد داشت. برای مقادیر بالاتر از 2 در گزینه -t، نخ‌های I/O بیشتری ایجاد می‌شوند.

نخ شنود و مدیریت عمدتاً مسئول پذیرش اتصالات جدید و تخصیص آن اتصالات به یک نخ I/O است (اگر چند نخ وجود داشته باشد). این نخ همچنین شروع به کار و خاموش شدن سرور را هماهنگ می‌کند. این نخ دارای نمونه‌ای از libevent برای مدیریت رویدادهای سوکت و سیگنال‌ها روی یک لوله (pipe) داخلی خواهد بود. از این لوله برای بیدار کردن نخ یا هماهنگی خاموش شدن استفاده می‌شود.

نخ I/O مسئول اجرای فراخوانی‌های سیستمی خواندن و نوشتن روی سوکت‌ها و تجزیه اولیه بسته‌ها است. به محض آن‌که بسته تجزیه شود، درون یک صف ناهمگام (asynchronous) برای نخ پردازش قرار می‌گیرد (هر نخ صف اختصاصی خود را دارد تا رقابت و تداخل به کمترین حد برسد). هر نخ I/O مانند نخ شنود دارای نمونه‌ای اختصاصی از libevent برای مدیریت رویدادهای سوکت و سیگنال‌ها روی یک لوله داخلی است.

نخ پردازش نباید هیچ فراخوانی سیستمی درون خود داشته باشد (به استثنای فراخوانی گاه‌به‌گاه ()brk برای حافظه بیشتر)، و فهرست‌ها و جدول‌های درهم‌سازی (hash tables) گوناگون را که برای ردگیری کلیدهای یکتا، دسته‌های کار (job handles)، توابع و صف‌های کار به کار می‌روند مدیریت می‌کند. تمام بسته‌هایی که باید به اتصالات بازگردانده شوند، درون یک صف ناهمگام برای نخ I/O قرار می‌گیرند. نخ I/O این بسته‌ها را دریافت کرده و آن‌ها را روی سوکت متصل بازمی‌فرستد. تمام بسته‌ها از میان نخ پردازش عبور می‌کنند چرا که این نخ حاوی اطلاعات لازم برای پردازش بسته‌ها است. این امر به دلیل ماهیت پیچیده فهرست‌ها و جدول‌های درهم‌سازی گوناگون است. اگر چندین نخ آن‌ها را تغییر می‌دادند، سربار قفل‌گذاری به احتمال بسیار عملکردی بدتر از قرار داشتن در یک نخ منفرد ایجاد می‌کرد (و کد را نیز پیچیده می‌ساخت). در آینده ممکن است کارهای بیشتری به نخ‌های I/O واگذار شود و نخ پردازش کارکرد حداقلی را برای مدیریت آن جدول‌ها و فهرست‌ها حفظ کند. تاکنون این مورد یک گلوگاه چشمگیر نبوده است؛ یک ماشین ۱۶ هسته‌ای اینتل قادر است بیش از ۵۰ هزار کار در ثانیه را پردازش کند.

برای برقراری ایمنی نخ‌ها (thread safety) هنگام تولید UUID، دیمن uuidd باید در حال اجرا باشد.

درون سرور کار Gearman، تمام صف‌های کار در حافظه ذخیره می‌شوند. این بدان معناست که اگر سرور در حالی که کارهای در انتظار اجرا دارد بازراه‌اندازی شود یا از کار بیفتد (crash)، آن کارها از دست رفته و هرگز توسط یک ورکر اجرا نمی‌شوند. صف‌های ماندگار افزوده شدند تا امکان ذخیره کارهای پس‌زمینه در یک صف پایدار بیرونی فراهم شود تا پس از راه‌اندازی مجدد سرور یا از کار افتادن آن حفظ شوند. صف ماندگار فقط برای کارهای پس‌زمینه فعال است زیرا کارهای پیش‌زمینه یک کلاینت متصل دارند. اگر یک سرور کار از دسترس خارج شود، کلاینت می‌تواند این موضوع را تشخیص دهد و کار پیش‌زمینه را در جای دیگری مجدداً اجرا کند (یا خطایی را به فراخواننده اصلی گزارش دهد). از سوی دیگر، کارهای پس‌زمینه کلاینت متصلی ندارند و صرفاً انتظار می‌رود پس از ثبت، اجرا شوند.

صف ماندگار به این صورت عمل می‌کند که درست پیش از قرار دادن یک کار جدید در صف داخلیِ کارهای در انتظار اجرا، یک تابع بازخوانی (callback) ماژول را فراخوانی می‌کند. این ویژگی به ماژول امکان می‌دهد کاری را که در آستانه اجرا قرار دارد به شیوه‌ای ماندگار ذخیره کند تا بعداً بتوان آن را در حین راه‌اندازی مجدد بازپخش کرد. به محض ذخیره شدن از طریق ماژول، کار در صف فعال و آماده اجرا قرار می‌گیرد و در صورت نیاز، ورکرهای در دسترس را بیدار می‌کند. به محض تکمیل موفقیت‌آمیز کار توسط یک ورکر، تابع بازخوانی دیگری از ماژول فراخوانی می‌شود تا به ماژول اطلاع دهد که کار انجام شده و می‌تواند حذف شود. اگر یک سرور کار میان این دو فراخوانی برای یک کار از کار بیفتد یا راه‌اندازی مجدد شود، کارها در شروع بعدی سرور کار مجدداً بارگذاری می‌شوند. هنگامی که سرور کار راه‌اندازی می‌شود، یک تابع بازخوانی بازپخش را در ماژول فراخوانی می‌کند تا فهرستی از تمام کارهای تکمیل‌نشده را ارائه دهد. این فهرست برای پر کردن صف حافظه داخلی از کارهای آماده اجرا استفاده می‌شود. به محض اتمام این بازپخش، سرور کار مقداردهی اولیه خود را به پایان می‌رساند و کارها پس از اتصال ورکرها آماده اجرا خواهند بود (صف باید در همان وضعیتی باشد که پیش از خرابی قرار داشت). این کارها طبق روال عادی پس از تکمیل از صف ماندگار حذف می‌شوند. نکته: حذف کارها از فضای ذخیره‌سازی صف ماندگار در حین اجرای سرور، آن‌ها را از صف درون حافظه حذف نخواهد کرد.

صف‌ها با استفاده از یک رابط پیمانه‌ای (ماژولار) پیاده‌سازی شده‌اند تا افزودن ذخیره‌سازهای جدید داده برای صف ماندگار آسان باشد.

یک ماژول صف ماندگار با پاس دادن گزینه -q یا --queue-type به gearmand فعال می‌شود. دستور gearmand --help را اجرا کنید تا ببینید کدام ماژول‌های صف در سیستم شما پشتیبانی می‌شوند. اگر گزینه‌های مربوط به ماژول مد نظر شما موجود نیست، باید وابستگی‌های آن را نصب کرده و سپس بسته gearmand را دوباره کامپایل کنید.

رابط افزونه پروتکل به شما امکان می‌دهد توابع ارسال و دریافت بسته را در دست بگیرید و بافرها را مطابق با نیازهای پروتکل قالب‌بندی کنید. توابع اصلی خواندن و نوشتن می‌توانند (و باید) توسط افزونه پروتکل استفاده شوند.

این افزونه پروتکل به شما امکان می‌دهد درخواست‌های HTTP را به کارهای Gearman نگاشت کنید. این افزونه در حال حاضر فقط از ارسال کار توسط کلاینت پشتیبانی می‌کند، اما ممکن است در آینده برای پشتیبانی از انواع دیگر درخواست گسترش یابد. این افزونه می‌تواند هر دو داده‌های GET و POST را مدیریت کند که دومی برای ارسال بار کاری به سرور کار استفاده می‌شود. آدرس URL درخواست‌شده به تابعی که فراخوانی می‌شود ترجمه می‌گردد.

برای نمونه، درخواست:

POST /reverse HTTP/1.1
Content-Length: 12
Hello world!

به یک درخواست ارسال کار برای تابع «reverse» و بار کاری «!Hello world» ترجمه می‌شود. پاسخ این درخواست به صورت زیر خواهد بود:

HTTP/1.0 200 OK
X-Gearman-Job-Handle: H:lap:4
Content-Length: 12
Server: Gearman/0.8
!dlrow olleH

هدرهای زیر را می‌توان برای تغییر رفتار کار ارسال کرد:

* X-Gearman-Unique: <unique key>
* X-Gearman-Background: true
* X-Gearman-Priority: <high|low>

اولویت تخصیص کار به صورت سراسری در میان توابع ثبت‌شده اعمال می‌شود. یک کار با اولویت بالا برای هر تابعی، پیش از کارهای با اولویت عادی یا پایین برای توابع دیگر تخصیص داده می‌شود.

برای نمونه، جهت اجرای یک کار پس‌زمینه با اولویت پایین، درخواست زیر می‌تواند ارسال شود:

POST /reverse HTTP/1.1
Content-Length: 12
X-Gearman-Background: true
X-Gearman-Priority: low
Hello world!

پاسخ این درخواست داده‌ای همراه خود نخواهد داشت چرا که یک کار پس‌زمینه بوده است:

HTTP/1.0 200 OK
X-Gearman-Job-Handle: H:lap:6
Content-Length: 0
Server: Gearman/0.8

پروتکل HTTP باید به عنوان یک قابلیت آزمایشی در نظر گرفته شود.

برای کسب اطلاعات بیشتر لطفاً بررسی کنید: https://gearman.org/gearmand https://gearman.org/gearmand

gearman(1) gearadmin(1) libgearmand(3)

Data Differential http://www.datadifferential.com

2011-2014, Data Differential, http://www.datadifferential.com

July 22, 2026 2.0.0