Caching ምንድን ነው? ለመተግበሪያ ገንቢዎች በቀላል ቋንቋ
Caching ለማግኘት ቀርፋፋ ወይም ውድ የነበረን ነገር ዝግጁ ቅጂ ማስቀመጥ ነው፤ ስለዚህ ቀጣዩ ጥያቄ ከዚያ ቅጂ በፍጥነት ሊመለስ ይችላል። የተቀመጠው ቅጂ cache ይባላል። ብራውዘርዎ ምስሎችን ያስቀምጣል፤ ስለዚህ ድረ-ገጽ ለሁለተኛ ጊዜ ሲጎበኙ በፍጥነት ይጫናል፤ ሰርቨር ደግሞ ቀርፋፋ የዳታቤዝ ጥያቄ ውጤት ያስቀምጣል፤ ስለዚህ ለእያንዳንዱ ጎብኚ እንደገና ማስኬድ አይኖርበትም።
Caching መተግበሪያዎችን ፈጣንና ለማስኬድ ርካሽ ያደርጋል። ዋናው ንግድ-ጠፍቶ (trade-off) ቅጂው ያረጀ ሊሆን መቻሉ ነው።
በAI ሲገነቡ ለምን አስፈላጊ ነው
Caching በAI በተገነቡ መተግበሪያዎች በሦስት መንገዶች ይገጥምዎታል፦
- «መተግበሪያውን አዘምኜ ነበር፣ ግን አሁንም የድሮውን ስሪት አያለሁ።» ይህ በጣም የተለመደ የcaching ጊዜ ነው፤ አብዛኛውን ጊዜ ጉዳት የለውም — ብራውዘርዎ ወይም CDN የተቀመጠ ቅጂ እያሳየ ነው።
- ፍጥነት። ገጽ ለእያንዳንዱ ጎብኚ ተመሳሳይ ቁጥሮችን ስለሚያሰላ ቀርፋፋ ከሆነ፣ ውጤቱን ማስቀመጥ ወዲያውኑ እንዲሰማ ሊያደርገው ይችላል።
- ወጪ። ብዙ AI መገንቢያዎችና hosts ለኮምፒዩቲንግ፣ ለዳታቤዝ ጊዜና ለውጫዊ API ጥሪዎች ያስከፍላሉ። አንድ ሺ ጎብኚዎች ተመሳሳይ ውድ ጥያቄ ቢያስነሱ፣ caching አንድ ጊዜ ብቻ እንዲከፍሉ ያስችልዎታል።
መሠረታዊ ነገሮቹን ማወቅ caching ለሚረዳበት ቦታ እንዲጠይቁ ያስችልዎታል፤ ነገር ሲያልፍ የሚታየው ለምን እንደሆነ ለማወቅም ይረዳል።
ዕለታዊ ምሳሌ
የተጨናነቀ ካፌ ኩሽና አስቡ።
ሼፉ በየጠዋቱ እያንዳንዱን ቡና ሲታዘዝ ከአዲስ ከተፈጨ ባቄላ ሊያፈላ ይችላል። ያ ቀርፋፋ ነው። በምትኩ በሙቅ ሳህን ላይ አንድ ድስት የፋይልተር ቡና ዝግጁ ያደርጋሉ። አብዛኛዎቹ ደንበኞች በሰከንዶች ውስጥ ኩባያ ያገኛሉ — ይህ cache hit ነው። ድስቱ ሲያልቅ አዲስ ያፈላሉ — cache miss።
ቡና ረዥም ጊዜ ከቆየ ግን ይበላሻል፣ ስለዚህ ካፌው ህግ አለው፦ ከ30 ደቂቃ በላይ የቆየ ማንኛውንም ድስት ይጥሉ። ይህ ህግ የcacheው expiry time ነው። ማንም ቀኑን ሙሉ አንድ ድስት አያቆይም፤ ማንም የአንድ ሰው በኦት ወተትና በሦስት ስኳር የተለየ ትዕዛዝ አስቀድሞ አያፈላም — አንዳንድ ነገሮች ጨርሶ መቀመጥ የለባቸውም።
Caches የሚኖሩበት ቦታ
አንድ የገጽ መጫን ከበርካታ caches ሊያልፍ ይችላል፣ ከተጠቃሚው ቅርብ ከሆነው እስከ ሩቅ ድረስ፦
| Cache | የሚገኝበት ቦታ | ብዙ ጊዜ የሚያስቀምጠው | ምሳሌ |
|---|---|---|---|
| Browser cache | በጎብኚው መሣሪያ ላይ | ምስሎች፣ stylesheets፣ scripts፣ fonts | ሎጎዎ በሁለተኛ ገጽ ወዲያውኑ ይጫናል |
| CDN cache | ዓለም ዙሪያ ያሉ ሰርቨሮች፣ ጎብኚዎች አጠገብ | ስታቲክ ፋይሎችና አንዳንዴ ሙሉ ገጾች | በቶኪዮ ያለ ጎብኚ ከምንጩ ሳይሆን ከቅርብ ሰርቨር ፋይሎችን ያገኛል |
| Application cache | በሰርቨርዎ ላይ ወይም አጠገብ፣ ብዙ ጊዜ በmemory ወይም Redis ውስጥ | የቀርፋፋ ጥያቄዎች ወይም የውጫዊ API ጥሪዎች ውጤት | የዛሬ የምንዛሪ ዋጋዎች፣ በሰዓት አንድ ጊዜ የተገኙ |
| Database cache | በዳታቤዙ ውስጥ | በቅርቡ ጥቅም ላይ የዋለ ዳታና የጥያቄ ዕቅዶች | ታዋቂ ረድፎች በፈጣን memory ውስጥ ይቆያሉ |
CDN (content delivery network) በመሠረቱ ለድረ-ገጽዎ ፋይሎች ዓለም አቀፍ የcaches አውታረ መረብ ነው።
Cache የሚቀመጠውን እንዴት ይወስናል
እያንዳንድ cache ተመሳሳይ ጥያቄዎችን መመለስ አለበት፦
- ምን ሊቀመጥ ይችላል? ይፋዊ፣ የጋራ ዳታ (የምርት ምስል፣ የብሎግ ጽሑፍ) — አዎ። የግል ዳታ (የተጠቃሚ የአካውንት ገጽ፣ መልዕክቶቻቸው) — በጋራ cache ውስጥ በጭራሽ።
- ለምን ያህል ጊዜ? ይህ TTL (time to live) ነው። ሎጎ ለአንድ ዓመት ሊቀመጥ ይችላል፤ የክምችት መጠን ግን ለ30 ሰከንድ።
- እንዴት ይዘመናል? ወይ ቅጂው ያልፍና እንደገና ይመጣል፣ ወይም ዳታው ሲቀየር መተግበሪያው ሆን ብሎ ያስወግደዋል — invalidation ይባላል።
ለድረ-ገጾች ሰርቨሩ ብራውዘሮችና CDNs እያንዳንዱን ፋይል እንዴት እንደሚያስቀምጡ Cache-Control header በመጠቀም ይነግራቸዋል። ለምሳሌ Cache-Control: max-age=3600 ማለት «ይህን ቅጂ ለአንድ ሰዓት እንደገና መጠቀም ትችላለህ» ማለት ነው።
ዘመናዊ build መሣሪያዎች ለስታቲክ ፋይሎች በጣም አስቸጋሪውን ክፍል በcache busting ይይዛሉ፦ ፋይል በተቀየረ ቁጥር በfingerprint የተለየ ስም ያገኛል፣ ለምሳሌ app.3f9a2c.js። አዲሱ ስሪት የተለየ ስም ስላለው ብራውዘሮች የድሮውን ስም ለረጅም ጊዜ ሊያስቀምጡ ይችላሉ።
ምሳሌ፦ የምርት ካታሎግ
ትንሽ የኦንላይን ሱቅ አለዎት። መነሻ ገጹ ከዳታቤዝ 50 ምርቶችን ከዋጋዎችና ከክምችት መጠኖች ጋር ያሳያል፤ እንዲሁም በሁሉም ትዕዛዞች ላይ ቀርፋፋ ስሌት የሚጠይቅ «trending» ዝርዝር አለ።
- ምስሎችና scripts ለረጅም ጊዜ በብራውዘሩና በCDN ይቀመጣሉ። እያንዳንዱ አዲስ build የተቀየሩ ፋይሎችን አዲስ ስም ስለሚሰጥ ዝማኔዎች አሁንም ይታያሉ።
- የtrending ዝርዝሩ በእያንዳንዱ 10 ደቂቃ አንድ ጊዜ ይሰላል እና በapplication cache ይቀመጣል። በእነዚያ 10 ደቂቃዎች ውስጥ እያንዳንዱ ጎብኚ የተቀመጠውን ውጤት ወዲያውኑ ያገኛል።
- ዋጋዎች ለአጭር ጊዜ ይቀመጣሉ፣ እና ምርት ባስተካከሉ ቁጥር cacheው ይጸዳል፤ ስለዚህ ደንበኞች የድሮ ዋጋ ለረጅም ጊዜ በጭራሽ አያዩም።
- በcheckout ላይ ያለው ክምችት በጭራሽ አይቀመጥም። አንድ ሰው «Buy» ሲጫን መተግበሪያው ትክክለኛውን ዳታቤዝ ይፈትሻል፤ ስለዚህ ገና የተሸጠን ዕቃ መሸጥ አይችልም።
- የካርትና የአካውንት ገጾች በጋራ caches ውስጥ በጭራሽ አይቀመጡም፤ ምክንያቱም የግል ናቸው።
ውጤቱ፦ መነሻ ገጹ ፈጣን ነው፣ ዳታቤዙ በጣም ያነሰ ስራ ይሠራል፣ ለገንዘብ ወይም ለግላዊነት ወሳኝ የሆነ ነገር በጭራሽ ያረጀ አይሆንም።
ቁልፍ ቃላት
| ቃል | ትርጉም |
|---|---|
| Cache hit / miss | ዳታው በcacheው ውስጥ ተገኘ / ከምንጩ መምጣት ነበረበት። |
| TTL (time to live) | የተቀመጠ ቅጂ ትኩስ ተደርጎ የሚቆጠርበት ጊዜ። |
| Stale data | ያረጀ የተቀመጠ ቅጂ። |
| Invalidation | ዋናው ስለተቀየረ የተቀመጠን ቅጂ ሆን ብሎ ማስወገድ። |
| Cache busting | ፋይል ሲቀየር ስሙን ወይም URLውን መቀየር፣ ስለዚህ caches አዲሱን ስሪት እንዲያመጡ። |
| Cache-Control | ብራውዘሮችና CDNs ምላሽን እንዴት እንደሚያስቀምጡ የሚነግር HTTP header። |
| Hard refresh | ብራውዘሩ cacheውን እንዲያልፍ እየነገሩ ገጽን እንደገና መጫን። |
| Redis | በmemory ውስጥ የሚሠራ ታዋቂ የዳታ ማከማቻ፣ ብዙ ጊዜ እንደ application cache የሚያገለግል። |
የተለመዱ የተሳሳቱ ግንዛቤዎች
- «Caching ሁልጊዜ ጥሩ ነው።» የተሳሳተ ነገር ማስቀመጥ እውነተኛ ስህተቶችን ያመጣል፦ የድሮ ዋጋዎች፣ ያልታዩ አዳዲስ ልጥፎች ወይም — በከፋው ሁኔታ — የአንድ ተጠቃሚ የግል ገጽ ለሌላ መታየት። ሆን ብለው ያስቀምጡ።
- «የድሮውን ስሪት ካየሁ ዝማኔዬ አልተሳካም ማለት ነው።» ብዙውን ጊዜ አልተሳካም ማለት አይደለም። የሆነ ነገር የተበላሸ ነው ብለው ከመገመትዎ በፊት hard refresh (Ctrl+Shift+R፣ ወይም በMac Cmd+Shift+R) ወይም private window ይሞክሩ።
- «Caching ቀርፋፋ መተግበሪያን ያስተካክላል።» ለተደጋጋሚ ጥያቄዎች ቀርፋፋነቱን ይደብቃል። የመጀመሪያው ጥያቄ አሁንም ቀርፋፋ ነው፤ መሠረታዊው ችግር የጎደለ የዳታቤዝ ኢንዴክስ ከሆነ ያንንም ያስተካክሉ።
- «ሁሉንም በተቻለ መጠን ለረጅም ጊዜ ማስቀመጥ አለብኝ።» ረጅም የcache ጊዜ ሲቀየሩ አዲስ ስም ለሚያገኙ ፋይሎች ይስማማል። ለHTML ገጾችና ዳታ አጭር ጊዜ ይበልጥ ደህና ነው።
- «ካሼዬን ማጽዳት ለሁሉም ያስተካክላል።» የሚያጸዳው የእርስዎን ብራውዘር ብቻ ነው። ጎብኚዎችና CDN caches አሁንም የራሳቸው ቅጂ አላቸው።
ለAI መገንቢያዎ ምን ብለው ይጠይቁ
- «በዚህ መተግበሪያ የትኞቹ ክፍሎች ቀርፋፋ ናቸው፣ የትኞቹን በደህና ማስቀመጥ እንችላለን?»
- «[trending ዝርዝር / API ውጤት] ለ[N] ደቂቃ አስቀምጥ፤ መሠረታዊው ዳታ ሲቀየር አጽዳው።»
- «የግል ወይም የአካውንት ዳታ ያለበት ገጽ በCDN ወይም በጋራ cache እንዳይቀመጥ አረጋግጥ።»
- «ለfingerprint የተደረገባቸው ስታቲክ ፋይሎች ረጅም የcache ጊዜ፣ ለHTML አጭር ጊዜ አዘጋጅ።»
- «ከ[ውጫዊ API] የሚመጡ ምላሾችን አስቀምጥ፤ በእያንዳንዱ የገጽ መጫን እንዳንጠራው — ዳታው ምን ያህል ሊያረጅ እንደሚችል ንገረኝ።»
- «ካተምኩ በኋላ የድሮ ስሪት አያለሁ። ይህ የብራውዘሬ cache ነው ወይስ የሆነ ነገር አልተዘረጋም?»
Caching በMythex
የMythex መተግበሪያ ዝማኔ ካተሙ በኋላ ሰነዶቹ CDN caches ለአጭር ጊዜ ሊዘገዩ እንደሚችሉ ይገልጻሉ፤ የይፋው URL hard refresh ማድረግ አዲሱን ስሪት ያሳያል — እንዴት ማተም እንደሚቻል ይመልከቱ። የHosting limits ገጽ ደግሞ ስታቲክ ንብረቶችን ማስቀመጥ ይመክራል፤ ምክንያቱም hosting፣ የዳታቤዝ ጊዜና bandwidth ከክሬዲት ቀሪ ሂሳብዎ ይከፈላሉ። ከዚያ ያለፈ — የጥያቄ ውጤቶችን ወይም API ምላሾችን ማስቀመጥ — ኤጀንቱ በመተግበሪያዎ ውስጥ እንዲገነባ የሚጠይቁት ነገር ነው።
ተዛማጅ ንባብ፦ CDN ምንድን ነው፣ ድረ-ገጽዎን እንዴት ፈጣን ማድረግ እንደሚቻል እና rate limiting ምንድን ነው።
ጥያቄዎች
Caching በቀላል ቋንቋ ምንድን ነው?
Caching ለማግኘት ቀርፋፋ ወይም ውድ የነበረን ነገር ቅጂ ማስቀመጥ ነው፤ ስለዚህ ቀጣይ በሚያስፈልግ ጊዜ ከተቀመጠው ቅጂ በፍጥነት ይቀርባል። ብራውዘሮች፣ CDNs፣ ሰርቨሮችና ዳታቤዞች መተግበሪያዎችን ፈጣንና ለማስኬድ ርካሽ ለማድረግ caches ይጠቀማሉ።
ድረ-ገጼን ካዘመንኩ በኋላ አሁንም የድሮውን ስሪት የማየው ለምንድን ነው?
ብራውዘርዎ ወይም CDN የድሮ ፋይሎች የተቀመጠ ቅጂ እያቀረበ ሊሆን ይችላል። Hard refresh (በWindows Ctrl+Shift+R፣ በMac Cmd+Shift+R) ብዙ ጊዜ ያስተካክለዋል። ለጎብኚዎች በደንብ የተሠሩ ድረ-ገጾች የተዘመኑ ፋይሎችን አዲስ ስም ስለሚሰጡ caches አዲሱን ስሪት በራሳቸው ያወርዳሉ።
የcache ማጽዳት ምን ያደርጋል?
የብራውዘር cacheን ማጽዳት ብራውዘሩ ያስቀመጣቸውን የፋይሎችና ገጾች ቅጂዎች ይሰርዛል፤ ስለዚህ ቀጣይ ጊዜ ሁሉንም በአዲስ ያወርዳል። የተበላሸ ወይም ያረጀ የሚመስሉ ገጾችን ሊያስተካክል ይችላል፤ ከዚያ በኋላ ገጾቹ በመጀመሪያ ጊዜ ትንሽ ዘገምተኛ ይሆናሉ።
Caching ችግር ሊፈጥር ይችላል?
ይችላል። ዋናው አደጋ ያረጀ ዳታ ማቅረብ ነው — ያረጀ ዋጋ ወይም ያልዘመነ የክምችት መጠን — ወይም ይበልጥ የከፋው፣ የአንድ ተጠቃሚ የግል ገጽ ተቀምጦ ለሌላ ሰው ማሳየት። ጥሩ የcaching ህጎች ምን ሊቀመጥ እንደሚችል፣ ለምን ያህል ጊዜና የግል ዳታ በጋራ caches ውስጥ በጭራሽ እንዳይቀመጥ ይወስናሉ።