Eng Rolloutgeschicht déi alles beaflosst

Eng Rolloutgeschicht déi alles beaflosst
Feinde vun der Realitéit vum 12f-2

Enn Abrëll, während d'White Walkers de Winterfell belagert hunn, ass eppes méi interessant mat eis geschitt; mir hunn eng ongewéinlech Rollout gemaach. Am Prinzip rullen mir permanent nei Features an d'Produktioun aus (wéi all déi aner). Awer dëst war anescht. D'Skala dovun war sou datt all potenziell Feeler, déi mir kënne maachen, all eis Servicer a Benotzer beaflossen. Als Resultat hu mir alles no Plang ausgerullt, bannent der geplangter an ugekënnegter Downtime Period, ouni Konsequenze fir de Verkaf. Den Artikel geet iwwer wéi mir dat erreecht hunn a wéi jiddereen et doheem widderhuelen kann.

Ech wäert elo net déi architektonesch an technesch Decisioune beschreiwen déi mir geholl hunn oder soen wéi dat alles funktionnéiert. Dëst sinn éischter Notizen an de Rand iwwer wéi ee vun de schwieregste Rollouts stattfonnt huet, déi ech observéiert hunn an an där ech direkt involvéiert war. Ech behaapten keng Vollständegkeet oder technesch Detailer; vläicht erschéngen se an engem aneren Artikel.

Hannergrond + wat fir eng Funktionalitéit ass dëst?

Mir bauen eng Cloud Plattform Mail.ru Cloud Léisunge (MCS), wou ech als techneschen Direkter schaffen. An elo ass et Zäit IAM (Identitéit an Zougang Management) op eis Plattform ze addéieren, déi vereenegt Gestioun vun all Benotzerkonten, Benotzer, Passwierder, Rollen, Servicer a méi ubitt. Firwat et an der Wollek gebraucht gëtt ass eng offensichtlech Fro: all Benotzerinformatioun ass dran gespäichert.

Normalerweis fänken esou Saachen am Ufank vun all Projeten ze bauen. Awer historesch waren d'Saache e bëssen anescht am MCS. MCS gouf an zwee Deeler gebaut:

  • Openstack mat sengem eegene Keystone Autorisatiounsmodul,
  • Hotbox (S3 Storage) baséiert op dem Mail.ru Cloud Projet,

ronderëm déi dann nei Servicer erschéngen.

Wesentlech waren dëst zwou verschidden Aarte vun Autorisatioun. Plus hu mir e puer separat Mail.ru Entwécklungen benotzt, zum Beispill eng allgemeng Mail.ru Passwuertspäicherung, souwéi e selbstgeschriwwe Openid Connector, dank deem SSO (Enn-zu-Enn Autorisatioun) am Horizon Panel zur Verfügung gestallt gouf. vu virtuelle Maschinnen (native OpenStack UI).

IAM fir eis ze maachen huet gemengt alles an engem eenzege System ze verbannen, komplett eisen eegene. Zur selwechter Zäit wäerte mir keng Funktionalitéit um Wee verléieren, awer e Fundament fir d'Zukunft erstellen, déi et eis erlaabt et transparent ze verfeineren ouni ze refactoréieren an a punkto Funktionalitéit ze skaléieren. Och am Ufank haten d'Benotzer e Virbild fir Zougang zu Servicer (zentral RBAC, Roll-baséiert Zougangskontroll) an e puer aner kleng Saachen.

D'Aufgab huet sech als net-trivial erausgestallt: Python a Perl, verschidde Backends, onofhängeg schrëftlech Servicer, verschidde Entwécklungsteams an Admins. An am Wichtegsten sinn et Dausende vu Live Benotzer am Kampfproduktiounssystem. Dat alles huet misse geschriwwe ginn an am wichtegsten ouni Affer ausgerullt ginn.

Wat wäerte mir ausrollen?

