Shopify ilihamisha uhifadhi wa orodha hadi MySQL
Shopify ilihamisha mfumo wake wa kuhifadhi orodha kutoka Redis hadi hifadhidata ya MySQL ambayo tayari ilikuwa na leja ya orodha.
Shopify ilihamisha mfumo wake wa kuhifadhi orodha kutoka Redis hadi hifadhidata ya MySQL ambayo tayari ilikuwa na leja ya orodha. Kundi lililofungwa la safu mlalo za vitengo vinavyoweza kufungwa kibinafacha huruhusu malipo yanayotokea kwa wakati mmoja kutumia SKIP LOCKED kuchagua vitengo tofauti vinavyostahiki. Muundo pia unategemea mipaka ya miamala, mpangilio wa funguo msingi, sheria za kujaza tena na kuchunguza muda wa kushikilia muunganisho wakati wa malipo.
Soma toleo lililoandikwa (Kiingereza) ↗
Nini video hii inashughulikia
- Mfumo wa zamani wa Redis wa kuhesabu kiasi ulishughulikia utendaji wa wakati mmoja, lakini usafishaji wa uhifadhi na sasisho la leja ya MySQL hazikuweza kushiriki muamala mmoja wa atomiki wa ndani.
- Badiliko linatumia safu mlalo moja kwa kila kitengo kinachopatikana katika kundi lililowekewa kikomo cha 1,000 kwa kila bidhaa/eneo. Kundi tupu linaweza kuanzisha ujazaji wa moja kwa moja na maombi yanayotokea kwa wakati mmoja yakisubiri nyuma ya kufuli ya kujaza tena.
- Funguo msingi ya mchanganyiko ni (shop_id, inventory_item_id, inventory_group_id, id). Shopify ilipunguza gharama ya kufuli katika mfumo wake wa mfano na kutumia READ COMMITTED ili kuepuka kufuli za pengo zilizozuia ujazaji tena.
- Uhifadhi hufuta safu mlalo za kundi kabla ya kuingiza rekodi za uhifadhi. Kukamilisha huachia kufuli za hifadhidata wakati uhifadhi ulihifadhiwa ukiendelea baada ya malipo; malipo yenye mafanikio hudai leja na kuondoa uhifadhi katika muamala wa atomiki wa baadaye.
- MySQL inaeleza SKIP LOCKED kama mtazamo usio thabiti unaoacha safu mlalo zilizofungwa. Haileti hesabu kamili ya hisa au zamu ya haki, inatumika tu kwa kufuli za kiwango cha safu mlalo na si salama kwa urudufishaji unaotegemea taarifa.
- Mfano wa chanzo unajumuisha expires_at, lakini Shopify haielezei algorithm ya usafishaji wa kumalizika muda wa MySQL. Tawi la kutolewa/kumalizika muda wa video ni mahitaji ya mzunguko wa maisha ya kueleza.
- Muda wa kushikilia muunganisho katika msimbo mwingine wa malipo ulikuwa kikwazo cha mwisho cha upitishaji. Shopify iliandika kwa siri mifumo yote miwili, ikalinganisha matokeo na kubadili hatua kwa hatua na mfumo wa kurejesha wa Redis kill-switch.
Nakala iliyotafsiriwa
Imetafsiriwa kutoka simulizi asili ya Kiingereza. Sauti na manukuu yanayopatikana yanadhibitiwa na YouTube.
Kwa nini uhifadhi uhamishwe hadi MySQL?
0:00 Malipo yanahitaji Redis kubaki haraka. Shopify ilihamisha uhifadhi wa orodha hadi MySQL kwa kutumia safu mlalo moja kwa kila kitengo katika kundi lililofungwa. Kwa nini uchague MySQL? Unawezaje kuruka kufuli kwa usalama? Hii ni The Daily Diff, chini ya kofia. Na kwa nini maswali ya haraka bado yalifikia kikomo? Shopify ni jukwaa la biashara kwa ajili ya kuuza mtandaoni na ana kwa ana. Redis ni hifadhidata ya kumbukumbu.
0:21 MySQL ni hifadhidata ya uhusiano, na Shopify tayari ilihifadhi leja yake ya orodha huko. Uhifadhi hushikilia hisa kwa muda mfupi wakati mnunuzi analipa.
Kwa nini maduka mawili yalikuwa hatari?
0:29 Mfumo wao wa Redis ulipunguza hesabu ya bidhaa. Kudai agizo lililolipwa kulimaanisha kusasisha leja ya MySQL na kusafisha Redis. Andiko hizo tofauti zingeweza kuacha hisa zikiuzwa mara mbili au hazipatikani wakati zinapaswa kuwa zinauzwa. Mfumo wa zamani pia ulikosa ufahamu wa eneo. Badiliko lazima lichague hisa kutoka mahali panapoweza kutekeleza agizo. Ghala lililo katika bara lisilo sahihi hufanya kuingiza data nzuri sana na ahadi mbaya ya utoaji. Majaribio ya awali ya MySQL yalitumiwa safu mlalo ya kiasi, hivyo malipo yanayoshindana yalipanga foleni kwenye
Kitengo kinachoweza kufungwa kinakuwa nini?
0:56 kufuli moja. Fikiria kamba ya velvet kuzunguka seli ya lahajedwali. Kuongeza wafanyikazi zaidi huongeza tu foleni. Shopify ilibadilisha kitu kinachoweza kufungwa. Kila kitengo kinachopatikana kinapata safu mlalo yake mwenyewe. Usomaji wa kufuli huruka vitengo vingine muamala unashikilia na kuchagua zingine zinazostahiki vitengo. Wafanyikazi tofauti wanaweza kupata safu mlalo tofauti, wakati hesabu ya moto inakaa mbali na njia yao.
Nini kinatokea kundi linapokuwa tupu?
1:15 Kundi hilo lina kikomo cha safu mlalo elfu moja kwa kila bidhaa na eneo. Kujaza kunatokana na leja. Ikiwa inakwisha, uhifadhi njia hujaza tena ndani ya mstari, na maombi yanayoshindana yakisubiri nyuma ya kufuli ya kujaza tena. Kundi tupu haimaanishi ghala tupu. Uhifadhi hufuta safu mlalo zilizochaguliwa za kundi, kisha huweka rekodi za uhifadhi katika muamala. Kuthibitisha huachia kufuli za hifadhidata.
1:35 Kurejesha hubatilisha mabadiliko. Uhifadhi huendelea baada ya usindikaji wa malipo kama hali iliyohifadhiwa. Malipo yenye mafanikio yanadai leja na huondoa uhifadhi atomiki. Kufuli za hifadhidata hazihitaji kamwe kulinda fomu ya malipo. Funguo yao msingi ya mchanganyiko huanza na duka, bidhaa, kundi, kisha kitambulisho cha kitengo. Kulinganisha utafutaji kulipunguza kufungwa kwa faharisi katika mfumo wao wa mfano. Pia wanatumia kusoma iliyokamilishwa ili kuepuka kufuli za pengo zilizozuia kundi
1:57 kujaza tena, na mpangilio thabiti wa jedwali ili kuzuia kusubiri kwa mzunguko. Mfano uliowekwa wazi unarekodi muda wa kumalizika. Malipo yaliyoachwa yanahitaji hisa kutolewa hatimaye, au gari la ununuzi linakuwa mmiliki wa nyumba. Chapisho la Shopify linaacha algorithm hiyo ya usafishaji bila kubainishwa, hivyo mchoro huu unaonyesha mahitaji ya mzunguko wa maisha. Huu hapa mtego.
SKIP LOCKED huacha nini?
2:14 Ruka zilizofungwa huondoa safu mlalo zilizofungwa, hivyo mwongozo unaita matokeo yake mtazamo usio thabiti. Haitoi hesabu kamili ya hisa wala zamu ya haki. Weka uamuzi wa upatikanaji na sheria za kujaza tena karibu nayo.
Kikomo halisi kilikuwa wapi?
2:26 Na kikomo hicho? Msimbo mwingine wa malipo ulikuwa ukishikilia miunganisho ya hifadhidata kwa muda mrefu sana. Shopify iliweka lebo kwa wapiga simu na kupima muda wa kushikilia muunganisho, kisha ikasafisha njia ya malipo na kurekebisha utendaji wa nyuzi kwa wakati mmoja. Maswali ya haraka bado yanaweza kupanga foleni nje ya swali.
Kwa nini nitaweka muundo huu?
2:38 Waliandika kwa siri mifumo yote miwili na Redis ikiwa mamlaka, ikalinganisha matokeo, kisha ikabadili hatua kwa hatua na swichi ya kuzima. Hukumu yangu ni iweke. Nitaweka mpaka wa muamala wa pamoja na utekelezaji huo unaoweza kubatilishwa, na njia nzima ya malipo ikifuatiliwa. Una swali kuhusu hili? Liweke kwenye maoni. Na huo ndio utofauti wa leo.
2:54 Mimi ni Niko kutoka Axrisi. Unganisha kwa uwajibikaji.
Vyanzo
- We replaced Redis with MySQL for inventory reservations—and it scaledShopify Engineering — Emilie Noel
- Simplified reservation SQL embedded in Shopify's articleShopify Engineering / CourtneySymons on GitHub Gist
- MySQL 8.0 — Locking ReadsOracle / MySQL Reference Manual
- MySQL 8.0 — Transaction Isolation LevelsOracle / MySQL Reference Manual
- What Is Shopify and How Does It Work?Shopify
- Redis quick startsRedis documentation
- What is MySQL?Oracle / MySQL Reference Manual



