Emuārs

Pāreja uz lielākām darbvidēm bez gaidīšanas ikvienam

Katrs Mythex projekts saņem savu darbvidi: nelielu mākoņa datoru, kurā aģents raksta kodu un darbojas jūsu lietotnes priekšskatījums. Jaunām darbvidēm bijām palielinājuši atmiņu no 1 GB uz 2 GB, bet vecākās palika 1 GB — pārbaudes dienā aptuveni ceturtdaļa no tām. Mūsu pirmais labojums pārvietoja projektu uz lielāku darbvidi, kad to nākamreiz atvēra. Pirmajā dienā produkcijā tas vienam cilvēkam lika gaidīt septiņas minūtes. Mēs uzlikām stingru laika limitu, un pēc tam pārvietošanu izņēmām no projekta atvēršanas pavisam.

Kāpēc vecās darbvides palika mazas

Mūsu smilškastes nodrošinātājs iestata darbvides izmēru, kad tā tiek izveidota, un to saglabā caur katru pauzi un atsākšanu. Veidnes — recepte, pēc kuras veido jaunas darbvides — mainīšana ietekmē tikai pēc izmaiņas izveidotās darbvides. Esošās neviens nepārveido.

Tas bija svarīgi. Viena no mazajām darbvidēm iztrūka atmiņas git push laikā, kamēr tās priekšskatījums startēja, un 11 minūtes neatbildēja. Tā dēļ neizdevās publicēšana.

Pirmais mēģinājums: pārvietot projektu pamodinot

Darbvides pauzējas, kad tās neviens neizmanto, un pamostas, kad projekts tiek atvērts. Pamošanās šķita īstais brīdis projekta pārvietošanai, jo neviens vēl tajā nestrādā.

Pārvietošana darbojās šādi:

  1. Pārbaudīt izmēru. Ja darbvide ir mazāka par 2 GB, pārvietot. Ja izmērs nav zināms, neko nedarīt.
  2. Netraucēt publicēšanu. Publicēšana nolasa darbvides failus, tāpēc, ja kāda darbojas, pārvietošanu izlaist.
  3. Iepakot projektu. Arhivēt visu projektā — ieskaitot tā git vēsturi, kas ir katrs projekta kontrolpunkts, un lietotnes pašas .env failu, kas pieder īpašniekam —, bet izlaist uzstādītās atkarības (node_modules), ko var atkal instalēt.
  4. Pārkopēt tieši. Straumēt arhīvu no vecās darbvides uz jaunu 2 GB darbvidi, lai tas nekad nebūtu jāietilpina mūsu pašu servera atmiņā.
  5. Salīdzināt pirms pārslēgšanas. Saskaitīt failus, nolasīt jaunāko kontrolpunktu un saskaitīt kontrolpunktus abās darbvidēs. Pārslēgt tikai tad, ja visi trīs sakrīt.
  6. Paturēt veco, ja kas neizdodas. Jebkura kļūda vai neatbilstība izmet jauno darbvidi un atver projektu vecajā, kā agrāk.

Viena salīdzināšanas detaļa bija svarīgāka, nekā šķiet. Pārbaude darbojas kā administratora konts, un git atsakās lasīt repozitoriju, kuru pieder cits lietotājs. Abās pusēs tas neizdrukāja neko — un „nekas” sakrita ar „nekas”, tāpēc pārbaude izturēja, nesalīdzinot nevienu vēsturi. Mēs norādījām git uzticēties direktorijam un pievienojām testu, lai tas nevarētu atkal parādīties.

Kas noiet greizi pirmajā dienā

Pirmajā dienā produkcijā projekta iepakošana sastapās ar piecu minūšu komandas taimautu — pamošanās laikā. Īpašnieks gaidīja septiņas minūtes, līdz darbvide atvērās. Un, tā kā pārvietošana bija neizdevusies, projekts palika mazs, tāpēc nākamā atvēršana būtu mēģinājusi vēlreiz un atkal licis gaidīt.

Migrācija, kas liek cilvēkam gaidīt, atverot savu projektu, ir slikts darījums. Viss iemesls, kāpēc to darījām pamošanās laikā, bija tas, ka neviens nepamanītu.

