+− THE DAILY DIFFdev & AI news
SHIP IT

Shopify የዕቃ ማከማቻ ቦታዎችን ወደ MySQL አዛወረ

Shopify የዕቃ ማከማቻ ሥርዓቱን ከ Redis ወደ MySQL ዳታቤዝ አዛውሯል፣ ይህም የዕቃ ማከማቻ ደብተር አስቀድሞ ይዟል። በተናጥል ሊቆለፉ የሚችሉ የተገደበ የዩኒት ረድፎች ስብስብ ተጓዳኝ ክፍያዎች የተለያዩ ብቁ ዩኒቶችን ለመምረጥ SKIP LOCKED እንዲጠቀሙ ያስችላቸዋል። ዲዛይኑ የግብይት ወሰኖች፣ ዋና ቁልፍ አቀማመጥ፣ የመሙያ ደንቦች እና በክፍያ ጊዜ የግንኙነት መያዣ ጊዜን መከታተል ላይ የተመሰረተ ነው።

Shopify የዕቃ ማከማቻ ሥርዓቱን ከ Redis ወደ MySQL ዳታቤዝ አዛውሯል፣ ይህም የዕቃ ማከማቻ ደብተር አስቀድሞ ይዟል። በተናጥል ሊቆለፉ የሚችሉ የተገደበ የዩኒት ረድፎች ስብስብ ተጓዳኝ ክፍያዎች የተለያዩ ብቁ ዩኒቶችን ለመምረጥ SKIP LOCKED እንዲጠቀሙ ያስችላቸዋል። ዲዛይኑ የግብይት ወሰኖች፣ ዋና ቁልፍ አቀማመጥ፣ የመሙያ ደንቦች እና በክፍያ ጊዜ የግንኙነት መያዣ ጊዜን መከታተል ላይ የተመሰረተ ነው።

የጽሑፍ እትሙን ያንብቡ (እንግሊዝኛ) ↗

ይህ ቪዲዮ ምን ይሸፍናል

  • የድሮው የ Redis መጠን ቆጣሪ ሞዴል ተጓዳኝነትን ይቆጣጠር ነበር፣ ነገር ግን የመጠባበቂያ ማጽዳት እና የ MySQL ደብተር ማሻሻያ አንድ ነጠላ የአካባቢ አቶሚክ ግብይት መጋራት አልቻሉም።
  • ተተኪው በእያንዳንዱ ዕቃ/አካባቢ ጥምረት እስከ 1,000 በሚደርስ ገደብ ውስጥ በእያንዳንዱ የሚገኝ ዩኒት አንድ ረድፍ ይጠቀማል። ባዶ ገንዳ የመሙላት መቆለፊያ ኋላ በሚጠብቁ ተጓዳኝ ጥያቄዎች የመስመር ላይ መሙላትን ሊያስነሳ ይችላል።
  • የተዋሃደው ዋና ቁልፍ (shop_id, inventory_item_id, inventory_group_id, id) ነው። Shopify በፕሮቶታይፑ ውስጥ የመቆለፊያ ወጪን ቀንሷል እና የመሙላትን የከለከሉትን የባዶነት መቆለፊያዎች ለማስቀረት READ COMMITTEDን ተጠቅሟል።
  • ማስያዣዎች የመጠባበቂያ መዝገቦችን ከማስገባትዎ በፊት የገንዳ ረድፎችን ይሰርዛሉ። መፈጸም የመረጃ ቋት መቆለፊያዎችን ይለቃል፣ የተከማቸው ይዞታ ክፍያ ላይ ይቆያል፤ የተሳካ ክፍያ ደብተሩን ይጠይቃል እና ማስያዣውን በኋላ በአቶሚክ ግብይት ያስወግዳል።
  • MySQL SKIP LOCKEDን እንደ የማይጣጣም እይታ ይገልጸዋል፣ ይህም የተቆለፉ ረድፎችን ይተዋል ማለት ነው። የተሟላ የዕቃ ቆጠራ ወይም ፍትሃዊ ተራ መውሰድን አያቋቁምም፣ ለረድፍ ደረጃ መቆለፊያዎች ብቻ ነው የሚሰራው እና ለመግለጫ ላይ የተመሰረተ ማባዛት ደህንነቱ የተጠበቀ አይደለም።
  • የመጀመሪያው ምሳሌ expires_atን ያካትታል፣ ነገር ግን Shopify የ MySQL ጊዜ ማብቂያ-ማጽዳት አልጎሪዝምን አያብራራም። የቪዲዮው ልቀትን/ጊዜ ማብቂያ ቅርንጫፍ የማብራሪያ የሕይወት ዑደት መስፈርት ነው።
  • በሌላ የክፍያ ኮድ ውስጥ የግንኙነት መያዣ ጊዜ የመጨረሻው የፍሰት መጨናነቅ ነበር። Shopify ሁለቱንም ስርዓቶች በጥላ ጽፎ፣ ውጤቶችን አወዳድሮ እና በ Redis kill-switch ምትኬ ቀስ በቀስ ቀይሯል።