Fir et ganz grof ze soen, a ronn 4 Méint hu mir déi folgend virbereet:

  • Mir hunn e puer nei Daemonen erstallt, déi Funktiounen aggregéiert hunn, déi virdru a verschiddenen Deeler vun der Infrastruktur geschafft hunn. De Rescht vun de Servicer goufen en neie Backend a Form vun dësen Dämonen verschriwwen.
  • Mir hunn eis eege zentral Späichere vu Passwierder a Schlësselen geschriwwen, verfügbar fir all eis Servicer, déi fräi kënne geännert ginn wéi mir brauchen.
  • Mir hunn 4 nei Backends fir Keystone vun Null geschriwwen (Benotzer, Projeten, Rollen, Rollenzeeche), déi tatsächlech seng Datebank ersat hunn, an elo als eenzege Repository fir eis Benotzerpasswierder handelt.
  • Mir hunn all eis Openstack Servicer geléiert fir op en Drëtt Partei Politik Service fir hir Politik ze goen anstatt dës Politik lokal vun all Server ze liesen (jo, dat ass wéi Openstack als Standard funktionnéiert!)

Sou eng gréisser Rework erfuerdert grouss, komplex an, am wichtegsten, synchron Verännerungen a verschiddene Systemer, déi vu verschiddenen Entwécklungsteams geschriwwe sinn. Eemol zesummegesat, soll de ganze System funktionnéieren.

Wéi esou Ännerungen auszerollen an net ze verschrauwen? Als éischt hu mir decidéiert e bëssen an d'Zukunft ze kucken.

Rollout Strategie

  • Et wier méiglech, de Produit an e puer Etappen auszerollen, awer dëst géif d'Entwécklungszäit ëm dräimol erhéijen. Zousätzlech, fir eng Zäit wäerte mir komplett Desynchroniséierung vun Daten an den Datenbanken hunn. Dir musst Är eege Synchroniséierungsinstrumenter schreiwen an eng laang Zäit mat multiple Dategeschäfter liewen. An dëst schaaft eng grouss Varietéit vu Risiken.
  • Alles wat fir de Benotzer transparent virbereet ka ginn, gouf am Viraus gemaach. Et huet 2 Méint gedauert.
  • Mir hunn eis Zäit fir e puer Stonnen erlaabt - nëmme fir Benotzeroperatiounen fir Ressourcen ze kreéieren an z'änneren.
  • Fir d'Operatioun vun all scho geschafen Ressourcen war Ausdauer inakzeptabel. Mir hunn geplangt datt wärend der Ausrollung d'Ressourcen ouni Ënnerbriechung solle funktionnéieren an d'Clientë beaflossen.
  • Fir den Impakt op eis Clienten ze reduzéieren, wann eppes falsch leeft, hu mir décidéiert e Sonndeg den Owend auszerollen. Manner Clienten verwalten virtuell Maschinnen an der Nuecht.
  • Mir hunn all eise Clienten gewarnt datt während der Period fir d'Rollout ausgewielt gëtt, Servicemanagement net verfügbar ass.

Digressioun: wat ass eng Rollout?

<opgepasst, philosophie>

All IT Spezialist kann einfach äntweren wat e Rollout ass. Dir installéiert CI / CD, an alles gëtt automatesch an de Buttek geliwwert. 🙂

Natierlech ass dat richteg. Awer d'Schwieregkeet ass datt mat modernen Code Liwwerung Automatisatiounsinstrumenter d'Verständnis vun der Rollout selwer verluer ass. Wéi vergiesst Dir iwwer d'Epicness vun der Erfindung vum Rad wann Dir op modernen Transport kuckt. Alles ass sou automatiséiert datt d'Rollout dacks duerchgefouert gëtt ouni d'ganz Bild ze verstoen.

An dat ganzt Bild ass esou. Rollout besteet aus véier Haaptaspekter:

  1. Liwwerung vum Code, inklusiv Datemodifikatioun. Zum Beispill, hir Migratiounen.
  2. Code Rollback ass d'Fäegkeet zréck ze goen wann eppes falsch geet. Zum Beispill duerch d'Erstelle vu Backups.
  3. Zäit vun all Rollout / Rollback Operatioun. Dir musst den Timing vun all Operatioun vun den éischten zwee Punkten verstoen.
  4. Betraff Funktionalitéit. Et ass néideg souwuel déi erwaart positiv wéi méiglech negativ Effekter ze bewäerten.

