Yon istwa deplwaye ki afekte tout bagay

Yon istwa deplwaye ki afekte tout bagay
Lènmi reyalite pa 12f-2

Nan fen mwa avril la, pandan White Walkers yo t ap sènen Winterfell, yon bagay ki pi enteresan te rive nou; nou te fè yon lanse dwòl. Nan prensip, nou toujou ap woule nouvo karakteristik nan pwodiksyon (tankou tout lòt moun). Men, yon sèl sa a te diferan. Echèl li te tankou nenpòt erè potansyèl ke nou ta ka fè ta afekte tout sèvis nou yo ak itilizatè yo. Kòm yon rezilta, nou te woule soti tout bagay dapre plan, nan peryòd la te planifye ak anonse, san konsekans pou lavant yo. Atik la se sou fason nou reyalize sa a ak ki jan nenpòt moun ka repete li nan kay la.

Mwen p ap dekri kounye a desizyon achitekti ak teknik nou te pran oswa di kijan tout bagay mache. Sa yo se pito nòt nan maj yo sou ki jan youn nan dewoulman ki pi difisil yo te pran plas, ke mwen obsève ak nan ki mwen te patisipe dirèkteman. Mwen pa fè reklamasyon konplè oswa detay teknik; petèt yo pral parèt nan yon lòt atik.

Background + ki kalite fonksyonalite sa a?

Nou ap konstwi yon platfòm nwaj Mail.ru Cloud Solutions (MCS), kote mwen travay kòm direktè teknik. Epi kounye a li lè pou ajoute IAM (Jesyon Idantite ak Aksè) nan platfòm nou an, ki bay jesyon inifye nan tout kont itilizatè, itilizatè, modpas, wòl, sèvis ak plis ankò. Poukisa li nesesè nan nwaj la se yon kesyon evidan: tout enfòmasyon itilizatè yo estoke nan li.

Anjeneral bagay sa yo kòmanse bati nan kòmansman an nan nenpòt ki pwojè. Men, istorikman bagay yo te yon ti kras diferan nan MCS. MCS te bati nan de pati:

  • Openstack ak pwòp modil otorizasyon Keystone li yo,
  • Hotbox (depo S3) ki baze sou pwojè Mail.ru Cloud,

alantou ki nouvo sèvis Lè sa a, parèt.

Esansyèlman, sa yo te de diferan kalite otorizasyon. Anplis de sa, nou te itilize kèk devlopman separe Mail.ru, pou egzanp, yon depo jeneral modpas Mail.ru, osi byen ke yon konektè openid ekri pwòp tèt ou, gras a ki SSO (fen-a-fen otorizasyon) te bay nan panèl la Horizon. nan machin vityèl (natifnatal OpenStack UI).

Fè IAM pou nou te vle di konekte li tout nan yon sèl sistèm, konplètman pwòp pa nou. An menm tan, nou pa pral pèdi okenn fonksyonalite sou wout la, men nou pral kreye yon fondasyon pou lavni an ki pral pèmèt nou transparans rafine li san refactoring ak echèl li an tèm de fonctionnalités. Epitou nan kòmansman an, itilizatè yo te gen yon modèl pou aksè nan sèvis (RBAC santral, kontwòl aksè ki baze sou wòl) ak kèk lòt ti bagay.

Travay la te vin pa trivial: python ak perl, plizyè backend, sèvis ekri poukont yo, plizyè ekip devlopman ak admin. Ak sa ki pi enpòtan, gen dè milye de itilizatè ap viv sou sistèm nan pwodiksyon konba. Tout bagay sa a te dwe ekri epi, sa ki pi enpòtan, woule soti san aksidan.

Kisa nou pral woule?

Pou mete li trè apeprè, nan apeprè 4 mwa nou prepare bagay sa yo:

  • Nou te kreye plizyè nouvo demon ki te rasanble fonksyon ki te deja travay nan diferan pati nan enfrastrikti a. Rès sèvis yo te preskri yon backend nouvo nan fòm lan nan move lespri sa yo.
  • Nou te ekri pwòp depo santral nou an nan modpas ak kle, ki disponib pou tout sèvis nou yo, ki ka lib modifye jan nou bezwen.
  • Nou te ekri 4 nouvo backends pou Keystone nan grafouyen (itilizatè, pwojè, wòl, devwa wòl), ki, an reyalite, ranplase baz done li yo, epi kounye a aji kòm yon repozitwa sèl pou modpas itilizatè nou an.
  • Nou te anseye tout sèvis Openstack nou yo pou yo ale nan yon sèvis politik twazyèm pati pou règleman yo olye pou yo li règleman sa yo lokalman nan chak sèvè (wi, se konsa Openstack travay pa default!)

