ایک زیادہ ٹریفک والی ویڈیو سائٹ نے اپنی ٹرینڈنگ پیج فیڈ کے لیے ڈیٹا بیس کوئریز کی تعداد فی منٹ 4,000 سے کم کر کے 50 سے بھی نیچے کر دی، اور Varnish اور Edge Side Includes (ESI) کے ذریعے مکمل پیج کیشنگ (whole-page caching) کے بجائے فرگمنٹ کیشنگ (fragment caching) اپنا کر اپنے 95ویں فیصد (95th-percentile) رسپانس ٹائم کو 380 ms سے کم کر کے 40 ms کر دیا۔

سائٹ کو مختلف کیش حکمت عملی کی ضرورت کیوں پڑی

ہوم پیج جو دن کی سب سے زیادہ دیکھی جانے والی کلپس دکھاتا ہے، کسی بھی خطے کے تقریباً ہر وزیٹر کے لیے ایک جیسا ہی ہوتا ہے: دس لاکھ صارفین کے لیے تقریباً 95 فیصد HTML یکساں ہوتا ہے، جبکہ باقی 5 فیصد میں ذاتی ڈیٹا ہوتا ہے جیسے کہ لاگ ان شدہ صارف کا نام یا سرچ باکس۔ انجینئرنگ ٹیم کو دو ناپسندیدہ آپشنز کا سامنا تھا:

  • پورے پیج کو کیش کرنا اور لاگ ان شدہ صارفین کو پرانا (stale) ذاتی ڈیٹا دکھانے کا خطرہ مول لینا ۔
  • کیش کو مکمل طور پر نظر انداز کرنا اور ہر درخواست کو ڈیٹا بیس پر بوجھ ڈالنے دینا۔

دونوں طریقوں نے صارف کے تجربے (user experience) کو خراب کر دیا۔ ٹیم نے ESI کا رخ کیا، جو ایک ایسی تکنیک ہے جو ایک ریورس پراکسی (reverse-proxy) کو نیٹ ورک کے ایج (edge) پر آزادانہ طور پر کیش شدہ فرگمنٹس سے ایک پیج تیار کرنے کی اجازت دیتی ہے۔

فرگمنٹ کیشنگ کو کیسے ترتیب دیا گیا

Varnish، جو کہ ایک اوپن سورس HTTP ایکسلریٹر ہے، نے پیج کو تین قابلِ تبدیلی حصوں والے ایک ڈھانچے (skeleton) کے طور پر لیا:

  • ویڈیو گرڈ (Video grid) – ٹرینڈنگ ویڈیوز کی مہنگی اور علاقائی سطح پر دکھائی جانے والی فہرست۔ اسے 60 سیکنڈ کے لیے کیش کیا جاتا ہے کیونکہ یہ اکثر بدلتی رہتی ہے لیکن ہر گمنام وزیٹر کے لیے ایک جیسی ہوتی ہے۔
  • لینگویج سوئچر (Language switcher) – ایک اسٹیٹک UI عنصر جو شاذ و نادر ہی بدلتا ہے۔ اسے 24 گھنٹوں کے لیے کیش کیا جاتا ہے۔
  • ہیڈر (Header) – واحد حقیقی طور پر ذاتی فرگمنٹ (صارف کا نام، اوتار، نوٹیفیکیشنز)۔ اسے کبھی کیش نہیں کیا جاتا؛ Varnish ہر بار درخواست کو ایپلی کیشن سرور پر فارورڈ کرتا ہے۔

جب کوئی درخواست آتی ہے، تو Varnish کیش شدہ ڈھانچہ فراہم کرتا ہے، اپنے لوکل اسٹور سے دو کیش شدہ فرگمنٹس نکالتا ہے، اور بیک اینڈ سے لائیو ہیڈر شامل کر دیتا ہے۔

اہم اعداد و شمار