All dës Aspekter musse berücksichtegt ginn fir eng erfollegräich Rollout. Normalerweis gëtt nëmmen den éischten, oder am beschten den zweete Punkt bewäert, an dann gëtt d'Ausrollung als erfollegräich ugesinn. Mä déi drëtt an véiert sinn nach méi wichteg. Wéi ee Benotzer hätt et gär wann d'Rollout 3 Stonnen dauert anstatt eng Minutt? Oder wann eppes onnéideg während der Ausroll beaflosst gëtt? Oder wäert d'Downtime vun engem Service zu onberechenbaren Konsequenzen féieren?

Act 1..n, Virbereedung fir Fräisetzung

Ech hu fir d'éischt geduecht eis Versammlungen kuerz ze beschreiwen: d'ganz Equipe, hir Deeler, Koup Diskussiounen op Kaffispunkten, Argumenter, Tester, Brainstorms. Dunn hunn ech geduecht et wier onnéideg. Véier Méint Entwécklung besteet ëmmer aus dësem, besonnesch wann Dir net eppes schreift wat stänneg geliwwert ka ginn, awer eng grouss Feature fir e Live System. Wat all Servicer beaflosst, awer näischt sollt fir d'Benotzer änneren ausser "ee Knäppchen an der Webinterface."

Eist Verständnis wéi een ausrollt huet sech vun all neier Versammlung geännert, a ganz bedeitend. Zum Beispill wäerte mir eis ganz Rechnungsdatenbank aktualiséieren. Awer mir hunn d'Zäit berechent a gemierkt datt et onméiglech war dëst an enger raisonnabel Ausrollzäit ze maachen. Et huet eis bal eng extra Woch gedauert fir d'Billing-Datebank ze schneiden an ze archivéieren. A wann déi erwaart Rolloutgeschwindegkeet nach ëmmer net zefriddestellend war, hu mir zousätzlech, méi mächteg Hardware bestallt, wou d'ganz Basis geschleeft gouf. Et ass net datt mir dat net méi fréi wollten maachen, awer den aktuelle Bedierfnes fir auszerollen huet eis keng Optiounen gelooss.

Wann ee vun eis Zweifel hat datt d'Rollout d'Disponibilitéit vun eise virtuelle Maschinnen kéint beaflossen, hu mir eng Woch verbruecht fir Tester, Experimenter, Codeanalyse ze maachen an e kloert Verständnis kritt datt dëst net an eiser Produktioun geschéie géif, an och déi zweifelhaftste Leit waren eens. mat dëser.

An der Tëschenzäit hunn d'Jongen vun der technescher Ënnerstëtzung hir eege onofhängeg Experimenter gemaach fir Clienten Instruktiounen iwwer Verbindungsmethoden ze schreiwen, déi no der Ausrollung sollten änneren. Si hunn u Benotzer UX geschafft, Instruktioune virbereet a perséinlech Konsultatiounen geliwwert.

Mir automatiséiert all Rollout Operatiounen déi méiglech waren. All Operatioun gouf scripted, och déi einfachsten, an Tester goufen permanent lafen. Si streiden iwwer de beschte Wee fir de Service auszeschalten - den Daemon auszeginn oder den Zougang zum Service mat enger Firewall blockéieren. Mir hunn eng Checklëscht vun Teams fir all Etapp vun der Rollout erstallt an se dauernd aktualiséiert. Mir hunn e Gantt-Diagramm fir all Rolloutaarbecht gezeechent a permanent aktualiséiert, mat Timings.

An esou…

Déi lescht Akt, ier se ausrollen

... et ass Zäit fir auszerollen.

Wéi se soen, e Konschtwierk kann net fäerdeg sinn, just fäerdeg ze schaffen. Dir musst en Effort vun Wëllen maachen, Versteesdemech, datt Dir net alles fannen wäert, mä gleewen, datt Dir all raisonnabel Viraussetzunge gemaach hunn, fir all méiglech Fäll virgesinn, zougemaach all kritesch Käfere, an all Participanten hunn alles gemaach wat se konnten. Wat Dir méi Code ausrullt, dest méi schwéier ass et Iech selwer vun dësem ze iwwerzeegen (ausserdeem versteet jiddereen datt et onméiglech ass alles virauszegesinn).