Yon gwo retravay konsa mande gwo, konplèks epi, sa ki pi enpòtan, chanjman synchrone nan plizyè sistèm ekri pa ekip devlopman diferan. Yon fwa reyini, tout sistèm lan ta dwe travay.

Ki jan yo woule chanjman sa yo epi yo pa vis li moute? Premye nou deside gade yon ti kras nan tan kap vini an.

Estrateji deplwaye

  • Li ta posib yo woule pwodwi a nan plizyè etap, men sa a ta ogmante tan devlopman an pa twa fwa. Anplis de sa, pou kèk tan nou ta gen desinkronizasyon konplè nan done nan baz done yo. Ou ta dwe ekri pwòp zouti senkronizasyon ou epi viv ak plizyè magazen done pou yon tan long. Lè sa a kreye yon gran varyete risk.
  • Tout sa ki ta ka prepare transparan pou itilizatè a te fè davans. Li te pran 2 mwa.
  • Nou pèmèt tèt nou D 'pou plizyè èdtan - sèlman pou operasyon itilizatè yo kreye ak chanje resous yo.
  • Pou operasyon an nan tout resous ki deja kreye, D 'te akseptab. Nou te planifye ke pandan déploiement, resous yo ta dwe travay san D' Et afekte pou kliyan.
  • Pou diminye enpak sou kliyan nou yo si yon bagay ale mal, nou deside woule nan dimanch aswè. Mwens kliyan jere machin vityèl nan mitan lannwit.
  • Nou te avèti tout kliyan nou yo ke pandan peryòd yo chwazi pou lanse, jesyon sèvis yo pap disponib.

Digression: ki sa ki se yon deplwaye?

<atansyon, filozofi>

Chak espesyalis IT ka byen fasil reponn kisa yon déploiement ye. Ou enstale CI/CD, ak tout bagay otomatikman delivre nan magazen an. 🙂

Natirèlman sa a se vre. Men, difikilte a se ke ak zouti modèn automatisation livrezon kòd, konpreyansyon nan deplwaye nan tèt li pèdi. Ki jan ou bliye sou epik la nan envansyon nan wou a lè w ap gade nan transpò modèn. Tout bagay se konsa otomatize ke se deplwaye a souvan te pote soti san yo pa konprann foto an antye.

Ak foto an antye se tankou sa a. Lansman konsiste de kat gwo aspè:

  1. Livrezon nan kòd, ki gen ladan modifikasyon done. Pou egzanp, migrasyon yo.
  2. Kòd rollback se kapasite pou tounen si yon bagay ale mal. Pou egzanp, atravè kreye sovgad.
  3. Tan nan chak operasyon dewoulman / rollback. Ou bezwen konprann tan an nan nenpòt operasyon nan de premye pwen yo.
  4. Fonksyonalite ki afekte yo. Li nesesè pou evalye tou de espere efè pozitif ak posib negatif efè.

Tout aspè sa yo dwe pran an kont pou yon deplwaye siksè. Anjeneral, se sèlman premye, oswa nan pi bon dezyèm pwen an evalye, ak Lè sa a, se deplwaye a konsidere kòm siksè. Men, twazyèm lan ak katriyèm yo menm pi enpòtan. Ki itilizatè ki ta renmen li si lansman an te pran 3 èdtan olye de yon minit? Oswa si yon bagay ki pa nesesè vin afekte pandan deplwaye a? Oswa èske D 'nan yon sèvis mennen nan konsekans enprevizib?

Lwa 1..n, preparasyon pou lage

Okòmansman, mwen te panse a yon ti tan dekri reyinyon nou yo: tout ekip la, pati li yo, pil diskisyon nan pwen kafe, agiman, tès, brase lide. Lè sa a, mwen te panse li ta nesesè. Kat mwa nan devlopman toujou konpoze de sa a, espesyalman lè ou pa ekri yon bagay ki ka delivre toujou, men yon gwo karakteristik pou yon sistèm ap viv. Ki afekte tout sèvis yo, men pa gen anyen ki ta dwe chanje pou itilizatè yo eksepte "yon bouton nan koòdone entènèt la."

