لیکبیس: توان نوشتن پستگرس رو ۵ برابر کرد
خلاصهٔ کاملتر
پستگرس برای اطمینان از دوام دادهها از یه مکانیزم به اسم Write-Ahead Log یا WAL استفاده میکنه. هر تغییر توی دیتابیس اول توی این لاگ ترتیبی ثبت میشه. پستگرس هر چند وقت یهبار یه رویداد پسزمینهای به اسم checkpoint اجرا میکنه که دادههای حافظه رو روی دیسک فلاش میکنه. مشکل اینجاست که اگه سرور دقیقاً وسط نوشتن یه صفحه ۸ کیلوبایتی کرش کنه، اون صفحه ممکنه ناقص (torn page) بشه و دادهها خراب بشن.
برای جلوگیری از این مشکل، پستگرس از Full Page Write یا FPW استفاده میکنه: اولین باری که یه صفحه بعد از یه checkpoint تغییر میکنه، کل اون صفحه ۸ کیلوبایتی توی WAL کپی میشه. این روش امنیته ولی خیلی گرونه؛ توی workloadهای پر-نوشتن، حجم لاگ میتونه تا ۱۵ برابر بیشتر بشه و بزرگترین گلوگاه سیستم بشه.
در معماری لیکبیس، کامپیوت کاملاً بیحالت (stateless) هست و به دیسک محلی متکی نیست. WAL مستقیم به یه کوروم Paxos-based از safekeeperها استریم میشه. چون اصلاً دیسک محلی وجود نداره، مشکل torn page هم از اساس منتفیه. پس میشه FPW رو خاموش کرد — ولی نه بدون فکر. بدون تصاویر کامل صفحه توی WAL، لایه استوریج باید یه زنجیر بینهایت از deltaهای کوچیک رو برای بازسازی یه صفحه replay کنه که لیتنسی خواندن رو خراب میکنه.
راهحل Neon image generation pushdown نام داره: مسئولیت تولید تصاویر کامل صفحات از لایه کامپیوت به لایه استوریج توزیعشده منتقل شده. حالا pageserver خودش وقتی یه صفحه به اندازه کافی delta جمع کرد، یه تصویر کامل ازش میسازه. این کار بر اساس تعداد واقعی تغییرات یه صفحه انجام میشه، نه بر اساس checkpoint پستگرس که ربطی به تعداد تغییرات نداره.
نتایج بنچمارک با HammerDB TPROC-C خیرهکنندهست. روی یه کامپیوت ۳۲ vCPU توان نوشتن از ۹۵,۶۸۶ NOPM به ۴۳۹,۳۰۰ NOPM رسیده؛ یعنی بیش از ۴.۵ برابر. در محیط production واقعی روی یه پروژه ۵۶ vCPU هم WAL از ۳۰ مگابایت بر ثانیه به ۱ مگابایت بر ثانیه رسیده. این بهبود مستقیماً توان تراکنش رو توی ساعات اوج بالا برده.
این بهینهسازی فقط به write ختم نشده. چون زنجیره deltaها کوتاهتر شده، تعداد WAL recordهایی که برای یه read باید replay بشن کم شده. نتیجه: تأخیر p99 خواندن ۳۰ تا ۵۰٪ بهتر شده و تأخیر p50 هم حدود ۳۰٪ کاهش پیدا کرده. به طور خلاصه، حذف FPW از کامپیوت و سپردن کار image generation به استوریج توزیعشده، هم مقیاسپذیری خطی ایجاد کرده هم منابع شبکه رو آزاد کرده — چیزی که پستگرس سنتی بههیچوجه قادر به انجامش نیست.
نکات کلیدی:
- مشکل Full Page Write در پستگرس باعث میشه WAL تا ۱۵ برابر حجم پیدا کنه و گلوگاه write بشه
- در معماری لیکبیس چون دیسک محلی نیست، torn page اتفاق نمیافته و FPW میشه حذف کرد
- با image generation pushdown، کار تولید تصاویر صفحات از کامپیوت به pageserver منتقل شده
- ترافیک WAL تا ۹۴٪ کاهش پیدا کرده — از ۵۸ کیلوبایت به زیر ۴ کیلوبایت به ازای هر تراکنش
- توان نوشتن روی ۳۲ vCPU بیش از ۴.۵ برابر شده؛ در production هم WAL از ۳۰ MB/s به ۱ MB/s رسیده
- تأخیر p99 خواندن هم ۳۰ تا ۵۰٪ بهبود پیدا کرده




