Անցում ավելի մեծ աշխատանքային տարածքների՝ առանց որևէ մեկին սպասեցնելու
Յուրաքանչյուր Mythex նախագիծ ունի իր աշխատանքային տարածքը. փոքր cloud համակարգիչ, որտեղ agent-ը գրում է կոդ, և որտեղ աշխատում է քո հավելվածի նախադիտումը։ Մենք նոր տարածքները բարձրացրել էինք 1 ԳԲ հիշողությունից 2 ԳԲ, բայց հները մնում էին 1 ԳԲ. այն օրը, երբ ստուգեցինք, դրանց մոտ քառորդը։ Մեր առաջին շտկումը նախագիծը տեղափոխում էր ավելի մեծ տարածք դրա հաջորդ բացման ժամանակ։ Արտադրության առաջին օրը դա մի մարդու սպասեցրեց յոթ րոպե։ Մենք դրեցինք կոշտ ժամանակային սահման, ապա ամբողջությամբ հանեցինք տեղափոխությունը նախագիծ բացելու գործողությունից։
Ինչու հին տարածքները մնում էին փոքր
Մեր sandbox մատակարարը տարածքի չափը սահմանում է այն ստեղծելիս և պահում է այն յուրաքանչյուր դադարի և վերսկսման ընթացքում։ Ձևանմուշի փոփոխությունը՝ բաղադրատոմսը, որից կառուցվում են նոր տարածքները, ազդում է միայն փոփոխությունից հետո ստեղծված տարածքների վրա։ Գոյություն ունեցողները ոչինչ չի վերաչափում։
Դա էական էր. փոքր տարածքներից մեկը հիշողությունը սպառեց git push-ի ընթացքում, երբ նրա նախադիտումը գործարկվում էր, և 11 րոպե չէր պատասխանում։ Դրա պատճառով հրապարակումը ձախողվեց։
Առաջին փորձ. տեղափոխել նախագիծը, երբ այն արթնանում է
Աշխատանքային տարածքները դադարում են, երբ ոչ ոք չի օգտագործում, և արթնանում են, երբ նախագիծը բացվում է։ Արթնացումը թվաց ճիշտ պահը նախագիծը տեղափոխելու համար, քանի որ դրանում դեռ ոչ ոք չի աշխատում։
Տեղափոխությունն աշխատում էր այսպես.
- Ստուգիր չափը։ Եթե տարածքը 2 ԳԲ-ից փոքր է, տեղափոխիր այն։ Եթե չափը անհայտ է, ոչինչ մի արա։
- Մի խանգարիր հրապարակմանը։ Հրապարակումը կարդում է տարածքի ֆայլերը, ուստի եթե այն աշխատում է, բաց թող տեղափոխությունը։
- Փաթեթավորիր նախագիծը։ Արխիվացրու նախագծի ամեն ինչ՝ ներառյալ նրա git պատմությունը, որը նախագծի յուրաքանչյուր checkpoint-ն է, և հավելվածի սեփական
.envֆայլը, որը պատկանում է սեփականատիրոջը, բայց բաց թող տեղադրված կախվածությունները (node_modules), որոնք կարելի է նորից տեղադրել։ - Պատճենիր ուղղակիորեն։ Արխիվը հոսքով տեղափոխիր հին տարածքից նոր 2 ԳԲ տարածք, որպեսզի այն երբեք չտեղավորվի մեր սեփական սերվերի հիշողության մեջ։
- Համեմատիր նախքան անջատելը։ Հաշվիր ֆայլերը, կարդա վերջին checkpoint-ը և հաշվիր checkpoint-ները երկու տարածքում։ Անջատիր միայն այն դեպքում, եթե բոլոր երեքը համընկնում են։
- Պահիր հինը ցանկացած ձախողման դեպքում։ Ցանկացած սխալ կամ անհամընկնություն ջնջում է նոր տարածքը և բացում նախագիծը հին տարածքում, ինչպես առաջ։
Համեմատության մեջ մի մանրամասն ավելի էական էր, քան թվում է. ստուգումը աշխատում է որպես ադմինիստրատորի հաշիվ, իսկ git-ը հրաժարվում է կարդալ այն repository-ն, որը պատկանում է այլ օգտատիրոջ։ Երկու կողմից էլ ոչինչ չէր տպվում, և «ոչինչ»-ը համընկավ «ոչինչի» հետ, ուստի ստուգումը անցավ՝ առանց որևէ պատմություն համեմատելու։ Մենք git-ին ասացինք վստահել դիրեկտորիային և ավելացրինք թեստ, որ դա նորից չսահի։
Ինչ սխալ գնաց առաջին օրը
Արտադրության առաջին օրը մի նախագծի փաթեթավորումը հասավ հինգ րոպեանոց հրամանի ժամանակի սահմանին՝ արթնացման ներսում։ Սեփականատերը յոթ րոպե սպասեց, մինչև իր աշխատանքային տարածքը բացվեց։ Եվ քանի որ տեղափոխությունը ձախողվել էր, նախագիծը դեռ փոքր էր, ուստի հաջորդ բացումը նորից կփորձեր և նորից կստիպեր նրանց սպասել։
Միգրացիան, որը ստիպում է մարդուն սպասել իր սեփական նախագիծը բացելիս, վատ առևտուր է։ Ամբողջ գաղափարը արթնացման ժամանակ այն անելու մեջ այն էր, որ ոչ ոք չնկատի։
Երկրորդ փորձ. կոշտ բյուջե
Նույն օրը չորս բան փոխեցինք.
- Մեկ րոպե ամբողջ տեղափոխության համար։ Յուրաքանչյուր քայլ՝ չափի ստուգում, փաթեթավորում, նոր տարածքի ստեղծում, պատճենում, բացում, համեմատում, կիսում է մեկ 60-վայրկյանանոց բյուջե։ Երբ այն սպառվում է, նախագիծը բացվում է հին տարածքում։
- Կանգնեցրու աշխատանքը, ոչ միայն սպասելը։ Մեր կողմից հրաժարվելը բավարար չէ, եթե արխիվացումը դեռ աշխատում է այն տարածքի ներսում, որը սեփականատերը պատրաստվում է օգտագործել։ Յուրաքանչյուր արխիվի հրաման այժմ սպանվում է տարածքի ներսում՝ բյուջեի ավարտից քիչ առաջ։ Եթե նոր տարածքը հասնում է այն բանից հետո, երբ մենք հրաժարվել ենք, այն ջնջվում է։
- Մի ստիպիր սեփականատիրոջը սպասել մաքրման։ Ժամանակավոր արխիվի ջնջումն այժմ տեղի է ունենում ֆոնում։
- Մի փորձիր նորից յուրաքանչյուր բացման ժամանակ։ Նախագիծ, որը չի կարող տեղափոխվել, 24 ժամ թողնվում է անփոփոխ, ուստի ձախողումը արժե ամենաշատը մեկ հապաղում օրական, ոչ թե մեկը յուրաքանչյուր բացման համար։
Երրորդ փորձ. հանել այն արթնացումից
Այդ ամենավատ դեպքը մեկ րոպե դարձրեց։ Բայց մեկ րոպեն դեռ րոպե է, և մենք գիտակցեցինք, որ տեղափոխությունը ընդհանրապես պետք չէր լինել որևէ մեկի ճանապարհին։
Այսուհետ 1 ԳԲ տարածք այլևս չի ստեղծվում։ Ուստի սա շարունակական գործընթաց չէ. սա մեկանգամյա աշխատանք է ֆիքսված տարածքների ցանկով։ Արթնացման ներսում այն անելը նշանակում էր, որ իրական մարդն վճարում էր յուրաքանչյուր դանդաղ տեղափոխության համար, և միակ ձևը, որով կիմանայինք, որ տարածքը չի տեղափոխվում, այն էր, որ ինչ-որ մեկը հենց նոր սպասել էր դրան։
Եվ այսպես, մենք տեղափոխությունը հանեցինք արթնացումից ամբողջությամբ։ Նախագիծ բացելը անում է այն, ինչ անում էր առաջ։ Մնացած փոքր տարածքները մշակվում են որպես վերահսկվող խմբաքանակ. ոչ ոք դրա համար չի սպասում, և տարածքը, որը չի տեղափոխվում, հայտնվում է խմբաքանակի հաշվետվության մեջ, որտեղ մենք կարող ենք նայել դրան, այլ ոչ թե սեփականատիրոջ աչքի առաջ։
Ինչ ենք սա սովորել
- Չափը միշտ հնարավոր չէ փոխել։ Երբ հարթակը չափը ֆիքսում է ստեղծման պահին, լռելյայն արժեքի բարձրացումը օգնում է միայն նորերին. մտածիր հներին նույնպես։
- «Դեռ ոչ ոք չի օգտագործում» դեռ նշանակում է, որ մեկը սպասում է։ Աշխատանքը, որը կատարվում է արտադրանքի մեջ մտնելու ճանապարհին, այն աշխատանքն է, որ մարդը դիտում է։
- Դիր բյուջե յուրաքանչյուր բանի վրա, որը օգտատիրոջ ճանապարհին է, և կանգնեցրու աշխատանքը, երբ բյուջեն սպառվում է։ Մեր կողմից ժամանակի սպառումը, մինչդեռ հրամանը շարունակում է աշխատել այլ տեղ, միայն տեղափոխում է խնդիրը։
- Մեկանգամյա միգրացիան պատկանում է մեկանգամյա աշխատանքին։ Դրա թաքցնելը ամենօրյա գործողությունների մեջ այն ավելի էժան է գրել դարձնում և ավելի թանկ՝ գործարկել։
- Փորձարկիր քո անվտանգության ստուգումները։ Համեմատությունը, որը ոչինչ չի համեմատում, նույնն է թվում, ինչ այն, որն անցել է։
Եթե կառուցում ես Mythex-ի վրա, ոչինչ անելու պետք չկա. նպատակն այն է, որ ավելի քիչ աշխատանքային տարածքներ սպառեն հիշողությունը, և նախագիծ բացելը մնա նույնքան արագ, որքան առաջ։ Այն, թե ինչպես են աշխատանքային տարածքները դադարում և արթնանում, փաստաթղթերում նկարագրված է անձնական աշխատանքային տարածքի բաժնում։ Մեկ այլ պատմության համար, որտեղ հիշողությունը սպառվում էր, տես հիշողության սպառման կրաշը, որը թաքնված է առաջընթացի պիտակում։