Mir hunn décidéiert datt mir prett waren fir auszerollen wa mir iwwerzeegt waren datt mir alles gemaach hunn fir all d'Risiken fir eis Benotzer ze decken, déi mat onerwaarten Afloss an Ënnerbriechungen verbonne sinn. Dat ass, alles ka falsch goen ausser:

  1. Afloss (heileg fir eis, wäertvollst) Benotzer Infrastruktur,
  2. Funktionalitéit: d'Benotzung vun eisem Service no der Ausrollung soll d'selwecht sinn wéi virdrun.

Ausrollen

Eng Rolloutgeschicht déi alles beaflosst
Zwee Roll, 8 stéieren net

Mir huelen Downtime fir all Ufroe vu Benotzer fir 7 Stonnen. Zu dëser Zäit hu mir souwuel e Rolloutplang wéi och e Rollback Plang.

  • D'Rollout selwer dauert ongeféier 3 Stonnen.
  • 2 Stonnen fir ze testen.
  • 2 Stonnen - Reservéiert fir eng méiglech Rollback vun Ännerungen.

E Gantt-Diagramm gouf fir all Aktioun ausgeschafft, wéi laang et dauert, wat geschitt sequenziell, wat parallel gemaach gëtt.

Eng Rolloutgeschicht déi alles beaflosst
E Stéck vun enger Rollout Gantt Chart, eng vun de fréie Versiounen (ouni parallel Ausféierung). De Wäertvollste Synchroniséierungsinstrument

All Participanten hunn hir Roll an der Rollout bestëmmt, wéi eng Aufgaben si maachen a wat se verantwortlech sinn. Mir probéieren all Etapp op d'Automatitéit ze bréngen, se ausrollen, zréckrollen, Feedback sammelen an erëm ausrollen.

Chronik vun Evenementer

Also sinn 15 Leit e Sonndeg, den 29. Abrëll um 10 Auer op d’Aarbecht komm. Nieft de wichtegste Participanten waren e puer einfach komm fir d'Equipe z'ënnerstëtzen, fir dee besonnesche Merci.

Et ass och derwäert ze ernimmen datt eise Schlësseltester an der Vakanz ass. Et ass onméiglech auszerollen ouni Testen, mir ënnersichen Optiounen. Eng Kollegin schléisst eis aus der Vakanz aus der Vakanz ze testen, fir déi si vun der ganzer Equipe immens Merci kritt.

00:00. Stop
Mir stoppen Benotzer Demanden, ophänken engem Schëld seet technesch Aarbecht. D'Iwwerwaachung jäizt, awer alles ass normal. Mir kucken ob näischt anescht gefall ass wéi dat wat fale sollt. A mir fänken un der Migratioun un.

Jiddereen huet Punkt fir Punkt e gedréckte Rolloutplang, jidderee weess wien wat mécht a wéi engem Moment. No all Aktioun kontrolléiere mir d'Zäite fir sécherzestellen datt mir se net iwwerschreiden, an alles geet no Plang. Déi, déi net direkt un der Rollout an der aktueller Etapp deelhuelen, preparéieren sech andeems se en Online Spillsaach (Xonotic, Typ 3 Quacks) lancéieren fir hir Kollegen net ze stéieren. 🙂

02:00. Ausgerullt
Eng agreabel Iwwerraschung - mir fäerdeg d'Rollout eng Stonn méi fréi, wéinst der Optimiséierung vun eisen Datenbanken a Migratiounsskripter. Den allgemenge Gejäiz, "ausgerullt!" All nei Funktiounen sinn an der Produktioun, awer bis elo kënne mir se nëmmen an der Interface gesinn. Jidderee geet an den Testmodus, sortéiert se a Gruppen a fänkt un ze kucken wat um Enn geschitt ass.

Et war net ganz gutt, mir mierken dat no 10 Minutten, wann näischt verbonnen ass oder schaffen am Teammember Projeten. Schnell Synchroniséierung, mir stëmmen eis Probleemer, setzen Prioritéite, briechen an Teams a ginn an Debugging.

