Кідіртпей, үлкенірек жұмыс орындарына көшу
Әр Mythex жобасының өз жұмыс орны бар: агент код жазатын және қолданбаңыздың алдын ала қарауы іске қосылатын шағын бұлттық компьютер. Жаңа жұмыс орындарын 1 ГБ жадтан 2 ГБ-қа көтергенбіз, бірақ ескілері 1 ГБ-та қалған — тексерген күні олардың шамамен төрттен бірі. Біздің алғашқы түзетуіміз жобаны келесі ашқанда үлкенірек жұмыс орнына көшірді. Өндірістегі алғашқы күнінде ол бір адамды жеті минут күттірді. Біз оған қатаң уақыт шегін қойдық, содан кейін көшіруді жобаны ашудан мүлде алып тастадық.
Ескі жұмыс орындары неге кішкентай қалды
Sandbox провайдеріміз жұмыс орнының өлшемін оны жасағанда орнатады және кідіріс пен қайта жандануда да сақтайды. Жұмыс орнының қалыбын — жаңа жұмыс орындары жасалатын рецептті — өзгерту тек осы өзгерістен кейін жасалған жұмыс орындарына әсер етеді. Бар жұмыс орындарын ешнәрсе өлшемін өзгертпейді.
Бұл маңызды болды. Кішкентай жұмыс орындарының бірі алдын ала қарау іске қосылып жатқанда git push кезінде жадтан шықты да, 11 минут бойы жауап бермеді. Сол себепті жариялау сәтсіз аяқталды.
Бірінші әрекет: жоба оянғанда көшіру
Жұмыс орындары ешкім пайдаланбаған кезде кідіреді, ал жоба ашылғанда оянады. Оянған сәт жобаны көшіру үшін дұрыс сияқты көрінді, себебі оның бойында ешкім жұмыс істеп тұрған жоқ.
Көшіру мынадай жұмыс істеді:
- Өлшемін тексеру. Жұмыс орны 2 ГБ-тан кіші болса, көшіру. Өлшемі белгісіз болса, ештеңе істемеу.
- Жариялауға кедергі келтірмеу. Жариялау жұмыс орнының файлдарын оқиды, сондықтан ол жүріп жатса, көшіруді өткізіп жіберу.
- Жобаны архивтеу. Жобаның барлық нәрсесін архивтеу — соның ішінде git тарихын, яғни жобаның әр чекпойнтын, және иесіне тиесілі қолданбаның
.envфайлын — бірақ орнатылған тәуелділіктерді (node_modules) қалдыру, оларды қайта орнатуға болады. - Тікелей көшіру. Ескі жұмыс орнынан архивті жаңа 2 ГБ жұмыс орнына ағызу, сондықтан ол біздің сервердің жадына ешқашан сыймайды.
- Ауыстырар алдында салыстыру. Екі жұмыс орнында да файлдарды санау, соңғы чекпойнтты оқу және чекпойнттарды санау. Үшеуі де сәйкес келгенде ғана ауыстыру.
- Кез келген сәтсіздікте ескісін сақтау. Кез келген қате немесе сәйкессіздік жаңа жұмыс орнын жояды және жобаны бұрынғыдай ескі жұмыс орнында ашады.
Салыстырудағы бір мән күткеннен маңыздырақ болды. Тексеру администратор аккаунтында жұмыс істейді, ал git басқа пайдаланушыға тиесілі репозиторийді оқуға рұқсат бермейді. Екі жақта да ештеңе шығармады — және "ештеңе" "ештеңеге" сәйкес келді, сондықтан тексеру ешқандай тарихты салыстырмай-ақ өтіп кетті. Біз git-ке каталогқа сенуді айттық және оның қайта оралмауы үшін тест қостық.
Бірінші күнде не болды
Өндірісте алғашқы күнінде бір жобаны орау бес минуттық команда күту уақытына тап болды — ояну ішінде. Иесі жұмыс орны ашылғанға дейін жеті минут күтті. Ал көшіру сәтсіз аяқталғандықтан жоба кішкентай қалды, сондықтан келесі ашқанда ол тағы әрекет етіп, оларды қайтадан күттірер еді.
Иесі өз жобасын ашқанда күттіретін көшіру — жаман айырбас. Оны ояну кезінде жасаудың бүкіл мәні — ешкім сезбеуі еді.
Екінші әрекет: қатаң бюджет
Сол күні біз төрт нәрсені өзгерттік:
- Бүкіл көшіру үшін бір минут. Әр қадам — өлшемді тексеру, архивтеу, жаңа жұмыс орнын жасау, көшіру, шешу, салыстыру — бір 60 секундтық бюджетті бөліседі. Ол таусылғанда жоба ескі жұмыс орнында ашылады.
- Тек күтуді емес, жұмысты тоқтату. Біздің тарапта күтуді тоқтату жеткіліксіз, егер архивтеу иеленушінің қолданатын жұмыс орнында әлі жүріп жатса. Әр архив командасы бюджет аяқталғанға жақын сәтте жұмыс орнының ішінде өлтіріледі. Егер жаңа жұмыс орны біз берілуден бас тартқаннан кейін келсе, ол тасталады.
- Иесін тазалауды күттірмеу. Уақытша архивді жою енді фонда жасалады.
- Әр ашылғанда қайта әрекет етпеу. Көшіре алмаған жоба 24 сағат бойы тиісті жері қалдырылады, сондықтан бір сәтсіздік күніне ең көбі бір кідіріс береді, ашылған сайын емес.
Үшінші әрекет: оянудан алып тастау
Бұл ең нашар жағдайды бір минутқа дейін түсірді. Бірақ бір минут — бәрібір бір минут, және біз көшіруді ешкімнің жолында болуы қажет емес екенін түсіндік.
Қазір 1 ГБ-та ешқандай жұмыс орны жасалмайды. Демек, бұл үздіксіз процесс емес, тізімі бекітілген бір реттік тапсырма. Оны ояну ішінде жасау — әр баяу көшіруді нақты адам төлеуі дегенді білдірді, ал жұмыс орны көшірілмейтінін білудің жалғыз жолы — біреу оны күтіп тұрғанда болды.
Сондықтан көшіруді оянудан толық алып тастадық. Жобаны ашу бұрынғыдай жұмыс істейді. Қалған кішкентай жұмыс орындары бақыланатын топ ретінде өңделеді: ешкім күтпейді, ал көшірілмейтін жұмыс орны топтың есебінде көрінеді, оны иесінің алдында емес, бізде қарауға болады.
Осыдан не үйрендік
- Өлшемді түзету әрқашан мүмкін емес. Платформа өлшемді жасау кезінде бекіткенде, әдепкіні көтеру тек жаңа нәрселерге көмектеседі. Ескілерге жоспар жаса.
- "Ешкім әлі пайдаланбайды" дегенмен адам күтіп тұр дегенді білдіреді. Өнімге кірер жолдағы жұмыс — адам бақылайтын жұмыс.
- Пайдаланушының жолындағы кез келген нәрсеге бюджет қой, және бюджет таусылғанда жұмысты тоқтат. Өз тарапыңда уақытты асыру, ал команда басқа жерде жұмыс істей берсе, мәселені тек басқа жерге жылжытасың.
- Бір реттік көшіру бір реттік тапсырмаға тиесілі. Оны күнделікті әрекеттердің ішіне жасыру жазуды арзандатады, бірақ іске қосуды қымбат етеді.
- Қауіпсіздік тексерулерін сына. Ештеңені салыстырмайтын салыстыру дәл өткен салыстыруға ұқсайды.
Егер Mythex-те құрастырсаңыз, ештеңе істеудің қажеті жоқ: мақсат — жадының таусылуынан тоқтайтын жұмыс орындарын азайту, ал жобаны ашу бұрынғыдай жылдам қалуы. Жұмыс орындарының кідіруі мен оянуы туралы жеке жұмыс орны құжаттарында бар. Басқа жадтың таусылу оқиғасы үшін прогресс белгісінің ішінде жасырынған жадтың таусылу құлауы мақаласын қараңыз.