تبدیلی کے بعد:

  • ٹرینڈنگ پیج کے لیے ڈیٹا بیس کا بوجھ فی منٹ 4,000 کوئریز سے کم ہو کر 50 سے بھی کم رہ گیا۔
  • 95ویں فیصد لیٹنسی (latency) 380 ms سے کم ہو کر 40 ms رہ گئی۔

رول آؤٹ سے حاصل ہونے والے تین عملی اسباق

1. گریس پیریڈز (Grace periods) کیش مسز کے اثرات کو کم کرتے ہیں جب کسی فرگمنٹ کا TTL ختم ہو جاتا ہے، تو Varnish عام طور پر تازہ مواد حاصل کرنے کے لیے رک جاتا ہے، جس سے لیٹنسی میں اچانک اضافہ ہوتا ہے جو بیک اینڈ کالز کے ایک ساتھ آنے کے نتیجے میں پیدا ہونے والے "تھنڈرنگ ہേراڈ" (thundering herd) کے مسئلے کا باعث بن سکتا ہے۔ ایک گریس پیریڈ کنفیگر کر کے، Varnish پرانے فرگمنٹ کو فراہم کرنا جاری رکھتا ہے جبکہ وہ پس منظر میں خاموشی سے کیش کو ریفریش کرتا ہے۔ صارفین کو کوئی وقفہ محسوس نہیں ہوتا؛ بیک اینڈ کو درخواستوں کی ایک مستحکم اور قابلِ انتظام شرح نظر آتی ہے۔

2. گمنام فرگمنٹس کے لیے کوکیز (cookies) ہٹا دیں ہر درخواست کے ساتھ منسلک کوکیز Varnish کو ہر درخواست کو منفرد سمجھنے پر مجبور کرتی ہیں، جس سے کیش ہٹس (cache hits) ختم ہو جاتی ہیں۔ ٹیم نے ویڈیو گرڈ اور لینگویج سوئچر کے لیے کوکیز ہٹا دیں، جس سے ان فرگمنٹس کو جارحانہ طور پر کیش کرنا ممکن ہو گیا۔ صرف ہیڈر فرگمنٹ میں کوکیز ہوتی ہیں، جو کیش کی کارکردگی پر سمجھوتہ کیے بغیر پرسنلائزیشن کو برقرار رکھتی ہیں۔

3. سرروگیٹ کیز (Surrogate keys) فوری طور پر ڈیٹا صاف کرنے (purging) کے قابل بناتی ہیں کبھی کبھی کسی ویڈیو کو فوری طور پر ہٹانا ضروری ہوتا ہے—مثال کے طور پر، کاپی رائٹ وجوہات کی بنا پر۔ 60 سیکنڈ کے TTL کے ختم ہونے کا انتظار کرنا ناقابل قبول ہے۔ ہر کیش شدہ فرگمنٹ کو ایک سرروگیٹ کی کے ساتھ ٹیگ کر کے جو بنیادی ویڈیو آئی ڈیز (video IDs) کی عکاسی کرتی ہے، ٹیم ایک واحد پرج (purge) کمانڈ جاری کرتی ہے جو ہر ایج نوڈ پر مخصوص ویڈیو کی تمام کاپیاں فوری طور پر کالعدم کر دیتی ہے۔ یہ مکمل کیش سویپ سے بچاتا ہے اور سائٹ کو قوانین کے مطابق رکھتا ہے۔

حاصلِ کلام: Varnish اور ESI کے ساتھ فرگمنٹ کیشنگ ایک سنگ میل (monolithic) اور ڈیٹا بیس پر منحصر پیج کو ہلکے پھلکے اور دوبارہ استعمال کے قابل حصوں کے مجموعے میں بدل دیتی ہے، جس سے صارف کی پرسنلائزیشن کو برقرار رکھتے ہوئے بیک اینڈ کے بوجھ اور لیٹنسی میں نمایاں کمی آتی ہے۔