02:30. Zwee grouss Problemer vs véier Aen
Mir fannen zwee grouss Problemer. Mir hu gemierkt datt d'Clienten e puer verbonne Servicer net gesinn, a Problemer géife mat Partnerkonten entstoen. Béid sinn wéinst imperfekte Migratiounsskripte fir e puer Randfäll. Mir mussen et elo fixéieren.

Mir schreiwen Ufroen déi dëst ophuelen, mat mindestens 4 Aen. Mir testen se während der Pre-Produktioun fir sécher ze stellen datt se funktionnéieren an näischt briechen. Dir kënnt weider rullen. Zur selwechter Zäit lafe mir eise reegelméissegen Integratiounstest, deen e puer méi Themen opdeckt. Si sinn all kleng, awer se mussen och reparéiert ginn.

03:00. -2 Problemer +2 Problemer
Déi zwee fréier grouss Problemer goufen fixéiert, a bal all déi kleng och. All déi onbesat a Fixer schaffen aktiv op hire Konten a berichten wat se fannen. Mir prioritären, verdeelen ënnert Teams, a loossen net kritesch Saache fir de Moien.

Mir maachen d'Tester erëm, si entdecken zwee nei grouss Problemer. Net all Service-Politik ass richteg ukomm, sou datt e puer Benotzerufroe keng Autorisatioun passéieren. Plus en neie Problem mat Partnerkonten. Loosst eis séier kucken.

03:20. Noutfall Synchroniséierung
Een neit Thema fixéiert. Fir déi zweet organiséieren mir eng Noutsynchroniséierung. Mir verstinn wat geschitt: de fréiere Fix huet ee Problem fixéiert, awer en aneren erstallt. Mir huelen eng Paus fir erauszefannen wéi et richteg an ouni Konsequenzen ze maachen.

03:30. Sechs Aen
Mir verstinn wat den definitiven Zoustand vun der Basis soll sinn, sou datt alles gutt geet fir all Partner. Mir schreiwen eng Ufro mat 6 Aen, rullt se an der Pre-Produktioun aus, testen se, rullt se fir d'Produktioun aus.

04:00. Alles funktionnéiert
All Tester passéiert, keng kritesch Probleemer si sichtbar. Vun Zäit zu Zäit funktionnéiert eppes am Team net fir een, mir reagéiere prompt. Meeschtens ass den Alarm falsch. Awer heiansdo kënnt eppes net, oder eng separat Säit funktionnéiert net. Mir sëtzen, fixen, fixéieren, fixéieren. Eng separat Equipe lancéiert déi lescht grouss Feature - Rechnung.

04:30. Punkt ouni Retour
De Punkt vum Keen Retour kënnt un, dat ass, d'Zäit wou, wa mir ufänken zréck ze rullen, mir d'Downtime, déi eis gëtt, net erfëllen. Et gi Probleemer mat der Rechnung, déi alles weess a registréiert, awer haart refuséiert Sue vu Clienten ze schreiwen. Et gi verschidde Bugs op eenzel Säiten, Aktiounen a Statusen. D'Haaptfunktioun funktionnéiert, all Tester passéieren erfollegräich. Mir entscheeden datt d'Rollout stattfonnt huet, mir rullen net zréck.

06:00. Open fir jiddereen an der UI
Bugs fixéiert. E puer, déi d'Benotzer net uspriechen, si fir spéider verlooss. Mir oppen den Interface fir jiddereen. Mir schaffen weider un der Rechnung, waarden op Benotzerfeedback an Iwwerwaachungsresultater.

07:00. Problemer mat API Luede
Et gëtt kloer datt mir d'Laascht op eiser API liicht falsch geplangt hunn an dës Belaaschtung getest hunn, wat de Problem net konnt identifizéieren. Als Resultat falen ≈5% vun Ufroen. Loosst eis mobiliséieren a sichen no de Grond.

Billing ass haartnäckeg a wëll och net schaffen. Mir entscheeden et bis spéider auszestellen fir d'Ännerungen roueg duerchzeféieren. Dat ass, all Ressourcen sinn an et cumuléierten, mä geschriwen-off vun Clienten ginn net duerch. Natierlech ass dëst e Problem, awer am Verglach zum allgemenge Rollout schéngt et onwichteg.

