یوتیوب، وایتِس و حل مشکل مقیاسپذیری MySQL

از حدود پنج سال پیش که درگیر مشکل مقیاسپذیری MySQL شدم و بابت رفع آن، به دامن NoSQL ها پناه بردم تا امروزه که مجدداً بانکهای اطلاعاتی رابطهای، حاکم بلامنازع بانکهای اطلاعاتی دنیا شدهاند و امکانات متنوعی به آنها افزوده شده است، همواره با این سوال مواجه شدهام که چگونه سرورهای MySQL را برای حجم بالای داده و مقیاسپذیری راحت، پیکربندی کنیم.
مشکل هم اینجاست که خیلی از تیمها و استارتاپها با MySQL شروع میکنند و به مرور زمان و با افزایش تعداد درخواستها و دادهها با MySQL دچار چالش میشوندو مهاجرت از این دیتابیس و امتحان گزینههای دیگر، هزینه زیادی برای این شرکتها دارد. بنابراین بهتر است که راهحلی پایدار و مناسب برای مقیاسپذیری MySQL پیدا کنیم.
قبلاً در همین وبلاگ، TiDB را یک جانشین مقیاسپذیر MySQL معرفی کردیم (چند گزینه دیگر هم در آن فرسته، معرفی شد) اما در هر صورت، اگر بتوانیم با خود MySQL مشکل Sharding (توزیع دادهها در یک شبکه) را حل کنیم، راه حل مناسبتری برای این موضوع خواهد بود.
یوتیوب حدود نه سال پیش به این مشکل برخورد. هم نیاز به راه حلی داشت که بتواند کوئری های ارسال شده را به یک شبکه از سرویس های MySQL ارسال کند و هم اینکه به خاطر کوئریهای مختلفی که افراد تیم مهندسی یوتیوب بر روی سرورهای MySQL اجرا میکردند، سرویس دهی این بانک اطلاعاتی، دچار اشکال نشود.
Sugu Sougoumarane و همکارانش تصمیم گرفتند یک معماری جانبی به عنوان یک میان افزار برای MySQL طراحی کنند که هم بتواند نقش یک پروکسی و توزیع کننده کوئریها را برعهده بگیرد و هم از اجرای کوئری های نامناسب که زمان زیادی از سرورها را به خود اختصاص میدهد جلوگیری کرده، آنها را بهینه و بازنویسی کنند. خروجی این تلاش، پروژه متنباز Vitess شد که امروزه بسیاری از سایتهای مطرح دنیا با تعداد درخواستهای روزانه میلیونی، از این معماری برای مقیاسپذیر کردن کلاسترهای MySQL خود استفاده کردهاندو مطمئنا راه حلی که برای یوتیوب، اسلک و Hubspot مناسب بوده است، میتواند هر نیاز دیگری را هم پاسخگو باشد.

معماری وایتِس
در معماری وایتِس با دو مولفه اصلی بیشتر سرو کار نداریم یکی VTGATE که واسط بین برنامهها و کلاستر MySQL است و توزیع کوئریها در شبکه و مدیریت کانکشنها را برعهده دارد و دومی هم VTTABLET که در کنار هر سرویس MySQL قرار میگیرد و به عنوان یک پروکسی، هم محافظ این سرویس، مدیریت خودکار و افزایش کارآیی آن از طریق بازنویسی کوئریها است. درخواستهای مدیریتی هم از طریق VTCTL به کلاستر ارسال می شود.

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

بنابراین توضیحات، اگر با MySQL به اشکال برخوردهاید و یا نگران از آینده استفاده ازاین دیتابیس در حجم بالای دادهها هستید، این میان افزار قدرتمند را که اواسط آبان ۹۸، نسخه ۴ آن وارد بازار شده است را نصب کرده و با قدرت به کار با MySQL خود ادامه دهید و دنبال راهحلهای دیگر نباشید.