Otrais mēģinājums: stingrs budžets

Tajā pašā dienā mainījām četras lietas:

  • Viena minūte visai pārvietošanai. Katrs solis — izmēra pārbaude, iepakošana, jaunas darbvides izveide, kopēšana, atiepakošana, salīdzināšana — dala vienu 60 sekunžu budžetu. Kad tas beidzas, projekts atveras vecajā darbvidē.
  • Apturēt darbu, ne tikai gaidīšanu. Ja mēs atkāpjamies, bet arhivēšana joprojām darbojas darbvidē, kuru īpašnieks drīz lietos, tas nav pietiekami. Katra arhīva komanda tagad tiek nogalināta pašā darbvidē īsi pirms budžeta beigām. Ja jaunā darbvide ierodas pēc tam, kad esam atkāpušies, tā tiek izmesta.
  • Neliec īpašniekam gaidīt tīrīšanu. Pagaidu arhīva dzēšana tagad notiek fonā.
  • Neizmēģināt atkal katrā atvēršanā. Projekts, ko nevarēja pārvietot, tiek atstāts mierā 24 stundas, tāpēc kļūme maksā ne vairāk kā vienu kavēšanos dienā, nevis vienu katrā atvēršanā.

Trešais mēģinājums: izņemt no pamošanās

Tas padarīja sliktāko gadījumu par vienu minūti. Bet minūte joprojām ir minūte, un mēs sapratām, ka pārvietošanai nemaz nav jāatrodas uz kāda ceļa.

Neviena darbvide vairs netiek veidota ar 1 GB. Tāpēc tas nav pastāvīgs process; tas ir vienreizējs darbs ar fiksētu darbvidu sarakstu. Ja to veica pamošanās laikā, īsts cilvēks maksāja par katru lēno pārvietošanu, un vienīgais veids, kā uzzināt, ka darbvide nepārvietojas, bija tas, ka kāds tikko bija to gaidījis.

Tāpēc pārvietošanu izņēmām no pamošanās pavisam. Projekta atvēršana dara to pašu, ko darīja agrāk. Atlikušās mazās darbvides tiek apstrādātas kā uzraudzīta partija: nevienam nav jāgaida, un darbvide, kas nepārvietojas, parādās partijas pārskatā, kur mēs to varam aplūkot, nevis tās īpašnieka priekšā.

Ko no tā guvām

  • Izmēru mainīt ne vienmēr ir iespējams. Kad platforma fiksē izmēru izveidojot, noklusējuma paaugstināšana palīdz tikai jaunajām lietām. Plānojiet vecajām.
  • „Neviens to vēl neizmanto” joprojām nozīmē, ka kāds gaida. Darbs, kas tiek veikts ceļā uz produktu, ir darbs, ko cilvēks vēro.
  • Ieliec budžetu jebkam, kas atrodas lietotāja ceļā, un apturi darbu, kad budžets beidzas. Taimauts mūsu pusē, kamēr komanda turpina darboties citur, tikai pārvieto problēmu.
  • Vienreizēja migrācija pieder vienreizējam darbam. Paslēpt to ikdienas darbībās padara to lētāk rakstīt un dārgāk palaist.
  • Testējiet savas drošības pārbaudes. Salīdzināšana, kas neko nesalīdzina, izskatās tieši tāpat kā tāda, kas izturēja.

Ja veidojat uz Mythex, nav nekas, kas jādara: mērķis ir vienkārši mazāk darbvidu, kas beidzas atmiņa, un projekta atvēršana tikpat ātra kā agrāk. Kā darbvides pauzējas un pamostas, aprakstīts dokumentācijā sadaļā privāta darbvide. Cits stāsts par atmiņas izsīkumu: atmiņas noplūde progresa etiķetē.

Mythex · Pricing · Veidojiet jebko ar AI · Tīmekļa vietņu un lietotņu veidnes · Mythex salīdzinājumā · AI lietotņu veidošanas glosārijs · Bezmaksas rīki lietotņu veidošanai ar AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)