6 سیستم برتر صف برای توسعه دهندگان Backend

آیا به دنبال یک سیستم صف بندی هستید؟ یا شاید شما به دنبال یک بهتر هستید؟ در اینجا تمام اطلاعات مورد نیاز شما وجود دارد!


سیستم های صف بندی بهترین راز توسعه باطن هستند.

بدون تلاش برای نوشتن شعری در ستایش سیستم های صف ، من می گویم که یک توسعه دهنده باطن کوچک پس از یادگیری ادغام صف در سیستم ، به یک توسعه دهنده سطح متوسط ​​تبدیل می شود. صف ها باعث بهبود تجربه مشتری می شوند (خواهیم دید که چگونه) ، پیچیدگی را کاهش داده و قابلیت اطمینان در یک سیستم را بهبود می بخشیم.

مطمئناً ، برای برنامه های وب بسیار ساده با وب سایت های تقریباً صفر و ترافیک و بروشور ، صف ها می توانند کلی باشند (یا حتی اگر در یک محیط میزبانی مشترک به طور معمول نصب کنید ، نصب نیستند) ، اما برنامه های غیر مهم همه از صف به دست خواهند آورد. سیستم ها ، و برنامه های بزرگ بدون صف درگیر بودن غیر ممکن است.

قبل از شروع ، سلب مسئولیت: اگر شما از قبل با سیستم های صف بندی راحت هستید و می خواهید گزینه های مختلفی را با یکدیگر مقایسه کنید ، بخش های مقدماتی بعدی خواب اصلی را به شما القا می کند. �� بنابراین احساس راحتی کنید که به جلو بروید. مقدمات مقدماتی برای کسانی است که فقط ایده مضراتی در مورد سیستم های صف بندی دارند یا فقط در گذر از آن نام را شنیده اند.

سیستم صف بندی چیست؟?

بیایید با درک اینکه صف چیست.

صف یک ساختار داده در علم کامپیوتر است که به خوبی از صف های دنیای واقعی که در اطراف ما می بینیم ، تقلید می کند. برای مثال اگر به پیشخوان بلیط بروید ، متوجه خواهید شد که باید در انتهای صف بایستید ، در حالی که شخص در ابتدای صف ابتدا بلیط را دریافت می کند. این همان چیزی است که ما همچنین آن را پدیده “اولین آمده ، برای اولین بار خدمت می کنیم” می نامیم. در علم رایانه ، می توان برنامه هایی نوشت که وظایف خود را مانند این در صف ذخیره می کند ، پردازش آنها یک به یک به همان پایه اول سرویس های اول.

توجه داشته باشید که صف هیچ پردازشی واقعی را انجام نمی دهد. این فقط ذخیره موقت انواع است که در آن وظایف صبر می کنند تا زمانی که چیزی انتخاب شوند. اگر همه اینها کمی انتزاعی به نظر می رسد ، نگران نباشید. این یک مفهوم انتزاعی است ، اما نمونه های واضح را در بخش بعدی مشاهده خواهیم کرد. ��

چرا به سیستم های صف بندی نیاز دارید؟?

بدون اینکه به توضیحات بسیار طولانی بپردازم ، می گویم نیاز اصلی سیستم های صف بندی به دلیل پردازش پس زمینه ، اجرای موازی و بهبودی از خرابی است. بیایید با کمک مثال ها به این موارد نگاه کنیم:

پردازش پس زمینه

فرض کنید که شما در حال انجام یک کمپین بازاریابی تجارت الکترونیکی در جایی هستید که زمان مهم باشد ، و این که برنامه شما به گونه ای ساخته شده است که درست قبل از اینکه مشتری پرداخت را پرداخت کند ، یک ایمیل تأیید را اخراج کنید و صفحه “Thank you” نشان داده شده است. اگر سرور نامه ای که به آن وصل می شوید خراب شود ، صفحه وب فقط می میرد و تجربه کاربر را خراب می کند.

تعداد بالای درخواستهای پشتیبانی را که می خواهید تصور کنید! در این حالت ، بهتر است این وظیفه ارسال ایمیل را به صف شغلی سوق دهید و صفحه موفقیت را به مشتری نشان دهید.

اعدام موازی