Konpreyansyon nou sou fason pou woule soti chanje nan chak nouvo reyinyon, ak byen siyifikativman. Pou egzanp, nou te pral mete ajou tout baz done bòdwo nou an. Men, nou kalkile tan an epi reyalize ke li te enposib fè sa nan yon tan deplwaye rezonab. Li te pran nou prèske yon semèn anplis pou shard ak achiv baz done bòdwo a. Men, lè vitès la te espere dewoulman toujou pa satisfezan, nou te bay lòd adisyonèl, pi pwisan pyès ki nan konpitè, kote tout baz la te trennen. Se pa ke nou pa t vle fè sa pi bonè, men bezwen aktyèl la pou woule kite nou pa gen okenn opsyon.

Lè youn nan nou te gen dout ke deplwaye a te kapab afekte disponiblite machin vityèl nou yo, nou te pase yon semèn ap fè tès, eksperyans, analiz kòd epi nou te resevwa yon konpreyansyon klè ke sa a pa ta rive nan pwodiksyon nou an, e menm moun ki gen plis dout yo te dakò. ak sa.

Nan entre-temps la, mesye yo ki soti nan sipò teknik fè pwòp eksperyans endepandan yo nan lòd yo ekri enstriksyon pou kliyan sou metòd koneksyon, ki te sipoze chanje apre deplwaye a. Yo te travay sou itilizatè UX, prepare enstriksyon yo epi yo bay konsiltasyon pèsonèl.

Nou otomatize tout operasyon dewoulman ki te posib. Chak operasyon te ekri, menm sa ki pi senp yo, epi tès yo te toujou ap kouri. Yo te diskite sou pi bon fason yo fèmen sèvis la - kite demon an oswa bloke aksè nan sèvis la ak yon firewall. Nou te kreye yon lis ekip pou chak etap deplwaye epi mete l ajou toujou. Nou te trase ak toujou mete ajou yon tablo Gantt pou tout travay dewoulman, ak tan.

Epi…

Akt final la, anvan woule soti

...li lè pou woule.

Kòm yo di, yon travay atistik pa ka fini, sèlman fini travay sou li. Ou dwe fè yon efò nan volonte, konprann ke ou pa pral jwenn tout bagay, men kwè ke ou te fè tout sipozisyon rezonab, bay pou tout ka posib, fèmen tout pinèz kritik, ak tout patisipan yo te fè tout sa yo te kapab. Plis kòd ou woule, se pi difisil pou konvenk tèt ou de sa (anplis, tout moun konprann ke li enposib pou prevwa tout bagay).

Nou te deside ke nou te pare pou woule soti lè nou te konvenki ke nou te fè tout sa ki posib pou kouvri tout risk pou itilizatè nou yo ki asosye ak afekte inatandi ak D '. Sa vle di, nenpòt bagay ka ale mal eksepte:

  1. Afekte (sakre pou nou, pi presye) enfrastrikti itilizatè,
  2. Fonksyonalite: itilizasyon sèvis nou an apre deplwaye a ta dwe menm jan ak anvan li.

Woule soti

Yon istwa deplwaye ki afekte tout bagay
De woulo liv, 8 pa entèfere

Nou pran tan pou tout demann itilizatè yo pou 7 èdtan. Nan moman sa a, nou gen tou de yon plan déploiement ak yon plan rollback.

  • Pwolonjman nan tèt li pran apeprè 3 èdtan.
  • 2 èdtan pou tès la.
  • 2 èdtan - rezève pou yon posib rollback nan chanjman.

Yo te trase yon tablo Gantt pou chak aksyon, konbyen tan li pran, sa k ap pase sekans, sa ki fèt an paralèl.

Yon istwa deplwaye ki afekte tout bagay
Yon moso nan yon tablo Gantt deplwaye, youn nan vèsyon yo byen bonè (san ekzekisyon paralèl). Zouti nan senkronizasyon ki pi enpòtan

Tout patisipan yo gen wòl yo nan deplwaye a detèmine, ki travay yo fè, ak kisa yo responsab. Nou eseye pote chak etap nan otomatik, woule l, woule l tounen, kolekte fidbak epi woule l ankò.

Chronicle evènman yo

Kidonk, 15 moun te vin travay dimanch 29 avril a 10 pm. Anplis de patisipan kle yo, gen kèk ki te vin tou senpleman pou sipòte ekip la, pou sa mèsi espesyal pou yo.

Li la tou vo mansyone ke tèsteur kle nou an se an vakans. Li enposib pou woule san tès, nou ap eksplore opsyon. Yon kòlèg dakò teste nou soti nan vakans, pou sa li resevwa rekonesans imans nan men tout ekip la.

00:00. Sispann
Nou sispann demann itilizatè yo, rakwoche yon siy ki di travay teknik. Siveyans la rèl, men tout bagay se nòmal. Nou tcheke ke pa gen anyen tonbe lòt pase sa ki te sipoze tonbe. Epi nou kòmanse travay sou migrasyon.

