QPS چیست، چه کاربردهایی دارد و چگونه محاسبه می شود؟

QPS چیست، چه کاربردهایی دارد و چگونه محاسبه می شود؟

در این مقاله قصد دارم به صورت مختصر ولی کامل، به یکی از معیارهای مهم در انتخاب تکنولوژی در طراحی برنامه های برپایه درخواست و پاسخ بپردازم. عبارت QPS سرواژه ی عبارت Query Per Second است و به تعداد کوئری (پرس و جو) های ارسالی به سمت دیتابیس در هر ثانیه اشاره دارد. دانستن این عدد می تواند کمک بسیاری زیادی به مدیران و برنامه نویسان ارشد بکند تا تصمیم بگیرند چه زمانی لازم است با اضافه کردن منابع سخت افزاری، ازجمله RAM و CPU به سرورهای برنامه، یا اضافه کردن سرورهایی که پاسخ گوی کاربران باشد برنامه ی خود را گسترش داده، تا بتوانند جوابگوی درخواست های کاربران باشند.

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

در بسیاری از مصاحبه های شغلی برای موقعیت برنامه نویس ارشد (Senior Programmer)، یکی از اصلی ترین سوال‌ها، محاسبه‌ی QPS است. به همین منظور در ادامه ی همین مقاله بعد از تعریف QPS شما می توانید فرمول محاسبه و مثالی از سوالهای مصاحبه های شغلی را مطالعه بفرمایید.

تعریف QPS

همانطور که گفتم، QPS سرواژه های عبارت Queries Per Second است که به تعداد کوئری (Query) ها در هر ثانیه گفته می شود.  این عبارت در ویکیپدیا اینطور تعریف شده است:

" کوئری در ثانیه (QPS)، اندازه گیری میزان ترافیک جستجویی است که یک سیستم بازیابی اطلاعات، مانند موتور جستجو یا پایگاه داده، در یک ثانیه دریافت می کند. این اصطلاح به طور گسترده‌تری برای هر سیستم درخواست-پاسخ استفاده می‌شود، که در آن حالت، درخواست در ثانیه یا Request Per Second (RPS) نامیده می شود. سیستم‌های پرترافیک باید مراقب QPS باشند تا بدانند چه زمانی برای تحمل بار بیشتر گسترش یابند."

این تعریف آغاز خوبی برای ورود به یکی از رایج ترین ابزارهای اندازه گیری ترافیک دیتابیس و وب سایت می باشد. در سیستم های مانیتورینگ، یکی از مقادیری که جلوی چشم مدیران یک سایت قرار دارد QPS است و با توجه به آن، به این نتیجه می رسند که لازم است با اضافه کردن یک دیتابیس دیگر، درخواست های بیشتری را با سرعت بهتری پاسخ بدهند.

چگونه QPS را محاسبه کنیم؟

محاسبه ی QPS برای مدیران یک سیستم، کار بسیار ساده ای است. اگر شما تعداد کوئری هایی که به سمت یک سیستم، طی یک روز یا یک ماه، می رسد را داشته باشید، به سادگی می توانید از طریق فرمول های زیر QPS را محاسبه کنید.

(30 روز * 24 ساعت * 60 دقیقه * 60 ثانیه) / QPS = Query Per Month 

(24 ساعت * 60 دقیقه * 60 ثانیه) / QPS = Query Per day

همانطور که در فرمول های بالا مشاهده می کنید، صورت تقسیم تعداد کوئری های رسیده به سیستم در یک روز یا یک ماه است و مخرج کسر تعداد ثانیه های موجود در آن بازه ی زمانی است.

حل مسئله ی QPS

مسئله : فرض کنید twitter در هر ماه 300 میلیون کاربر فعال دارد که نیمی از این کاربران هرروز از توییتر استفاده می کنند و هر کاربر به طور میانگین در روز 2 توییت را ارسال می کند. با توجه به این فرض ها، QPS این سیستم را محاسبه کنید.

حل:

طبق پیش فرض های مسئله تعداد کاربران فعال روزانه یا Daily Active User (DAU) در این سیستم با محاسبه ی زیر به دست می آید:

DAU = 300M * 50% = 150m

برای مشاهده ی راحت تر میلیون را با M نمایش می دهیم.

حالا با توجه به این که کاربران فعال روزانه دو توییت انجام می دهند، تعداد کوئری های روزانه برای ارسال توییت برابر است با:

150m * 2 = 300M

حالا که تعداد توییت های روزانه را داریم QPS را محاسبه می کنیم:

QPS = 300M / 24h * 3600s = ~3500

و البته می توانیم شرایط پیک سیستم را هم درنظر بگیریم که هر کدام از کاربران 2 توییت در روز انجام بدهند که با دوبرابر کردن QPS موجود، می توانیم QPS پیک را هم برابر عددی حدود 7000 در نظر بگیریم. 

این یعنی دیتابیس توییتر باید 3500 درخواست را پاسخ بدهد. بنابراین لازم است در زمان طراحی این سیستم از دیتابیس مناسبی استفاده کنیم. توان پاسخگویی هر کدام از دیتابیس های مطرح و پر کاربرد را محاسبه کرده اند که در زیر می توانید مشاهده کنید.

  • برای دیتابیس های SQL مانند MySQL و PostgreSQL عدد 1k کوئری در هر ثانیه به دست آمده است.
  • برای دیتابیس های NoSQL ای که داده ها را روی Disk ذخیره می کنند، مانند MongoDB و Cassandra این عدد برابر با 10k است.
  • برای دیتابیس های NoSQL ای که داده ها را روی Memory ذخیره می کنند، مانند Redis و Memcached، تعداد کوئری ها در هر ثانیه بین 100k تا 1M محاسبه شده است.

در نتیجه، الان شما می توانید QPS برنامه ی (واقعی یا خیالی) خودتان را محاسبه کنید و براساس این عدد و مقادیری که در بالا برای هر دیتابیس ارائه شده است، دیتابیس مناسبی را انتخاب کنید.

توجه داشته باشید که این نوع محاسبه‌ی QPS، در دسته‌ی محاسبه‌های پشت پاکت (یا به قول آمریکایی ها پشت دستمال سفره) است. این نوع محاسبه ها، با استفاده از مفروض های بسیار ساده و گرد شده انجام می شود و دقت شان بیشتر از حدس و گمان است، ولی از یک محاسبه ی دقیق دقت کمتری دارد.

در دنیای تجارت هم از این نوع محاسبه، برای توصیف یک طرح یا ایده ی تجاری یا یک محصول استفاده می شود. اگر در متون انگلیسی با عبارت هایی مثل Back-of-the-envelope calculation، back of a napkin یا back of a fag packet مواجه شدید، همه ی این عبارت ها به محاسبه ای که اعداد و شرایط در آن ساده و گرد شده اند اشاره دارد.

از بهترین نوشته‌های کاربران سکان آکادمی در سکان پلاس


online-support-icon