بسیاری از توسعه دهندگان ، به ویژه کسانی که بیشتر برنامه های کم ترافیک را ساده تر کد می کنند ، عادت دارند از کارهای cron برای پردازش پس زمینه استفاده کنند. این خوب است تا اندازه ورودی آنقدر زیاد شود که پاک نشود. به عنوان مثال ، فرض کنید شما یک کار cron دارید که گزارش های تجزیه و تحلیل را کامپایل می کند و ایمیل آنها را برای کاربران ارسال می کند و سیستم شما می تواند 100 گزارش در دقیقه پردازش کند.

به محض اینکه برنامه شما به طور متوسط ​​بیش از 100 درخواست در هر دقیقه شروع به کار کرد ، بیشتر و بیشتر به عقب افتاد و هرگز نمی توانید تمام کارها را انجام دهید.

در یک سیستم صف بندی ، با راه اندازی چندین کارگر ، می توانید از این وضعیت جلوگیری کنید ، که می تواند هر یک شغل را انتخاب کند (شامل 100 گزارش برای انجام هر کار) و به صورت موازی کار کنید تا خیلی زود ، کار را تمام کنید..

بهبودی از شکست

ما عموماً به عنوان برنامه نویسان وب از شکست فکر نمی کنیم. ما به طور کلی این موضوع را تصدیق می کنیم که سرورهای ما و API هایی که از آنها استفاده می کنیم همیشه آنلاین باشند. اما واقعیت فرق می کند – قطع ارتباطات شبکه بسیار رایج است و API های عالی که به آنها اعتماد دارید ممکن است به دلیل مشکلات زیرساختی کاهش یابد (قبل از اینکه بگویید “من من نیستم”) ، فراموش نکنید که قطع بزرگ آمازون S3) بنابراین ، بازگشت به مثال گزارش ، اگر بخشی از نسل گزارش شما نیاز به اتصال به API پرداخت ها داشته باشد و این اتصال به مدت 2 دقیقه کاهش یابد ، چه اتفاقی می افتد برای 200 گزارش که شکست خورده اند?

سیستم های صف بندی ، هر چند دارای سربار قابل توجهی است. منحنی یادگیری کاملاً شیب دار است زیرا شما در حال ورود به یک دامنه کاملاً جدید هستید ، پیچیدگی برنامه و استقرار شما افزایش می یابد و شغل های صف بندی شده همیشه با دقت 100٪ قابل کنترل نیستند. گفته می شود ، موقعیت هایی وجود دارد که ساختن یک برنامه بدون صف فقط امکان پذیر نیست.

با این کار ، بیایید امروز به برخی از گزینه های رایج در میان سیستم های پشتیبان / صف منتظر بگردیم.

ردیس

ردیس به عنوان یک فروشگاه دارای ارزش کلیدی شناخته می شود که فقط رشته های داده را بدون اطلاع از ساختار داده ها ، ذخیره ، به روز می کند و بازیابی می کند. اگرچه شاید صحیح تر باشد ، امروز Redis از ساختار داده های کارآمد و بسیار مفیدی مانند لیست ها ، مجموعه های مرتب شده و حتی یک سیستم Pub-Sub برخوردار است و آن را برای اجرای صف بسیار مطلوب می کند..

مزایای Redis عبارتند از:

  • بانک اطلاعاتی کاملاً در حافظه ، منجر به خواندن / نوشتن سریعتر می شود.
  • بسیار کارآمد: به راحتی می تواند بیش از 100000 عملیات خواندن و نوشتن در هر ثانیه را پشتیبانی کند.
  • طرح استقامت بسیار انعطاف پذیر. می توانید در صورت بروز خرابی یا حداکثر کارایی را با هزینه از بین رفتن اطلاعات ممکن انجام دهید یا در حالت کاملاً محافظه کار تنظیم کنید تا عملکرد را برای قوام قربانی کنید..
  • خوشه های خارج از جعبه پشتیبانی می کنند

لطفاً توجه داشته باشید که Redis هیچ گونه انتزاع پیام رسانی / صف / ریکاوری ندارد ، بنابراین یا باید خود از یک بسته استفاده کنید یا خود یک سیستم سبک وزن بسازید. به عنوان مثال ، Redis پشتیبان اصلی صف پیش فرض برای چارچوب Laravel PHP است ، جایی که برنامه ای توسط نویسندگان چارچوب اجرا شده است..

یادگیری Redis آسان است.

RabbitMQ

