ദിവസേന ദശലക്ഷക്കണക്കിന് ചിത്രങ്ങൾ സേവിക്കുന്ന ഒരു വീഡിയോ-ഹോസ്റ്റിംഗ് സൈറ്റിനായി, തംബ്നെയിൽ ജനറേഷൻ (thumbnail generation) ഒരു PHP ബാക്കെൻഡിൽ നിന്ന് Cloudflare Workers-ലേക്ക് മാറ്റിയത് ഒറിജിൻ സെർവറിലെ (origin server) എല്ലാ CPU ലോഡും ഇല്ലാതാക്കി. ഈ മാറ്റം ഇമേജ് പ്രോസസ്സിംഗ് ലേറ്റൻസി (latency) ഡാറ്റാ സെന്ററിൽ നിന്ന് എഡ്ജിലേക്ക് (edge) മാറ്റുകയും, പ്രതികരണ സമയം (response time) കുറയ്ക്കുകയും ബാൻഡ്വിഡ്ത്ത് ചിലവുകൾ പ്രവചിക്കാവുന്നതാക്കുകയും ചെയ്തു.
പഴയ മാതൃക പരാജയപ്പെട്ടത് എന്തുകൊണ്ട്
പതിനായിരക്കണക്കിന് വീഡിയോകൾ പ്രദർശിപ്പിക്കുന്ന ഈ പ്ലാറ്റ്ഫോമിൽ, ഒരു പേജിൽ തന്നെ 40 തംബ്നെയിലുകൾ വരെ ഉൾപ്പെടുത്താറുണ്ട്. ഓരോ തംബ്നെയിലും ഒറിജിനൽ ഫയൽ വായിച്ച് അതിന്റെ വലിപ്പം മാറ്റുന്ന ഒരു PHP സ്ക്രിപ്റ്റ് വഴിയാണ് ആവശ്യാനുസരണം റീസൈസ് ചെയ്യുന്നത്. ക്രോളർമാർ (crawlers) സൈറ്റ് സന്ദർശിക്കുമ്പോൾ ബാക്കെൻഡ് സെർവർ പ്രവർത്തനരഹിതമാകുമായിരുന്നു (stall).
എഡ്ജ് പ്രോസസ്സിംഗ് അഞ്ച് പ്രധാന ആവശ്യകതകൾ പരിഹരിക്കുന്നു
ഒരു പ്രൊഡക്ഷൻ-ഗ്രേഡ് തംബ്നെയിൽ API താഴെ പറയുന്നവ കൈകാര്യം ചെയ്യണം:
- Fan-in – പല തേർഡ് പാർട്ടി ഹോസ്റ്റുകളിൽ നിന്ന് സോഴ്സ് ഇമേജുകൾ ശേഖരിക്കുക.
- Fan-out – വിവിധ വലിപ്പത്തിലുള്ളവ നിർമ്മിക്കുക (ഉദാഹരണത്തിന്, 320 px കാർഡുകൾ, 640 px ഹീറോ ഇമേജുകൾ).
- Format negotiation – ബാൻഡ്വിഡ്ത്ത് കുറയ്ക്കുന്നതിനായി ബ്രൗസർ പിന്തുണയ്ക്കുന്നുണ്ടെങ്കിൽ WebP അല്ലെങ്കിൽ AVIF നൽകുക.
- Cache – ആദ്യത്തെ റിക്വസ്റ്റ് ചിലവേറിയതാകാം, എന്നാൽ തുടർന്നുള്ള എല്ലാ റിക്വസ്റ്റുകളും സൗജന്യമാണെന്ന് ഉറപ്പാക്കുക.
- Security – ആരെങ്കിലും ഈ സേവനം ദുരുപയോഗം ചെയ്ത് തന്നിരിക്കുന്ന ഇമേജുകൾ പ്രോസസ്സ് ചെയ്യുന്നത് തടയുക.
ഒറിജിൻ്റെ CPU-യെ ബാധിക്കാതെ തന്നെ Cloudflare Workers ഈ ഓരോ കാര്യവും ചെയ്യുന്നു:
- Proximity – Workers ഉപയോക്താവിനോട് അടുത്തുള്ള ഡാറ്റാ സെന്ററുകളിൽ പ്രവർത്തിക്കുന്നു, അതിനാൽ പ്രോസസ്സ് ചെയ്ത ഇമേജ് കുറഞ്ഞ ദൂരം മാത്രമേ സഞ്ചരിക്കുകയുള്ളൂ.
- Built-in Image Resizing – പ്ലാറ്റ്ഫോമിലെ Image Resizing ഫീച്ചർ തന്നെ പിക്സൽ ജോലികൾ ചെയ്യുന്നു, അതിനാൽ ഒരു കസ്റ്റം ലൈബ്രറിയുടെ ആവശ്യമില്ല.
- Cache API – Workers റീസൈസ് ചെയ്ത ഇമേജ് എഡ്ജിൽ സൂക്ഷിക്കുന്നു; ആദ്യത്തെ റിക്വസ്റ്റിന് ശേഷം എഡ്ജ് അത് നേരിട്ട് നൽകുന്നു.
- Programmable security – ഒരു ചെറിയ സ്ക്രിപ്റ്റ് HMAC സിഗ്നേച്ചറുകൾ പരിശോധിക്കുന്നു, ഹോസ്റ്റ് നെയിമുകളുടെയും വീതിയുടെയും (widths) ഒരു allow-list നടപ്പിലാക്കുന്നു, കൂടാതെ cache poisoning ഒഴിവാക്കാൻ cache keys നോർമലൈസ് ചെയ്യുന്നു.
സിസ്റ്റം എങ്ങനെ പ്രവർത്തിക്കുന്നു
- Origin സൈൻ ചെയ്ത URL-കൾ നിർമ്മിക്കുന്നു – ബാക്കെൻഡ് ഒരു സീക്രട്ട് കീ സൂക്ഷിക്കുകയും ഓരോ തംബ്നെയിൽ റിക്വസ്റ്റിനും ഒരു HMAC സിഗ്നേച്ചർ ചേർക്കുകയും ചെയ്യുന്നു. URL-ൽ ആവശ്യമുള്ള വീതിയും (width) ഫോർമാറ്റും ഉൾപ്പെടുന്നു.
- Worker സിഗ്നേച്ചർ പരിശോധിക്കുന്നു – റിക്വസ്റ്റ് ലഭിക്കുമ്പോൾ, Worker ഷെയർ ചെയ്ത സീക്രട്ട് ഉപയോഗിച്ച് HMAC വീണ്ടും കണക്കാക്കുന്നു. സിഗ്നേച്ചർ ഇല്ലെങ്കിലോ തെറ്റാണെങ്കിലോ, ദുരുപയോഗം തടയാൻ റിക്വസ്റ്റ് നിരസിക്കപ്പെടുന്നു.
- Allow-list നടപ്പിലാക്കുന്നു – സോഴ്സ് ഹോസ്റ്റ് നെയിം മുൻകൂട്ടി നിശ്ചയിച്ച ലിസ്റ്റിൽ ഉണ്ടെന്നും ആവശ്യപ്പെട്ട വീതി അനുവദനീയമായ വലിപ്പമാണെന്നും സ്ക്രിപ്റ്റ് പരിശോധിക്കുന്നു. ഇത് ദോഷകരമായ ഹോസ്റ്റുകൾ കാഷെ ചെയ്യപ്പെടുന്നത് തടയുന്നു.
- Cache key normalization – കാഷെ കീയിൽ നിന്ന് സിഗ്നേച്ചർ നീക്കം ചെയ്യുന്നു; കീയിൽ സോഴ്സ് URL, വീതി, ഫോർമാറ്റ് എന്നിവ മാത്രമേ ഉണ്ടാകൂ. ഇത് ഒരേ ഇമേജ് ആവശ്യപ്പെടുന്ന വിവിധ ഉപയോക്താക്കൾക്ക് ഒരേ കാഷെ എൻട്രി തന്നെ ലഭിക്കാനുള്ള സാധ്യത വർദ്ധിപ്പിക്കുന്നു.
- Edge fetch and resize – ഇമേജ് കാഷെയിലില്ലെങ്കിൽ, Worker തേർഡ് പാർട്ടി ഹോസ്റ്റിൽ നിന്ന് ഒറിജിനൽ ഫയൽ എടുക്കുന്നു, Image Resizing API പ്രവർത്തിപ്പിക്കുന്നു, കൂടാതെ ഫലം എഡ്ജ് കാഷെയിൽ സൂക്ഷിക്കുന്നു.
- Cache warming – ഓരോ ക്രോളിംഗിന് ശേഷവും, ഒരു ലഘുവായ Python സ്ക്രിപ്റ്റ് പുതിയ തംബ്നെയിലുകൾ മുൻകൂട്ടി റിക്വസ്റ്റ് ചെയ്യുന്നു. അതിനാൽ ആദ്യത്തെ യഥാർത്ഥ ഉപയോക്താവിന് റീസൈസ് ഓപ്പറേഷനായി കാത്തുനിൽക്കാതെ തന്നെ കാഷെ ചെയ്ത മറുപടി ലഭിക്കുന്നു.
ഒരു മാസത്തിന് ശേഷമുള്ള അളക്കാവുന്ന മാറ്റങ്ങൾ
- ഇമേജുകൾക്കായുള്ള Origin CPU – പൂജ്യമായി കുറഞ്ഞു; ബാക്കെൻഡ് ഇനി ഒരിക്കലും ഇമേജ് ബൈറ്റുകൾ പ്രോസസ്സ് ചെയ്യുന്നില്ല.
- HTML സർവിംഗ് വേഗത – സെർവർ ഇനി ഇമേജ് ജോലികൾക്കായി തടസ്സപ്പെടാത്തതിനാൽ വേഗത ഗണ്യമായി മെച്ചപ്പെട്ടു.
- Edge cache hit rate – 96% ആയി ഉയർന്നു, അതായത് ബാക്കെൻഡ് ഫെച്ചിംഗ് ഇല്ലാതെ തന്നെ മിക്കവാറും എല്ലാ റിക്വസ്റ്റുകളും എഡ്ജിൽ നിന്ന് തന്നെ ലഭിച്ചു.
- Latency – ഇമേജുകൾ ഒരു സെൻട്രൽ ഒറിജിന് പകരം ഉപയോക്താവിനോട് അടുത്തുള്ള ഡാറ്റാ സെന്ററിൽ നിന്ന് നൽകുന്നതിനാൽ ലേറ്റൻസി കുറഞ്ഞു.
- Bandwidth predictability – എഡ്ജ് കാഷെ ഉപയോഗിക്കുന്നതിലൂടെ, ഒറിജിനിൽ നിന്നുള്ള ഔട്ട്ബൗണ്ട് ട്രാഫിക് സ്ഥിരതയുള്ളതും പ്രവചിക്കാൻ എളുപ്പവുമാണ്.
ചുരുക്കത്തിൽ
തംബ്നെയിൽ ജനറേഷൻ Cloudflare Workers-ലേക്ക് മാറ്റിയത് CPU-വിനെ ബാധിക്കുന്ന ഒരു തടസ്സത്തെ (bottleneck) കുറഞ്ഞ ചിലവുള്ള ഒരു എഡ്ജ് കാഷെയായി മാറ്റി. ഒറിജിൻ ഇപ്പോൾ സൈൻ ചെയ്ത URL-കൾ മാത്രം നൽകുന്നു, അതേസമയം ഫെച്ചിംഗ്, റീസൈസിംഗ്, ഫോർമാറ്റ് നിഗോഷ്യേഷൻ, കാഷെ ചെയ്ത ഫലങ്ങൾ നൽകുക എന്നിവ എഡ്ജ് കൈകാര്യം ചെയ്യുന്നു. ചിത്രങ്ങളെ വളരെയധികം ആശ്രയിക്കുന്ന ഏതൊരു സൈറ്റിനും—പ്രത്യേകിച്ച് ഒരു പേജിൽ ഡസൻ കണക്കിന് തംബ്നെയിലുകൾ കാണിക്കുന്ന വീഡിയോ പ്ലാറ്റ്ഫോമുകൾക്കും—ഈ എഡ്ജ്-ഫസ്റ്റ് സമീപനം വേഗതയേറിയ പേജുകളും, പ്രവചിക്കാവുന്ന ചിലവുകളും, "എന്താണ് കാണിക്കേണ്ടത്" (origin), "എങ്ങനെ എത്തിക്കണം" (edge) എന്നിവ തമ്മിലുള്ള വ്യക്തമായ വേർതിരിവും നൽകുന്നു.