የተተረጎመ ግልባጭ

ከዋናው የእንግሊዝኛ ትረካ የተተረጎመ። የሚገኙ ኦዲዮ እና መግለጫ ጽሑፎች በYouTube ቁጥጥር ስር ናቸው።

ለምን ማስያዣዎችን ወደ MySQL ማዛወር አስፈለገ?

0:00 የሂሳብ ማረጋገጫ በፍጥነት ለመስራት Redis ያስፈልገዋል። Shopify የዕቃ ማስያዣዎችን ወደ MySQL አዛወረ፣ ለእያንዳንዱ ክፍል አንድ ረድፍ በ የተገደበ ገንዳ ውስጥ በመጠቀም። MySQLን የመረጠው ለምንድን ነው? መቆለፊያዎችን በአስተማማኝ ሁኔታ እንዴት መዝለል ይቻላል? ይህ The Daily Diff ነው፣ ከጀርባው። እና ፈጣን መጠይቆች አሁንም ገደብ የነካው ለምንድን ነው? Shopify በመስመር ላይ እና በአካል ለመሸጥ የንግድ መድረክ ነው። Redis በማስታወሻ ውስጥ ያለ የውሂብ ማከማቻ ነው።

0:21 MySQL የሪላሽናል ዳታቤዝ ሲሆን Shopify የዕቃውን ደብተር አስቀድሞ እዚያ ያቆይ ነበር። ማስያዣ ገዢ ሲከፍል ዕቃን ለአጭር ጊዜ ይይዛል።

ሁለት ማከማቻዎች አደገኛ የነበሩት ለምንድን ነው?

0:29 የእነሱ የ Redis ሞዴል የዕቃ ቆጣሪን ይቀንስ ነበር። የተከፈለ ትዕዛዝ መጠየቅ ማለት የ MySQL ደብተርን ማዘመን እና Redisን ማጽዳት ማለት ነበር። እነዚያ የተለያየ ጽሑፎች ዕቃ ሁለት ጊዜ የተሸጠ ወይም መሸጥ ሲገባው የማይገኝ እንዲሆን ሊያደርጉ ይችላሉ። የድሮው ሞዴል የቦታ ግንዛቤም አልነበረውም። ተተኪው ትዕዛዙን ከሚያሟላ ቦታ ዕቃ መምረጥ አለበት። በተሳሳተ አህጉር ላይ ያለ መጋዘን በጣም ጥሩ የዳታቤዝ ግቤት እና አስከፊ የማድረስ ቃል ኪዳን ነው። ቀደም ሲል የ MySQL ሙከራዎች የብዛት ረድፍ ይጠቀሙ ነበር፣ ስለዚህ ተወዳዳሪ ክፍያዎች በተመሳሳይ

ሊቆለፍ የሚችለው ክፍል ምን ይሆናል?

0:56 መቆለፊያ ላይ ይሰለፉ ነበር። አንድ ቬልቬት ገመድ በአንድ የሰንጠረዥ ሕዋስ ዙሪያ እንዳለ አስቡ። የበለጠ ሰራተኞችን መጨመር ወረፋውን ብቻ ያረዝማል። Shopify ሊቆለፍ የሚችለውን ነገር ለውጧል። እያንዳንዱ የሚገኝ ክፍል የራሱን ረድፍ ያገኛል። የመቆለፍ ንባብ ሌሎች ግብይቶች የያዙትን ክፍሎች ይዘላል እና ሌሎች ብቁ ክፍሎችን ይመርጣል። የተለያዩ ሰራተኞች የተለያዩ ረድፎችን ማግኘት ይችላሉ፣ ሞቃት ቆጣሪው ከመንገዳቸው ይወጣል።

ገንዳው ሲባዶ ምን ይሆናል?