چند تفاوت ظریف بین Redis و RabbitMQ, بیایید ابتدا آنها را از کار خارج کنیم.

اول از همه ، RabbitMQ نقش تخصصی تر و تعریف شده تری دارد ، بنابراین ساخته شده است تا آن را منعکس کند – پیام رسانی. به عبارت دیگر ، نکته شیرین آن این است که به عنوان واسطه بین دو سیستم عمل کنید ، این مورد برای Redis که به عنوان بانک اطلاعاتی عمل می کند ، نیست. در نتیجه ، RabbitMQ امکانات دیگری را که در Redis وجود ندارد ، فراهم می کند: مسیریابی پیام ، امتحان مجدد ، توزیع بار ، و غیره.

اگر در مورد آن فکر کنید ، صف های وظیفه را می توان به عنوان یک سیستم پیام رسانی نیز تصور کرد ، جایی که می توان زمانبندی ، کارگران و “ارسال کنندگان” شغل را به اشخاص شرکت کننده در ارسال پیام اندیشه کرد..

RabbitMQ مزایای زیر را دارد:

  • انتزاعات بهتر برای ارسال پیام ، کاهش کار در سطح برنامه در صورت عبور پیامرسانی همان چیزی است که شما نیاز دارید.
  • نسبت به خرابی و قطع برق (نسبت به Redis ، حداقل به طور پیش فرض) مقاوم تر است.
  • حمایت خوشه ای و فدراسیون از استقرار توزیع شده.
  • ابزارهای مفیدی برای مدیریت و نظارت بر استقرار شما.
  • تقریباً از همه زبانهای برنامه نویسی غیر مهم در آنجا پشتیبانی کنید.
  • استقرار با ابزار مورد نظر خود (داکر ، سرآشپز ، عروسکی و غیره).

چه موقع از RabbitMQ استفاده کنیم؟ من می گویم این انتخاب عالی است وقتی بدانید که باید از انتقال پیام ناهمزمان استفاده کنید اما برای مقابله با پیچیدگی برجسته برخی از گزینه های دیگر صف در این لیست آماده نیستید (به تصویر زیر مراجعه کنید).

ActiveMQ

اگر وارد فضای سازمانی (یا ساخت یک برنامه بسیار پراکنده و بزرگ) هستید ، و نمی خواهید همیشه این چرخ را دوباره اختراع کنید (و در طول راه اشتباه کنید), ActiveMQ ارزش نگاه کردن دارد.

اینجاست که ActiveMQ برتری دارد:

  • این در جاوا پیاده سازی شده است و به همین ترتیب ادغام جاوا کاملاً مرتب است (از استاندارد JMS پیروی می کند).
  • پروتکل های چندگانه پشتیبانی می شوند: AMQP ، MQTT ، STOMP ، OpenWire ، و غیره.
  • امنیت ، مسیریابی ، انقضای پیام ، آنالیز و غیره را از جعبه کنترل خارج می کند.
  • پشتیبانی پنهان از الگوهای پیام رسان توزیع شده محبوب ، موجب صرفه جویی در وقت و اشتباهات پر هزینه شما.

این بدان معنا نیست که ActiveMQ فقط برای جاوا در دسترس است. این شرکت دارای اکوسیستم های Python ، C / C ++ ، Node ، .Net و سایر سیستم های مشتری است ، بنابراین نباید نگرانی هایی برای سقوط احتمالی در آینده وجود داشته باشد. علاوه بر این ، ActiveMQ بر روی استانداردهای کاملاً باز ساخته شده است و ایجاد مشتری سبک وزن شما باید آسان باشد.

همه آنچه گفته و انجام شده است ، لطفاً توجه داشته باشید که ActiveMQ فقط یک کارگزار است و یک پس زمینه شامل نمی شود. برای ذخیره پیام ها هنوز باید از یکی از پشتیبان های پشتیبانی شده استفاده کنید. من آن را در اینجا گنجانده ام زیرا به یک زبان برنامه نویسی خاص گره خورده است (مانند سایر راه حلهای محبوب مانند کرفس ، صدیق و غیره)

MQ آمازون