Tout moun gen yon plan dewoulman enprime pwen pa pwen, tout moun konnen ki moun ki ap fè sa ak nan ki moman. Apre chak aksyon, nou tcheke tan yo pou asire nou pa depase yo, epi tout bagay ale selon plan an. Moun ki pa patisipe nan deplwaye a dirèkteman nan etap aktyèl la ap prepare pa lanse yon jwèt sou entènèt (Xonotic, charlatan tip 3) pou yo pa deranje kòlèg yo. 🙂

02:00. Woule soti
Yon sipriz bèl - nou fini deplwaye a yon èdtan pi bonè, akòz optimize baz done nou yo ak scripts migrasyon yo. Kri jeneral la, "woule soti!" Tout nouvo fonksyon yo nan pwodiksyon, men jiskaprezan sèlman nou ka wè yo nan koòdone la. Tout moun antre nan mòd tès, klase yo an gwoup, epi kòmanse wè sa ki te pase nan fen an.

Li pa t 'trè byen, nou reyalize sa a apre 10 minit, lè pa gen anyen ki konekte oswa k ap travay nan pwojè manm ekip yo. Senkronizasyon rapid, nou vwa pwoblèm nou yo, mete priyorite, antre nan ekip epi antre nan debogaj.

02:30. De gwo pwoblèm vs kat je
Nou jwenn de gwo pwoblèm. Nou reyalize ke kliyan yo pa ta wè kèk sèvis konekte, ak pwoblèm ta parèt ak kont patnè. Tou de se akòz scripts migrasyon enpafè pou kèk ka kwen. Nou bezwen ranje li kounye a.

Nou ekri demann ki anrejistre sa a, ak omwen 4 je. Nou teste yo pandan pre-pwodiksyon pou asire ke yo travay epi yo pa kraze anyen. Ou ka woule pi lwen. An menm tan an, nou fè tès entegrasyon regilye nou an, ki revele kèk lòt pwoblèm. Yo tout piti, men yo bezwen tou repare.

03:00. -2 pwoblèm +2 pwoblèm
De gwo pwoblèm anvan yo te fikse, ak prèske tout minè yo tou. Tout moun ki pa okipe yo ap travay aktivman nan kont yo epi rapòte sa yo jwenn. Nou bay priyorite, distribye nan mitan ekip yo, epi kite atik ki pa kritik pou maten an.

Nou kouri tès yo ankò, yo dekouvri de nouvo gwo pwoblèm. Se pa tout règleman sèvis yo te rive kòrèkteman, kidonk kèk demann itilizatè pa pase otorizasyon. Plis yon nouvo pwoblèm ak kont patnè. Ann kouri gade.

03:20. Sync ijans
Yon nouvo pwoblèm fikse. Pou dezyèm lan, nou ap òganize yon senkronizasyon ijans. Nou konprann sa k ap pase: ranje anvan an fikse yon pwoblèm, men kreye yon lòt. Nou pran yon ti repo pou konnen ki jan fè li kòrèkteman epi san konsekans.

03:30. Sis je
Nou konprann ki eta final baz la ta dwe ye pou tout bagay ale byen pou tout patnè yo. Nou ekri yon demann ak 6 je, woule li nan pre-pwodiksyon, teste li, woule li pou pwodiksyon an.

04:00. Tout bagay ap travay
Tout tès yo pase, pa gen okenn pwoblèm kritik yo vizib. De tan zan tan, yon bagay nan ekip la pa travay pou yon moun, nou reyaji san pèdi tan. Pi souvan alam la se fo. Men pafwa yon bagay pa rive, oswa yon paj separe pa mache. Nou chita, ranje, ranje, ranje. Yon ekip separe ap lanse dènye gwo karakteristik - facturation.

04:30. Pwen ki pa retounen
Pwen an pa retounen ap apwoche, se sa ki, lè a lè, si nou kòmanse woule tounen, nou pa pral rankontre D 'nan ban nou an. Gen pwoblèm ak bòdwo, ki konnen ak dosye tout bagay, men fè tèt di refize retire lajan nan men kliyan yo. Gen plizyè ensèk sou paj endividyèl, aksyon, ak estati. Fonksyonalite prensipal la ap travay, tout tès yo pase avèk siksè. Nou deside ke deplwaye a te fèt, nou pa pral woule tounen.

06:00. Louvri pou tout moun nan UI a
Pinèz fikse. Gen kèk ki pa fè apèl kont itilizatè yo kite pou pita. Nou louvri koòdone a pou tout moun. Nou kontinye travay sou bòdwo, ap tann fidbak itilizatè yo ak rezilta siveyans.