1:15 ያ ገንዳ በእያንዳንዱ ዕቃ እና ቦታ አንድ ሺህ ረድፎች ላይ የተገደበ ነው። መሙላት ከደብተሩ ይሳባል። ባዶ ከሆነ፣ የመጠባበቂያ መንገድ በመስመር ላይ ይሞላል፣ ተወዳዳሪ ጥያቄዎች ከመሙላት መቆለፊያ ጀርባ ይጠብቃሉ። ባዶ ገንዳ ማለት ባዶ መጋዘን ማለት አይደለም። ማስያዣ የተመረጡ የገንዳ ረድፎችን ይሰርዛል፣ ከዚያም በመጠባበቂያ መዝገቦችን በ ግብይት ውስጥ ያስገባል። መፈጸም የመረጃ ቋት መቆለፊያዎችን ይለቃል።

1:35 መልሶ መገልበጥ ለውጦችን ይቀለብሳል። ማስያዣው ክፍያ በሚካሄድበት ጊዜ እንደ ተከማቸ ሁኔታ ይኖራል። የተሳካ ክፍያ ደብተሩን ይጠይቃል እና ማስያዣውን በአቶሚክ ሁኔታ ያስወግዳል። የዳታቤዝ መቆለፊያዎች የክፍያ ቅጹን መንከባከብ አያስፈልጋቸውም። የእነሱ የተዋሃደ ዋና ቁልፍ በሱቅ፣ ዕቃ፣ ቡድን፣ ከዚያም ክፍል ማንነት ይጀምራል። ፍለጋውን ማዛመድ በፕሮቶታይፓቸው ውስጥ የመረጃ ጠቋሚ መቆለፍን ቀንሷል። እንዲሁም የገንዳ መሙላትን የከለከሉትን የባዶነት መቆለፊያዎችን ለማስቀረት Read Committedን ይጠቀማሉ፣ እና ክብ ቅርጽ ያላቸውን መጠበቆች ለመከላከል ወጥነት ያለው የሰንጠረዥ ቅደም ተከተል።

1:57 እንዲሁም የገንዳ መሙላትን የከለከሉትን የባዶነት መቆለፊያዎችን ለማስቀረት Read Committedን ይጠቀማሉ፣ እና ክብ ቅርጽ ያላቸውን መጠበቆች ለመከላከል ወጥነት ያለው የሰንጠረዥ ቅደም ተከተል ይጠቀማሉ። የታተመው ምሳሌ ጊዜ ማብቂያ ጊዜን ይመዘግባል። የተተዉ ክፍያዎች ዕቃው እንዲለቀቅ ያስፈልጋል፣ አለበለዚያ የገበያ ጋሪው ባለንብረት ይሆናል። የShopify ጽሑፍ ያንን የጽዳት አልጎሪዝም አልገለጸም፣ ስለዚህ ይህ ሥዕላዊ መግለጫ የሕይወት ዑደት መስፈርትን ያሳያል። ይህ ነው ዋናው ነገር።

SKIP LOCKED ምን ይተዋል?

2:14 Skip locked የተቆለፉ ረድፎችን አያካትትም፣ ስለዚህ መመሪያው ውጤቱን የማይጣጣም እይታ ይለዋል። የተሟላ የዕቃ ቆጠራም ሆነ ፍትሃዊ ተራ መውሰድን አይሰጥም። የመገኘት ውሳኔን እና የመሙላት ደንቦችን ከሱ ጋር ያቆዩ።

እውነተኛው ገደብ የት ነበር?

2:26 እና ያ ገደብ? ሌላ የሂሳብ ማረጋገጫ ኮድ የመረጃ ቋት ግንኙነቶችን ለረጅም ጊዜ ይይዝ ነበር። Shopify ደዋዮችን ለይቶ የግንኙነት መያዣ ጊዜን ለካ፣ ከዚያም የሂሳብ ማረጋገጫ መንገዱን አጸዳ እና የክር ተጓዳኝነትን እንደገና ገመገመ። ፈጣን መጠይቆች አሁንም ከመጠይቁ ውጪ ሊሰለፉ ይችላሉ።

ይህን ንድፍ ለምን ልልክ እችላለሁ?