MQ آمازون در اینجا شایسته ذکر سریع اما مهم است. اگر فکر می کنید ActiveMQ یک راه حل ایده آل برای نیازهای شما است اما نمی خواهید با ساختمان سازی مقابله کنید و زیرساخت ها را خودتان حفظ کنید ، آمازون MQ سرویس مدیریتی را برای انجام این کار ارائه می دهد. این پروتکل از تمام پروتکل هایی که ActiveMQ انجام می دهد پشتیبانی می کند – به هیچ وجه تفاوت در ویژگی ها وجود ندارد – زیرا از خود ActiveMQ در زیر سطح استفاده می کند.

مزیت این است که این سرویس مدیریت شده است ، بنابراین نیازی به نگرانی در مورد چیز دیگری نیستید. این امر برای آن دسته از اعزام هایی که در AWS قرار دارند ، حتی بیشتر حس می کند ، زیرا می توانید سایر خدمات و پیشنهادات را مستقیماً از محل استقرار خود استفاده کنید (برای مثال انتقال سریعتر داده ها).

آمازون SQS

آیا نمی توانیم انتظار داشته باشیم که آمازون وقتی به بخش های مهم زیرساخت می رسد بی سر و صدا بنشیند ، می توانیم؟ ��

و بنابراین ما آمازون SQS, که یک سرویس صف کاملاً میزبان و ساده (کاملاً به معنای واقعی کلمه) توسط غول مشهور AWS است. یک بار دیگر ، تفاوت های ظریف مهم هستند ، بنابراین توجه داشته باشید که SQS مفهوم انتقال پیام را ندارد. مانند Redis ، این یک پس زمینه ساده برای پذیرش و توزیع مشاغل در صف است.

بنابراین ، چه زمانی می خواهید از Amazon SQS استفاده کنید؟ در اینجا چند دلیل آورده شده است:

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

در کل ، Amazon SQS گزینه ای مناسب برای هرکسی است که می خواهد صف های شغلی را در سیستم خود بگنجاند و نیازی به نگرانی در مورد نصب / نظارت کارها به خودی خود نداشته باشد..

Beanstalkd

Beanstalkd مدت زمان طولانی است که در صف آزمایش قرار دارد و یک پشتوانه آزمایشی سریع و سریع برای صف کار است. چند ویژگی از Beanstalkd وجود دارد که باعث می شود تفاوت قابل توجهی با Redis وجود داشته باشد:

  • این یک سیستم صف کار و هیچ چیز دیگری نیست. شما مشاغل را به سمت آن سوق می دهید ، که بعدا توسط کارگران استخدام می شوند. بنابراین اگر برنامه شما حتی نیاز کمی به ارسال پیام دارد ، می خواهید از Beanstalkd خودداری کنید.
  • هیچ ساختار داده پیشرفته مانند مجموعه ، صف اولویت و غیره وجود ندارد.
  • Beanstalkd همان چیزی است که صف اول ، اول بیرون (FIFO) خوانده می شود. هیچ راهی برای ترتیب کار با اولویت وجود ندارد.
  • هیچ گزینه ای برای خوشه بندی وجود ندارد.

گفتنی است که Beanstalkd برای صفحات ساده و سریع برای پروژه های ساده ای که روی یک سرور واحد زندگی می کنند ، یک سیستم صف نرم و صاف و سریع ایجاد می کند. برای بسیاری ، سریعتر و باثبات تر از Redis است. بنابراین اگر دارید مسائل با Redis که شما به نظر می رسد مهم نیست که چه چیزی حل شود ، و نیازهای شما ساده است ، Beanstalkd ارزش دارد.

نتیجه

اگر این مورد را تا کنون خوانده اید (یا به اینجا خواندن رسیده اید) ، یک فرصت بسیار خوب وجود دارد که شما به سیستم های صف بندی علاقه دارید یا به یکی از آنها نیاز دارید. در این صورت ، لیست این صفحه به خوبی در خدمت شما خواهد بود ، مگر اینکه به دنبال یک سیستم صف برای زبان / چارچوب باشید.

ای کاش می توانم به شما بگویم که صف بندی ساده و 100٪ قابل اعتماد است ، اما اینگونه نیست. این کثیف است ، و از آنجا که همه در پس زمینه اتفاق می افتد و خیلی سریع اتفاق می افتد (اشتباهات می توانند بدون توجه به نظر برسند و بسیار پرهزینه شوند). با این وجود ، صف ها بیش از یک نکته بسیار ضروری هستند ، و می فهمید که آنها یک سلاح قدرتمند (شاید حتی قدرتمندترین) در زرادخانه شما هستند. موفق باشید! ��

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map