هزینه حافظه دارد بهطور چشمگیری بالا میرود؛ هم RAM و هم هارددیسک در یک سال گذشته گرانتر شدهاند. در Cloudflare هم چندین محصول ذخیرهسازی گسترده را در مقیاس بالا اجرا میکنیم، از جمله CDN معروفمان، و همه اینها به استفاده بهینه از حافظه متکی هستند تا بتوانیم سرویسدهی پایدار به همه مشتریها را ادامه بدهیم. 💾
با همین نگاه، یک راهکار برای افزایش ظرفیت مؤثر cache را prototype کردیم. ایده این است که assetهای واجد شرایط را داخل Pingora با Zstandard یا همان zstd encode کنیم؛ یعنی با کمی افزایش CPU، در عوض صرفهجویی قابل توجهی در storage و bandwidth بین data centerها داشته باشیم. ⚙️
سیستمی که روی آن کار کردهایم Cache Transcoding نام دارد؛ پروژهای که در دوره internship من در Cloudflare و در قالب برنامه 1.1.1.1 Intern Program ساخته شد. وقتی یک response مناسب وارد cache میشود، قبل از اینکه روی disk نوشته شود با Zstandard فشرده میشود. این نسخه فشرده در طول مدت حضور asset در cache باقی میماند و حتی هنگام جابهجایی بین data centerها از طریق Tiered Cache هم همانطور نگه داشته میشود؛ بعد درست قبل از ارسال پاسخ به client دوباره decode میشود. 🔁
در تستهای اولیه، این روش توانست اندازه on-disk assetهای واجد شرایط را بهطور میانگین تا یکسوم کاهش دهد. برآوردها نشان میدهد هزینه اضافه CPU در origin-facing proxy کم است، و همین همان trade-off اصلی ماست: کمی CPU بیشتر مصرف میکنیم تا Petabyteها ظرفیت مؤثر cache به دست بیاوریم و حجم دادهای را که بین data centerها جابهجا میشود پایین بیاوریم. در واقع، هزینه encode فقط یکبار و هنگام ورود asset به cache پرداخت میشود، اما سود storage و bandwidth در ادامه بهصورت مداوم ادامه پیدا میکند. 🚀