2:38 ሁለቱንም ስርዓቶች ከ Redis ስልጣን ጋር በጥላ ጽፈዋል፣ ውጤቶችን አወዳድረው፣ ከዚያም በ kill switch ቀስ በቀስ ቀይረዋል። የኔ ብያኔ SHIP IT ነው። የተጋራውን የግብይት ወሰን እና ያንን የሚቀለበስ ስርጭት እልክ ነበር፣ ሙሉው የሂሳብ ማረጋገጫ መንገድ በመሳሪያ የታጀበ። ስለዚህ ጉዳይ ጥያቄ አለዎት? በአስተያየቶች ውስጥ ያስቀምጡት። እና ለዛሬ ያለው ልዩነት ይህ ነው።

2:54 እኔ ከ Axrisi ኒኮ ነኝ። በኃላፊነት ያዋህዱ።

ምንጮች

  1. We replaced Redis with MySQL for inventory reservations—and it scaledShopify Engineering — Emilie Noel
  2. Simplified reservation SQL embedded in Shopify's articleShopify Engineering / CourtneySymons on GitHub Gist
  3. MySQL 8.0 — Locking ReadsOracle / MySQL Reference Manual
  4. MySQL 8.0 — Transaction Isolation LevelsOracle / MySQL Reference Manual
  5. What Is Shopify and How Does It Work?Shopify
  6. Redis quick startsRedis documentation
  7. What is MySQL?Oracle / MySQL Reference Manual

ተዛማጅ ቪዲዮዎች

under-the-hood · am · 11 ኦክቶ 2026

ምላሹ ሲጠፋ Stripe ጥያቄዎን ያስታውሳል

አገልጋዩ ክዋኔውን ከጨረሰ በኋላ የጊዜ ማብቂያ ክፍያውን እርግጠኛ እንዳይሆን ሊያደርግ ይችላል። ይህ ከሽፋኑ ስር ያለው ማብራሪያ የተረጋጋ የክዋኔ ቁልፎችን፣ የተቀመጡ ምላሾችን እንደገና ማጫወት፣ የፓራሜትር እና የተመሳሰሉ ገደቦችን፣ የማቆያ አድማስን እና የውጤት ማስታረቅን ለማሳየት የStripe API v1ን የተመዘ

2:54 ↗
under-the-hood · am · 24 ሴፕቴ 2026

SAML፣ ከሽፋኑ ስር፡ ደብዳቤው ውስጥ ያለው ፊርማ

SAML እርስዎን ወደ እያንዳንዱ የስራ መተግበሪያ ያስገባዎታል፣ እና ፊርማው በሚፈርመው XML ውስጥ ይኖራል። ከሽፋኑ ስር፡ በመተግበሪያው፣ በአሳሹ እና በየማንነት አቅራቢው መካከል ያለው የመግቢያ ዳንስ፣ አንድ ማረጋገጫ ምን እንደሚመስል፣ የካኖኒካላይዜሽን ሂደት በእያንዳንዱ ባይት ላይ መስማማት ያለበት ለምንድን ነ

3:02 ↗
under-the-hood · am · 23 ሴፕቴ 2026

አንድ ሞዴል ከጀርባ ሲሞት

የኤአይ ሞዴል አይሞትም — የመዝጊያ ቀን ይሰጠዋል፣ እና በማግስቱ ጠዋት የእርስዎ ኤፒአይ ጥሪ 404ን ይመልሳል፡- "ሞዴሉ ጊዜ ያለፈበት ሆኗል፣ እዚህ የበለጠ ይረዱ።" ከጀርባው፡- የአራት-ግዛት ቧንቧ (አክቲቭ → ሌጋሲ → ጊዜ ያለፈበት → ጡረታ የወጣ)፣ የማሳወቂያ መስኮቶች (OpenAI ≥ 6 ወራት / 3 ወራት

3:15 ↗
under-the-hood · am · 21 ሴፕቴ 2026

ክሎድ RSA-896ን ከፈለ። RSA በእርግጥ እንዴት እንደሚሰበር እነሆ

በሴፕቴምበር 19፣ የአንትሮፒክ መሐንዲስ RSA-896ን — ባለ 270 አሃዝ ፈተና ቁጥር — በክሎድ፣ ክፍት ምንጭ CADO-NFS ወንፊት በጂፒዩ ወደብ እና ለ10 ቀናት በ2,048 ስራ የሌላቸው ጂፒዩዎች ላይ ~30 ጂፒዩ-ዓመታት በመጠቀም ከፈለ። ይህ የተደረገው ኮግኒሽን ዲቪን RSA-260ን ከፈተ ከ16 ቀናት በኋላ

3:39 ↗