அதிகப் போக்குவரத்தைக் கொண்ட ஒரு வீடியோ தளம், தனது டிரெண்டிங்-பேஜ் ஃபீட்டிற்கான (trending-page feed) தரவுத்தள வினவல்களை (database queries) நிமிடத்திற்கு 4,000-லிருந்து 50-க்கும் குறைவாகக் குறைத்தது. மேலும், முழுப் பக்க கேச்சிங்கிலிருந்து (whole-page caching), Varnish மற்றும் Edge Side Includes (ESI) மூலம் துண்டு கேச்சிங்கிற்கு (fragment caching) மாறியதன் மூலம், அதன் 95-வது சதவீதப் பதிலளிப்பு நேரத்தை (95th-percentile response time) 380 ms-லிருந்து 40 ms-ஆகக் குறைத்தது.

ஏன் அந்தத் தளத்திற்கு வேறுபட்ட கேச் உத்தி தேவைப்பட்டது

அன்றைய தினத்தின் அதிகம் பார்க்கப்பட்ட வீடியோக்களைக் காட்டும் முகப்புப் பக்கம், ஒரு பிராந்தியத்தில் உள்ள கிட்டத்தட்ட அனைத்துப் பார்வையாளர்களுக்கும் ஒரே மாதிரியாகவே இருக்கும்: ஒரு மில்லியன் பயனர்களுக்கு சுமார் 95 சதவீத HTML ஒரே மாதிரியாக இருக்கும், மீதமுள்ள 5 சதவீதம் லாக்-இன் செய்துள்ள பயனரின் பெயர் அல்லது தேடல் பெட்டி போன்ற தனிப்பட்ட தரவுகளைக் கொண்டிருக்கும். பொறியியல் குழு இரண்டு விரும்பத்தகாத விருப்பங்களை எதிர்கொண்டது:

  • முழுப் பக்கத்தையும் கேச் செய்து, லாக்-இன் செய்த பயனர்களுக்குப் பழைய (stale) தனிப்பட்ட தரவுகளை வழங்கும் அபாயத்தை எதிர்கொள்வது.
  • கேச் முறையைத் தவிர்த்துவிட்டு, ஒவ்வொரு கோரிக்கையும் (request) தரவுத்தளத்தை நேரடியாகத் தாக்க அனுமதிப்பது.

இரண்டு அணுகுமுறைகளும் பயனர் அனுபவத்தைப் பாதித்தன. குழு ESI தொழில்நுட்பத்தைப் பயன்படுத்தியது; இது ஒரு reverse-proxy மூலம் நெட்வொர்க்கின் விளிம்பில் (edge) தனித்தனியாக கேச் செய்யப்பட்ட துண்டுகளைக் கொண்டு ஒரு பக்கத்தை உருவாக்க அனுமதிக்கிறது.

துண்டு கேச்சிங் (fragment caching) எவ்வாறு இணைக்கப்பட்டது

திறந்த மூல HTTP முடுக்கியான (open-source HTTP accelerator) Varnish, அந்தப் பக்கத்தை மாற்றக்கூடிய மூன்று பகுதிகளைக் கொண்ட ஒரு கட்டமைப்பாக (skeleton) கருதியது:

  • வீடியோ கிரிட் (Video grid) – டிரெண்டிங்கில் உள்ள வீடியோக்களின் பிராந்திய அளவிலான பட்டியல். இது அடிக்கடி மாறுவதால், ஆனால் பெயர் தெரியாத (anonymous) ஒவ்வொரு பார்வையாளருக்கும் ஒரே மாதிரியாக இருப்பதால், 60 வினாடிகளுக்கு கேச் செய்யப்படுகிறது.
  • மொழி மாற்றும் கருவி (Language switcher) – அரிதாகவே மாறும் ஒரு நிலையான UI உறுப்பு. 24 மணிநேரத்திற்கு கேச் செய்யப்படுகிறது.
  • ஹெடர் (Header) – உண்மையான தனிப்பட்ட துண்டு மட்டுமே (பயனர் பெயர், அவதார், அறிவிப்புகள்). இது ஒருபோதும் கேச் செய்யப்படுவதில்லை; Varnish ஒவ்வொரு முறையும் கோரிக்கையை அப்ளிகேஷன் சர்வருக்கு அனுப்புகிறது.

ஒரு கோரிக்கை வரும்போது, Varnish கேச் செய்யப்பட்ட கட்டமைப்பை வழங்குகிறது, அதன் உள்ளூர் சேமிப்பகத்திலிருந்து இரண்டு கேச் செய்யப்பட்ட துண்டுகளைப் பெறுகிறது மற்றும் பேக்எண்டிலிருந்து (backend) நேரடி ஹெடரைச் சேர்க்கிறது.

