Блог

Преместување на поголеми работни простори без да чека никој

Секој Mythex проект добива свој работен простор: мал облак-компјутер каде агентот го пишува кодот и каде работи прегледот на вашата апликација. Новите работни простори ги подигнавме од 1 GB меморија на 2 GB, но постарите останаа на 1 GB — на денот кога проверивме, околу четвртина од нив. Нашата прва поправка преместуваше проект во поголем работен простор кога ќе се отвореше следниот пат. На првиот ден во продукција, тоа натера едно лице да чека седум минути. Поставивме строга временска граница, а потоа го извадивме преместувањето од отворањето на проектот воопшто.

Зошто стариот работен простор остана мал

Нашиот давател на sandbox ја поставува големината на работниот простор при неговото создавање и ја задржува низ секоја пауза и продолжување. Промената на шаблонот — рецептот од кој се градат новите работни простори — важи само за работните простори создадени по промената. Ништо не ги преоформува постојните.

Ова беше важно. Еден од малите работни простори остана без меморија за време на git push додека се стартуваше неговиот преглед, и не одговараше 11 минути. Објавувањето падна поради тоа.

Прв обид: преместување кога ќе се разбуди

Работните простори се паузираат кога никој не ги користи и се будат кога ќе се отвори проектот. Будењето изгледаше како вистинскиот момент за преместување, бидејќи никој уште не работи во него.

Преместувањето функционираше вака:

  1. Провери ја големината. Ако работниот простор е помал од 2 GB, премести го. Ако неговата големина не е позната, не прави ништо.
  2. Не го прекинувај објавувањето. Објавувањето ги чита датотеките на работниот простор, па ако е во тек, прескокни го преместувањето.
  3. Спакувај го проектот. Архивирај сè во проектот — вклучително и неговата git историја, односно секој чекпоинт што проектот го има, и .env датотеката на апликацијата, која му припаѓа на сопственикот — но остави ги надвор инсталираните зависности (node_modules), кои може повторно да се инсталираат.
  4. Пренеси го директно. Префрли ја архивата од стариот работен простор во нов од 2 GB, така што никогаш не мора да стане во меморијата на нашиот сервер.
  5. Спореди пред префрлувањето. Преброј ги датотеките, прочитај го последниот чекпоинт и преброј ги чекпоинтите, во двете работни простори. Префрлувај само ако сите три се совпаѓаат.
  6. Задржи го стариот при секоја грешка. Која било грешка или несовпаѓање го фрла новиот работен простор и го отвора проектот во стариот, како и порано.

Еден детал во споредбата беше поважен отколку што изгледа. Проверката работи како администраторска сметка, а git одбива да чита репозиториум во сопственост на друг корисник. Таа не печатеше ништо од двете страни — и „ништо“ се совпадна со „ништо“, па проверката помина без да спореди никаква историја. Му рековме на git да му верува на директориумот и додадовме тест за да не се врати ова.

Што тргна наопаку првиот ден

На првиот ден во продукција, пакувањето на еден проект удри во граница за команда од пет минути — во рамките на будењето. Сопственикот чекаше седум минути неговиот работен простор да се отвори. И бидејќи преместувањето не успеа, проектот остана мал, па следното отворање би се обидело повторно и би го натерало да чека пак.

Миграција што му го прави чекањето при отворање на сопствениот проект е лоша размена. Целата идеја на тоа да се направи при будење беше дека никој нема да забележи.

Втор обид: строг буџет

Истиот ден променивме четири работи:

  • Една минута за целото преместување. Секој чекор — проверка на големината, пакување, создавање на новиот работен простор, копирање, распакување, споредба — ја дели една буџет од 60 секунди. Кога ќе истече, проектот се отвора во стариот работен простор.
  • Запри ја работата, не само чекањето. Откажувањето од наша страна не е доволно ако архивирањето сè уште работи во работниот простор што сопственикот ќе го користи. Секоја команда за архивирање сега се прекинува внатре во самиот работен простор кратко пред да истече буџетот. Ако новиот работен простор стигне откако ќе се откажеме, се фрла.
  • Не го правај сопственикот да чека чистење. Бришењето на привремената архива сега се случува во позадина.
  • Не пробувај повторно при секое отворање. Проект што не можело да се премести се остава на мира 24 часа, така што неуспехот чини највише едно одложување на ден, а не по едно при секое отворање.

Трет обид: извади го од будењето

Тоа ја направи најлошата можна ситуација една минута. Но минута е сè уште минута, и сфативме дека преместувањето воопшто не мора да биде на ничиј пат.

Ниеден работен простор повеќе не се создава на 1 GB. Значи ова не е тековен процес; тоа е еднократна задача со фиксна листа на работни простори. Кога беше вграден во будењето, секое бавно преместување го плаќаше вистинско лице, а единствениот начин да дознаеме дека некој работен простор нема да се премести беше кога некој баш чекал на него.

Затоа го отстранивме преместувањето од будењето целосно. Отворањето на проект работи како и порано. Преостанатите мали работни простори се третираат како надгледувана серија: никој не чека на неа, а работен простор што нема да се премести се појавува во извештајот на серијата, каде можеме да го погледнеме, наместо пред лицето на сопственикот.

Што извлековме

  • Преоформувањето не е секогаш можно. Кога платформата ја фиксира големината при создавањето, зголемувањето на стандардната вредност помага само на новите работи. Планирајте за старите.
  • „Никој не го користи уште“ сепак значи дека некој чека. Работата направена на патот до производот е работа што ја гледа човек.
  • Ставете буџет на секое нешто на патот на корисникот и запрете ја работата кога ќе истече. Истекувањето на наша страна додека командата продолжува некаде другде само го префрла проблемот.
  • Еднократната миграција припаѓа во еднократна задача. Скривањето во секојдневните дејства ја прави полесна за напишување и поскапа за извршување.
  • Тестирајте ги безбедносните проверки. Споредба што ништо не споредува изгледа точно како онаа што поминала.

Ако градите на Mythex, нема ништо да правите: целта е едноставно помалку работни простори да остануваат без меморија, а отворањето на проектот да биде исто толку брзо како порано. Како работните простори се паузираат и будат е опфатено во документацијата за приватниот работен простор. За друга приказна за недостиг на меморија, видете истекувањето на меморија скриено во ознака за напредок.

Mythex · Pricing · Градете што било со AI · Шаблони за веб-страници и апликации · Mythex во споредба · Речник за градење апликации со AI · Бесплатни алатки за градење апликации со 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ų Latviešu മലയാളം Монгол मराठी 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 简体中文 繁體中文(香港) 繁體中文(台灣)