Kuhamia Nafasi Kubwa za Kazi Bila Kumfanya Mtu Yeyote Asubiri
Kila mradi wa Mythex unapata nafasi yake ya kazi: kompyuta ndogo ya wingu ambapo agent huandika msimbo na onyesho la awali la app yako linaendeshwa. Tulikuwa tumeongeza nafasi mpya kutoka kumbukumbu ya 1 GB hadi 2 GB, lakini za zamani zilibaki 1 GB — siku tulipoangalia, takriban robo yake. Marekebisho yetu ya kwanza yalihamisha mradi hadi nafasi kubwa zaidi mradi ulipofunguliwa tena. Siku yake ya kwanza kwenye production, hilo lilimfanya mtu mmoja asubiri dakika saba. Tuliweka kikomo kigumu cha muda, kisha tukaondoa uhamishaji kabisa kutoka kwenye kufungua mradi.
Kwa nini nafasi za zamani zilibaki ndogo
Mtoa huduma wetu wa sandbox huweka ukubwa wa nafasi ya kazi wakati inaundwa, na huuhifadhi kupitia kila kulala na kuamka. Kubadilisha template — mapishi ambayo nafasi mpya hujengwa nayo — kunaathiri nafasi zilizoundwa baada ya mabadiliko tu. Hakuna kinachobadilisha ukubwa wa zile zilizopo.
Hilo lilikuwa muhimu. Mojawapo ya nafasi ndogo ilimaliza kumbukumbu wakati wa git push ilipokuwa onyesho lake la awali linaanza, na ikaacha kujibu kwa dakika 11. Publish ilishindwa kwa sababu yake.
Jaribio la kwanza: hamisha mradi unapoamka
Nafasi za kazi hulala pale hakuna anayezitumia na huamka mradi unapofunguliwa. Kuamka kulionekana kuwa wakati sahihi wa kuhamisha mradi, kwa sababu hakuna anayefanya kazi ndani yake bado.
Uhamishaji ulifanya kazi hivi:
- Angalia ukubwa. Ikiwa nafasi ni ndogo kuliko 2 GB, ihamishe. Ikiwa ukubwa wake haujulikani, usifanye chochote.
- Usivuruge publish. Publish husoma faili za nafasi ya kazi, kwa hiyo ikiwa moja inaendelea, ruka uhamishaji.
- Funga mradi. Pakia kila kitu cha mradi — ikiwa ni pamoja na historia yake ya git, ambayo ni kila checkpoint ambayo mradi unayo, na faili
.envya app, ambalo ni la mmiliki — lakini acha dependencies zilizosakinishwa (node_modules), ambazo zinaweza kusakinishwa tena. - Nakili moja kwa moja. Tiririsha archive kutoka nafasi ya zamani hadi nafasi mpya ya 2 GB, ili isilazimike kutoshea kwenye kumbukumbu ya server yetu wenyewe.
- Linganisha kabla ya kubadili. Hesabu faili, soma checkpoint ya mwisho, na hesabu checkpoints, kwenye nafasi zote mbili. Badilisha tu ikiwa vyote vinalingana.
- Weka ile ya zamani kwa kosa lolote. Hitilafu yoyote au kutolingana kwoyote kunafuta nafasi mpya na kufungua mradi kwenye ile ya zamani, kama awali.
Maelezo moja katika ulinganisho ulikuwa muhimu zaidi kuliko unavyoonekana. Ukaguzi unaendeshwa kama akaunti ya msimamizi, na git inakataa kusoma repository inayomilikiwa na mtumiaji mwingine. Ilichapisha kitu kwenye pande zote mbili — yaani hakuna kitu — na "hakuna kitu" kilifanana na "hakuna kitu", kwa hiyo ukaguzi ulipita bila kulinganisha historia yoyote. Tulimwambia git kuamini saraka hiyo, na tukaongeza jaribio ili hilo lisirudi.
Kilichoenda vibaya siku ya kwanza
Siku ya kwanza kwenye production, kufunga mradi mmoja kulifikia kikomo cha amri cha dakika tano — ndani ya kuamka. Mmiliki alisubiri dakika saba kwa nafasi yake ya kazi kufunguka. Na kwa sababu uhamishaji ulishindwa, mradi ulibaki mdogo, kwa hiyo ufunguzi ujao ungejaribu tena na kuwafanya wasubiri tena.
Uhamishaji unaomfanya mtu asubiri anapofungua mradi wake mwenyewe ni biashara mbaya. Kusudi zima la kuufanya wakati wa kuamka lilikuwa kwamba hakuna mtu angeona.
Jaribio la pili: bajeti ngumu
Siku hiyo hiyo tulibadilisha mambo manne:
- Dakika moja kwa uhamishaji mzima. Kila hatua — kuangalia ukubwa, kufunga, kuunda nafasi mpya, kunakili, kufungua, kulinganisha — inashiriki bajeti moja ya sekunde 60. Ikiisha, mradi unafunguka kwenye nafasi ya zamani.
- Simamisha kazi, si kusubiri tu. Kuacha kusubiri upande wetu hakutoshi ikiwa archiving bado inaendelea ndani ya nafasi ambayo mmiliki yuko karibu kuitumia. Kila amri ya archive sasa inauawa ndani ya nafasi yenyewe muda mfupi kabla bajeti haijaisha. Nafasi mpya ikifika baada ya sisi kuacha, inatupwa.
- Usimfanye mmiliki asubiri usafishaji. Kufuta archive ya muda sasa kunafanyika chinichini.
- Usijaribu tena kila ufunguzi. Mradi ambao haukuweza kuhamishwa unaachwa peke yake kwa saa 24, kwa hiyo kushindwa kunagharimu kuchelewa kwa mara moja kwa siku, si kwa kila ufunguzi.
Jaribio la tatu: ondoa uhamishaji kwenye kuamka
Hilo lilifanya hali mbaya zaidi kuwa dakika moja. Lakini dakika bado ni dakika, na tulitambua kwamba uhamishaji haukuhitaji kuwa njiani mwa mtu yeyote.
Hakuna nafasi ya kazi inayoundwa 1 GB tena. Kwa hiyo hii si mchakato unaoendelea; ni kazi ya mara moja yenye orodha isiyobadilika ya nafasi za kazi. Kuifanya ndani ya kuamka kulimaanisha mtu halisi analipia kila uhamishaji wa polepole, na njia pekee ya kujua nafasi fulani haitahamishika ilikuwa mtu kusubiri hapo hapo.
Kwa hiyo tuliondoa uhamishaji kwenye kuamka kabisa. Kufungua mradi kunafanya kile kilichofanya awali. Nafasi ndogo zilizobaki zinashughulikiwa kama kundi lililosimamiwa: hakuna anayesubiri, na nafasi isiyohamishika inaonekana kwenye ripoti ya kundi, ambapo tunaweza kuiangalia, badala ya mbele ya mmiliki wake.
Tulichojifunza
- Kubadilisha ukubwa si kila wakati kunawezekana. Jukwaa linapoweka ukubwa wakati wa kuunda, kuongeza chaguo-msingi kunasaidia vitu vipya tu. Panga kwa ajili ya vya zamani.
- "Hakuna anayetumia bado" bado kunamaanisha kuna mtu anasubiri. Kazi inayofanyika njiani kuingia kwenye bidhaa ni kazi ambayo mtu anaiangalia.
- Weka bajeti kwenye chochote kilicho njiani mwa mtumiaji, na simamisha kazi bajeti inapoisha. Kuzidisha muda upande wetu huku amri ikiendelea kwingine kunahamisha tatizo tu.
- Uhamishaji wa mara moja unafaa kuwa kazi ya mara moja. Kuuficha ndani ya vitendo vya kila siku kunaufanya rahisi kuandika na ghali zaidi kuendesha.
- Jaribu ukaguzi wako wa usalama. Ulinganisho usiolinganisha chochote unaonekana kama ule uliopita kweli.
Ikiwa unajenga kwenye Mythex, hakuna cha kufanya: lengo ni nafasi chache za kazi zinazokosa kumbukumbu, na kufungua mradi kuwe haraka kama awali. Jinsi nafasi za kazi zinavyolala na kuamka vinaelezwa kwenye docs chini ya private workspace. Kwa hadithi nyingine ya kumbukumbu kuisha, angalia ajali ya kumbukumbu iliyojificha kwenye lebo ya maendeleo.