முக்கியமான எண்கள்

மாற்றத்திற்குப் பிறகு:

  • டிரெண்டிங் பக்கத்திற்கான தரவுத்தளப் பணிச்சுமை (Database load) நிமிடத்திற்கு 4,000 வினவல்களிலிருந்து 50-க்கும் குறைவாகக் குறைந்தது.
  • 95-வது சதவீதத் தாமதம் (95th-percentile latency) 380 ms-லிருந்து 40 ms-ஆகக் குறைந்தது.

அமலாக்கத்திலிருந்து பெறப்பட்ட மூன்று நடைமுறைப் பாடங்கள்

1. கிரேஸ் பீரியட்கள் (Grace periods) கேச் மிஸ்ஸுகளைச் சீராக்குகின்றன ஒரு துண்டின் TTL காலாவதியாகும் போது, புதிய உள்ளடக்கத்தைப் பெற Varnish வழக்கமாகத் தாமதமடையும், இது ஒரே நேரத்தில் பல பேக்எண்ட் அழைப்புகள் நிகழும் “thundering herd” நிலையை உருவாக்கி தாமதத்தை அதிகரிக்கும். ஒரு கிரேஸ் பீரியடைத் (grace period) தீர்மானிப்பதன் மூலம், பின்னணியில் கேச்-ஐ அமைதியாகப் புதுப்பிக்கும் அதே வேளையில், Varnish பழைய துண்டையே தொடர்ந்து வழங்கும். பயனர்களுக்கு எந்தத் தடங்கலும் தெரியாது; பேக்எண்டிற்கு நிலையான, நிர்வகிக்கக்கூடிய கோரிக்கை விகிதம் கிடைக்கும்.

2. பெயர் தெரியாத துண்டுகளுக்கு குக்கீகளை நீக்குங்கள் (Strip cookies) ஒவ்வொரு கோரிக்கையுடனும் இணைக்கப்பட்டுள்ள குக்கீகள், Varnish ஒவ்வொரு கோரிக்கையையும் தனித்துவமானது என்று கருதச் செய்து, கேச் பயன்பாட்டை (cache hits) வீணாக்கிவிடும். குழு வீடியோ கிரிட் மற்றும் மொழி மாற்றும் கருவிக்கான குக்கீகளை நீக்கியது, இதனால் அந்தத் துண்டுகளைத் தீவிரமாக கேச் செய்ய முடிந்தது. ஹெடர் துண்டில் மட்டுமே குக்கீகள் இருக்கும், இது கேச் திறனைப் பாதிக்காமல் தனிப்பயனாக்கத்தைப் (personalization) பாதுகாக்கிறது.

3. சரோகேட் கீகள் (Surrogate keys) உடனடி நீக்கத்தை அனுமதிக்கின்றன சில நேரங்களில், பதிப்புரிமை காரணங்களுக்காக ஒரு வீடியோவை உடனடியாக நீக்க வேண்டியிருக்கும். 60 வினாடி TTL காலாவதியாகும் வரை காத்திருப்பது ஏற்றுக்கொள்ள முடியாதது. ஒவ்வொரு கேச் செய்யப்பட்ட துண்டையும் அதன் வீடியோ ஐடிகளைப் பிரதிபலிக்கும் ஒரு சரோகேட் கீயுடன் (surrogate key) இணைப்பதன் மூலம், குழு ஒரு ஒற்றை 'purge' கட்டளையை வழங்குகிறது. இது ஒவ்வொரு எட்ஜ் நோடிலும் (edge node) குறிப்பிட்ட வீடியோவின் அனைத்து நகல்களையும் உடனடியாகச் செல்லாததாக்குகிறது. இது முழு கேச்-ஐயும் ஸ்கேன் செய்வதைத் தவிர்க்கிறது மற்றும் தளத்தை விதிமுறைகளுக்கு உட்பட்டு வைக்கிறது.

சுருக்கம் (Takeaway): Varnish மற்றும் ESI மூலம் செய்யப்படும் துண்டு கேச்சிங் (Fragment caching), ஒரு பெரிய தரவுத்தளத்தைச் சார்ந்த பக்கத்தை இலகுவான, மீண்டும் பயன்படுத்தக்கூடிய துண்டுகளாக மாற்றுகிறது. இது பயனர் தனிப்பயனாக்கத்தைப் பாதுகாக்கும் அதே வேளையில், பேக்எண்ட் பணிச்சுமையையும் தாமதத்தையும் வெகுவாகக் குறைக்கிறது.