07:00. Pwoblèm ak chaj API
Li vin klè ke nou te yon ti kras mal planifye chaj la sou API nou an ak teste chaj sa a, ki pa t 'kapab idantifye pwoblèm nan. Kòm yon rezilta, ≈5% nan demann echwe. Ann mobilize epi chèche rezon an.

Faktirasyon fè tèt di epi li pa vle travay tou. Nou deside ranvwaye li pou pita pou nou fè chanjman yo nan yon fason kalm. Sa vle di, tout resous yo akimile nan li, men ekri-off kliyan yo pa ale nan. Natirèlman, sa a se yon pwoblèm, men konpare ak deplwaye jeneral la li sanble pa enpòtan.

08:00. Ranje API
Nou te woule yon ranje pou chay la, echèk yo te ale. Nou kòmanse ale lakay ou.

10:00. Tout
Tout bagay ranje. Li trankil nan siveyans ak nan plas kliyan yo, ekip la piti piti ale nan dòmi. Faktirasyon an rete, nou pral restore li demen.

Lè sa a, pandan jounen an te gen deplwaye ki fikse mòso bwa, notifikasyon, kòd retounen ak personnalisation pou kèk nan kliyan nou yo.

Se konsa, deplwaye a te reyisi! Natirèlman, li ta ka pi bon, men nou te tire konklizyon sou sa ki pa t ase pou nou reyalize pèfeksyon.

Nan total

Pandan 2 mwa nan preparasyon aktif pou deplwaye a, 43 travay yo te fini, ki dire soti nan yon koup èdtan jiska plizyè jou.

Pandan lansman:

  • nouvo ak chanje move lespri yo - 5 moso, ranplase 2 monolith;
  • chanjman ki fèt nan baz done yo - tout 6 baz done nou yo ki gen done itilizatè yo te afekte, yo te telechaje soti nan twa ansyen baz done nan yon nouvo;
  • entèfas konplètman reamenaje;
  • kantite kòd telechaje - 33 mil liy nouvo kòd, ≈ 3 mil liy kòd nan tès yo, ≈ 5 mil liy kòd migrasyon;
  • tout done yo entak, pa gen yon sèl machin vityèl kliyan an te domaje. 🙂

Bon pratik pou bon déploiement

Yo te gide nou nan sitiyasyon difisil sa a. Men, jeneralman s', li itil pou swiv yo pandan tout déploiement. Men, pi konplèks la déploiement, se pi gwo wòl yo jwe.

  1. Premye bagay ou bezwen fè se konprann ki jan déploiement a kapab oswa pral afekte itilizatè yo. Èske pral gen D '? Si se konsa, ki sa ki se tan an? Ki jan sa pral afekte itilizatè yo? Ki pi bon ak pi move senaryo posib? Epi kouvri risk yo.
  2. Planifye tout bagay. Nan chak etap, ou bezwen konprann tout aspè dewoulman:
    • livrezon kòd;
    • kòd rollback;
    • tan chak operasyon;
    • fonksyonalite ki afekte yo.
  3. Jwe nan senaryo yo jiskaske tout etap deplwaye a, osi byen ke risk ki genyen nan chak nan yo, vin evidan. Si w gen nenpòt dout, ou ka pran yon ti repo epi egzamine etap dout la separeman.
  4. Chak etap ka e yo ta dwe amelyore si li ede itilizatè nou yo. Pou egzanp, li pral diminye D 'oswa retire kèk risk.
  5. Tès Rollback pi enpòtan pase tès livrezon kòd. Li enperatif pou tcheke ke kòm yon rezilta nan rollback sistèm lan pral retounen nan eta orijinal li, epi konfime sa a ak tès yo.
  6. Tout sa ki ka otomatize yo ta dwe otomatize. Tout sa ki pa ka otomatik yo ta dwe ekri davans sou yon fèy tronpe.
  7. Ekri kritè siksè a. Ki fonksyonalite ki ta dwe disponib ak nan ki lè? Si sa pa rive, fè yon plan rollback.
  8. Ak pi enpòtan - moun. Tout moun ta dwe okouran de sa yo ap fè, poukisa ak ki sa ki depann sou aksyon yo nan pwosesis deplwaye a.

Ak nan yon fraz, ak bon planifikasyon ak elaborasyon ou ka woule soti nenpòt bagay ou vle san konsekans pou lavant yo. Menm yon bagay ki pral afekte tout sèvis ou nan pwodiksyon an.

Sous: www.habr.com

Add nouvo kòmantè