Kalimi në hapësira pune më të mëdha pa e bërë askënd të presë
Çdo projekt Mythex merr hapësirën e vet pune: një kompjuter i vogël në cloud ku agjenti shkruan kodin dhe ku ekzekutohet pamja paraprake e aplikacionit tënd. Ne kishim ngritur hapësirat e reja nga 1 GB memorie në 2 GB, por ato të vjetra kishin mbetur në 1 GB — në ditën kur kontrolluam, rreth një e katërta e tyre. Rregullimi ynë i parë zhvendoste një projekt në një hapësirë më të madhe kur hapej herës tjetër. Ditën e parë në prodhim, kjo i bëri një personi shtatë minuta pritje. Vendosëm një kufi të fortë kohor, pastaj e hoqëm zhvendosjen nga hapja e projektit fare.
Pse hapësirat e vjetra mbetën të vogla
Ofruesi ynë i sandbox-it cakton madhësinë e një hapësire kur krijohet, dhe e mban nëpër çdo pauzë dhe rifillim. Ndryshimi i shablloni — receta nga ku ndërtohen hapësirat e reja — prek vetëm hapësirat e krijuara pas ndryshimit. Asgjë nuk i ndryshon madhësinë e atyre që ekzistojnë.
Kjo kishte rëndësi. Një nga hapësirat e vogla mbaroi memorien gjatë një git push ndërsa pamja e saj po nisej, dhe ndaloi së përgjigjuri për 11 minuta. Një publikim dështoi për shkak të kësaj.
Përpjekja e parë: zhvendos projektin kur zgjohet
Hapësirat pauzohen kur askush nuk i përdor dhe zgjohen kur hapet projekti. Zgjimi dukej momenti i duhur për të zhvendosur një projekt, sepse askush nuk punon ende në të.
Zhvendosja funksiononte kështu:
- Kontrollo madhësinë. Nëse hapësira është më e vogël se 2 GB, zhvendose. Nëse madhësia është e panjohur, mos bëj asgjë.
- Mos prek një publikim. Një publikim lexon skedarët e hapësirës, kështu që nëse një publikim po ekzekutohet, kalo zhvendosjen.
- Paketo projektin. Arkivo çdo gjë në projekt — përfshirë historinë e tij git, që është çdo checkpoint që ka projekti, dhe skedarin
.envtë aplikacionit, që i përket pronarit — por lër jashtë dependencat e instaluara (node_modules), që mund të rinstalohen. - Kopjoje drejt e. Transmeto arkivin nga hapësira e vjetër në një hapësirë të re 2 GB, që të mos duhet kurrë të përshtatet në memorien e serverit tonë.
- Krahaso para se të ndërrosh. Numëro skedarët, lexo checkpoint-in e fundit dhe numëro checkpoint-et, në të dyja hapësirat. Ndërro vetëm nëse të tre përputhen.
- Mbaj hapësirën e vjetër në çdo dështim. Çdo gabim ose mospërputhje fshin hapësirën e re dhe e hap projektin në të vjetrën, si më parë.
Një detaj në krahasim kishte më shumë peshë sesa duket. Kontrolli ekzekutohej si llogaria e administratorit, dhe git refuzon të lexojë një depo që e zotëron një përdorues tjetër. Ai nuk printonte asgjë në të dyja anët — dhe "asgjë" përputhej me "asgjë", kështu që kontrolli kalonte pa krahasuar fare historinë. I thamë git-it ta besojë direktorinë, dhe shtuam një test që kjo të mos rikthehet.
Çfarë shkoi keq ditën e parë
Në ditën e parë në prodhim, paketimi i një projekti goditi një kufi komandë pesë-minutësh — brenda zgjimit. Pronari priti shtatë minuta që hapësira e tij të hapej. Dhe meqenëse zhvendosja dështoi, projekti mbeti i vogël, kështu që hapja e radhës do të provonte përsëri dhe do ta bënte të presë përsëri.
Një migrim që e bën dikë të presë kur hap projektin e vet nuk është një shkëmbim i mirë. E gjithë ideja e ta bësh gjatë zgjimit ishte që askush të mos e vinte re.
Përpjekja e dytë: një buxhet i fortë
Në të njëjtën ditë ndryshuam katër gjëra:
- Një minutë për të gjithë zhvendosjen. Çdo hap — kontrolli i madhësisë, paketimi, krijimi i hapësirës së re, kopjimi, zhbalimi, krahasimi — ndan një buxhet të vetëm 60-sekondësh. Kur mbaron, projekti hapet në hapësirën e vjetër.
- Ndalo punën, jo vetëm pritjen. Të hiqesh nga ana jonë nuk mjafton nëse arkivimi vazhdon brenda hapësirës që pronari është gati ta përdorë. Çdo komandë arkivimi tani vritet brenda hapësirës pak përpara se të mbarojë buxheti. Nëse hapësira e re arrin pasi kemi hequr dorë, hidhet.
- Mos e bëj pronarin të presë për pastrimin. Fshirja e arkivit të përkohshëm tani bëhet në sfond.
- Mos provo përsëri në çdo hapje. Një projekt që nuk u zhvendos lihet vetëm për 24 orë, kështu që një dështim kushton të shumtën një vonesë në ditë, jo një për çdo hapje.
Përpjekja e tretë: hiqe nga zgjimi
Kjo e bëri rastin më të keq një minutë. Por një minutë është prapë një minutë, dhe kuptuam se zhvendosja nuk kishte nevojë të ishte fare në rrugën e askujt.
Asnjë hapësirë nuk krijohet më me 1 GB. Pra kjo nuk është më një proces i vazhdueshëm; është një punë njëherëshe me një listë të fiksuar hapësirash. Ta bëje brenda zgjimit do të thoshte që një person i vërtetë paguante për çdo zhvendosje të ngadaltë, dhe e vetmja mënyrë për të mësuar që një hapësirë nuk do të zhvendosej ishte që dikush të kishte pritur pikërisht për të.
Kështu e hoqëm zhvendosjen nga zgjimi plotësisht. Hapja e një projekti bën atë që bënte më parë. Hapësirat e vogla që kanë mbetur trajtohen si një grup i mbikqyrur: askush nuk pret për të, dhe një hapësirë që nuk zhvendoset shfaqet në raportin e grupit, ku mund ta shqyrtojmë, në vend që të shfaqet para personit që e zotëron.
Çfarë morëm nga kjo
- Ndryshimi i madhësisë nuk është gjithmonë i mundur. Kur një platformë e fikson madhësinë në krijim, rritja e parazgjedhjes ndihmon vetëm gjërat e reja. Planifiko për ato të vjetrat.
- "Askush nuk e përdor ende" do të thotë prapë që dikush po pret. Puna e bërë në rrugën drejt një produkti është punë që një person e shikon.
- Vendos buxhet në çdo gjë që është në rrugën e përdoruesit, dhe ndalo punën kur mbaron buxheti. Të skadosh nga ana jote ndërkohë që një komandë vazhdon diku tjetër vetëm e zhvendos problemin.
- Një migrim njëherëshe i takon një pune njëherëshe. Ta fshehësh brenda veprimeve të përditshme e bën më të lirë për t'u shkruar, dhe më të shtrenjtë për t'u ekzekutuar.
- Testo kontrollet e sigurisë. Një krahasim që nuk krahason asgjë duket saktësisht si një që ka kaluar.
Nëse ndërton me Mythex, nuk ka asgjë për të bërë: qëllimi është thjesht më pak hapësira që mbarojnë memorien, me hapjen e një projekti po aq të shpejtë sa më parë. Si pauzohen dhe zgjohen hapësirat mbulohet në dokumentacion te hapësira private e punës. Për një tjetër histori me memorien që mbaron, shiko përplasjen nga mbarimi i memories e fshehur në një etiketë progresi.