Canva زیرساخت ابطال نشست‌های خود را بازطراحی کرده تا بتواند صدها میلیون نشست فعال را بدون وابستگی مکرر به دیتابیس مدیریت کند. این بازآرایی بار دیتابیس را کاهش داده و مصرف حافظهٔ کش را به‌طور چشمگیری بهینه می‌کند.

معماری جدید چه کاری انجام می‌دهد؟

مشخصات ابطال نشست به‌صورت رکوردهای فشرده و تغییرناپذیر در آمازون S3 ذخیره می‌شود. درگاه‌های برنامه (gateways) این اشیاء را به‌عنوان شاخص‌های درون‌حافظه‌ای بارگذاری می‌کنند و تنها تغییرات را با درخواست‌های GET شرطی دریافت می‌کنند. این طراحی موجب افزایش سرعت استقرار، کاهش نیاز به زیرساخت دیتابیس و افت قابل‌توجه در ردپای حافظهٔ کش ابطال شد (حدود 87.5%).

چرا S3 به‌جای دیتاستورهای سنتی؟

  • S3 به‌عنوان یک ذخیرهٔ پایدار بدون نیاز به عملیات و نگهداری مداوم دیتاستورهای تخصصی انتخاب شده است؛ راه‌حل‌هایی مثل Redis معمولاً نیازمند مدیریت و تنظیم مداوم هستند.
  • پنجرهٔ ابطال 12 ساعته تعیین شده و اشیاء S3 هر 30 دقیقه تفکیک می‌شوند؛ درگاه‌ها در صورت نیاز هر بخش را دانلود می‌کنند و با GET شرطی فقط تغییرات را دریافت می‌کنند تا هزینه و ترافیک شبکه کاهش یابد.

پیاده‌سازی فنی

ساختار رکورد و بخش‌بندی

هر رکورد ابطال به‌صورت یک ساختار دودویی 16 بایتی شامل شناسهٔ مؤلف (principal) و تایم‌استمپ ذخیره می‌شود. رکوردها مرتب‌سازی شده و در آرایه‌های مرتب قرار می‌گیرند تا درگاه‌ها بتوانند جست‌وجوی مستقیم در حافظه انجام دهند؛ این رویکرد باعث کاهش چشمگیر حجم کش می‌شود.

هماهنگی کارگرها و بارگذاری

کارگرهای ناهمگام به‌طور مداوم دیتابیس را اسکن کرده، ابطال‌های جدید را جمع‌آوری و آن‌ها را در آخرین بخش ادغام می‌کنند؛ سپس بخش به‌روز با استفاده از PUT شرطی روی S3 آپلود می‌شود. برای کاهش تداخل نوشتن، انتخاب رهبر مبتنی بر ZooKeeper استفاده می‌شود، اگرچه این مکانیزم برای درستی طرح اجباری نیست و می‌توان از مکانیزم‌های هماهنگی دیگری هم بهره برد.

معماری ابطال نشست Canva با استفاده از S3 و شاخص‌های درون‌حافظه‌ای

مزایا و بازدهی

  • بازسازی کش برای یک درگاه با دانلود بخش‌های مرتبط از S3 انجام می‌شود و نیازی به بازسازی کامل از دیتابیس مرکزی نیست.
  • کارگرها می‌توانند بیش از 2,000 ابطال در ثانیه پردازش کنند؛ یک بخش حاوی حدود 1,000,000 ابطال تقریباً 16 مگابایت دادهٔ دودویی دارد.
  • پس از مهاجرت، Canva تعداد replicaهای دیتابیس ابطال را کاهش داد و بار دیتابیس اکنون با توان نوشتن ابطال و ترافیک سایت هم‌راستا شده است، نه با تعداد نمونه‌های درگاه.

بحث‌ها و ملاحظات فنی

یک رویکرد جایگزین متداول، استفاده از توکن‌های تازه‌سازی با عمر کوتاه برای توکن‌های دسترسی و نگهداری توکن‌های تازه‌سازی در دیتابیس است؛ این روش با استانداردهای OAuth همخوانی دارد. با این حال، تیم Canva می‌گوید نگهداری داده‌های ابطال در حافظه عملکرد بهتری در کاهش بار دیتابیس هنگام تازه‌سازی‌های مکرر ارائه می‌دهد و وابستگی دسترسی را به دیتابیس کاهش می‌دهد. هر دو رویکرد مزایا و هزینه‌های مشخص خود را دارند و انتخاب بین آن‌ها باید براساس نیازهای تأخیر، هزینه و عملیات صورت گیرد.

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

  • پروفایل و اندازه‌گیری: پیش از مهاجرت، تست بار در زیرساخت واقعی انجام دهید تا رفتار در زمان استقرار و بازسازی کش مشخص شود.
  • کنترل هم‌زمانی: از PUT شرطی یا مکانیزم رهبر/پیرو برای مدیریت تداخل نوشتن روی بخش‌های S3 استفاده کنید.
  • پنجرهٔ سازگاری: تعیین کنید چه مدت تاخیر در اعمال ابطال قابل‌پذیر است؛ انتخاب Canva برابر با 12 ساعت بوده که در طراحی بخش‌بندی و اندازهٔ حافظه تأثیرگذار است.
  • امنیت و دسترسی: اجازه‌های دسترسی به اشیاء S3 را با کمترین امتیازات لازم تنظیم کرده و از رمزنگاری مناسب استفاده کنید.

چشم‌انداز

استفاده از S3 به‌عنوان یک «ابتدایی هماهنگی» برای اشتراک‌گذاری وضعیت ابطال بین صدها نمونهٔ درگاه نشان می‌دهد سرویس‌های ابری اشیاء می‌توانند نقش‌هایی فراتر از ذخیرهٔ سنتی ایفا کنند. تیم‌هایی که با بارهای بسیار بزرگ در مدیریت نشست مواجه‌اند، می‌توانند این الگو را بررسی و در محیط کنترل‌شده آزمایش کنند؛ تصمیم نهایی باید مبتنی بر حجم ترافیک، نیازهای تأخیر و هزینهٔ شبکه باشد.