08:00. Fix API
Mir hunn e Fix fir d'Laascht ausgerullt, d'Feeler sinn fortgaang. Mir fänken un heem ze goen.

10:00. All
Alles ass fixéiert. Et ass roueg an der Iwwerwaachung an op der Plaz vun de Clienten geet d'Team no an no schlofen. De Rechnung bleift, mir restauréieren se muer.

Dunn am Dag goufen et Rollouts déi Logbicher, Notifikatiounen, Retourcoden a Personnalisatioune fir e puer vun eise Clienten fixéiert hunn.

Also, d'Ausrollung war erfollegräich! Et kéint natierlech besser sinn, awer mir hunn Conclusiounen gezunn iwwer wat net genuch war fir eis Perfektioun z'erreechen.

Total

Während 2 Méint vun der aktiver Virbereedung fir d'Rollout goufen 43 Aufgaben ofgeschloss, déi vun e puer Stonnen bis e puer Deeg daueren.

Wärend der Ausféierung:

  • nei a geännert Dämonen - 5 Stéck, ersetzen 2 Monolithen;
  • Ännerungen an den Datenbanken - all 6 vun eise Datenbanken mat Benotzerdaten sinn betraff, Downloads goufen aus dräi alen Datenbanken op eng nei gemaach;
  • komplett nei entworf frontend;
  • Betrag vun erofgeluede Code - 33 dausend Linnen vun neie Code, ≈ 3 dausend Zeilen vun Code an Tester, ≈ 5 dausend Linnen vun Migratioun Code;
  • all Daten sinn intakt, net eng virtuell Maschinn vun engem Client gouf beschiedegt. 🙂

Gutt Praktike fir gutt Ausrollung

Si hunn eis an dëser schwiereger Situatioun guidéiert. Awer am allgemengen ass et nëtzlech se während all Ausroll ze verfollegen. Awer wat méi komplex d'Ausrollung ass, dest méi grouss ass d'Roll déi se spillen.

  1. Dat éischt wat Dir maache musst ass ze verstoen wéi d'Rollout d'Benotzer kann oder wäert beaflossen. Gëtt et Ausdauer? Wa jo, wat ass d'Downtime? Wéi wäert dëst d'Benotzer beaflossen? Wat sinn déi méiglech bescht a schlëmmste Fall Szenarie? An deckt d'Risiken.
  2. Plangt alles. Op all Etapp musst Dir all Aspekter vun der Rollout verstoen:
    • Code Liwwerung;
    • Réckroll vum Code;
    • Zäit vun all Operatioun;
    • betraff Funktionalitéit.
  3. Spillt duerch d'Szenarie bis all Etappe vun der Rollout, souwéi d'Risiken op jiddereng vun hinnen, offensichtlech ginn. Wann Dir Zweifel hutt, kënnt Dir eng Paus huelen an déi zweifelhaft Etapp separat ënnersicht.
  4. All Etapp kann a soll verbessert ginn, wann et eise Benotzer hëlleft. Zum Beispill wäert et d'Downtime reduzéieren oder e puer Risiken ewechhuelen.
  5. Rollback Testen ass vill méi wichteg wéi Code Liwwerung Testen. Et ass néideg ze kontrolléieren datt als Resultat vun der Rollback de System an säin ursprénglechen Zoustand zréckkënnt, an dëst mat Tester bestätegen.
  6. Alles wat automatiséiert ka ginn, soll automatiséiert ginn. Alles wat net automatiséiert ka ginn, soll am Viraus op engem Cheatsheet geschriwwe ginn.
  7. Rekord den Erfolleg Critère. Wéi eng Funktionalitéit soll disponibel sinn a wéi eng Zäit? Wann dëst net geschitt, lafen e Rollback Plang.
  8. An am wichtegsten - Leit. Jidderee soll sech bewosst sinn wat se maachen, firwat a wat hänkt vun hiren Handlungen am Ausrollprozess of.

An an engem Saz, mat gudder Planung an Ausbau kënnt Dir alles ausrollen wat Dir wëllt ouni Konsequenze fir de Verkaf. Och eppes wat all Är Servicer an der Produktioun beaflosst.

Source: will.com

Setzt e Commentaire