شناسایی یک فاجعه در Cloudflare

خلاصه هوشمند مقاله
سیستم پردازش دادههای کلادفلر (مبتنی بر دیتابیس ClickHouse) که مسئول محاسبه صدها میلیون دلار صورتحساب مشتریان است، پس از یک آپدیت ساختاری به شدت کند شد
در شرکت کلادفلر (Cloudflare)، محاسبه اینکه هر مشتری چقدر از سرویسها استفاده کرده و چقدر باید پول بپردازد، به عهده یک دیتابیس تحلیلی متنباز به نام ClickHouse است. این سیستم روزانه میلیونها درخواست را روی بیش از ۱۰۰ پتابایت داده پردازش میکند. اگر این سیستم کند شود، صورتحسابها به موقع صادر نمیشوند و یک بحران مالی واقعی رخ میدهد.
ریشه مشکل: یک تغییر کوچک، یک فاجعه بزرگ در اوایل سال ۲۰۲۵، کلادفلر برای مدیریت بهتر فضای ذخیرهسازی، تصمیم گرفت نحوه دستهبندی (Partitioning) دادههای یک جدول عظیم (به نام Ready-Analytics) را تغییر دهد. قبلاً دادهها فقط بر اساس «روز» دستهبندی میشدند، اما در سیستم جدید بر اساس «مشتری (Namespace) + روز» دستهبندی شدند. فرض مهندسان این بود که چون هر کوئری فقط به دادههای یک مشتری خاص کار دارد، نباید تغییری در سرعت خواندن اطلاعات ایجاد شود.
اما در ماه مارس، سیستم صورتحسابها به شدت کند شد. مهندسان همهچیز را چک کردند: مصرف رم، دیسک، سرعت خواندن اطلاعات... همهچیز عالی بود، اما سیستم در حال فروپاشی بود! با بررسی نمودارهای زمانی متوجه شدند که یک رابطه مستقیم بین «تعداد کل پارتیشنها» و «کندی سیستم» وجود دارد. اما چرا صرفِ وجودِ فایلهای بیشتر، حتی وقتی خوانده نمیشوند، باعث کندی شده بود؟
عملیات نجات در ۳ پرده تیم کلادفلر برای پیدا کردن مشکل به سراغ ابزارهای عمیق لاگگیری (Trace Logs) و تولید نمودارهای شعله (Flame Graphs) رفتند و به نتایج عجیبی رسیدند. آنها متوجه شدند که مشکل در مرحله برنامهریزی کوئری (Query Planning) است، یعنی دقیقاً زمانی که دیتابیس میخواهد تصمیم بگیرد کدام فایلها را بخواند.
- پچ اول (قفلهای اشتراکی): نمودارها نشان داد که بیش از ۵۰ درصد زمان کوئریها صرفِ «صبر کردن» میشود! در سیستم کلیکهاوس، هر کوئری برای دیدن لیست فایلها (پارتیشنها)، یک قفل اختصاصی (Exclusive Lock) روی کل لیست میانداخت و بقیه کوئریها باید در یک صف طولانی منتظر میماندند. کلادفلر این قفل را به «قفل اشتراکی» (Shared Lock) تغییر داد تا کوئریها بتوانند همزمان لیست را بخوانند. سرعت بلافاصله بالا رفت.
- پچ دوم (توقف کپیهای بیمورد): با وجود پچ اول، باز هم سیستم ایدهآل نبود. مشکل جدید این بود که هر کوئری پس از گرفتن لیست فایلها (که حالا دهها هزار ردیف داشت)، یک کپی کامل از آن میگرفت و سپس فیلترش میکرد. گرفتن صدها کپی در ثانیه از یک لیست بلندبالا، پردازنده را خسته میکرد. کلادفلر با ساخت یک «کپی اشتراکی هوشمند»، این بار اضافی را حذف کرد. (این تغییرات تحت عنوان PR #85535 به نسخه اصلی ClickHouse اضافه شد).
- پچ سوم (جستجوی دودویی - Feb ۲۰۲۶): با گذشت یک سال و رسیدن تعداد پارتها به ۱۶۰ هزار عدد، سیستم دوباره در حال کند شدن بود. این بار مشکل در فیلتر کردن لیست بود که به صورت خطی (یکی یکی) انجام میشد. مهندسان متوجه شدند چون لیست از قبل بر اساس «نام مشتری» مرتب شده، میتوانند از الگوریتم «جستجوی باینری» (Binary Search) استفاده کنند و بخش بزرگی از لیست را در کسری از ثانیه دور بریزند. این پچ، زمان کوئریها را ۵۰ درصد دیگر کاهش داد و ارتباط بین افزایش تعداد فایلها و کندی سیستم را برای همیشه قطع کرد.
