Hiji carita rollout nu mangaruhan sagalana

Hiji carita rollout nu mangaruhan sagalana
Musuh Realitas ku 12f-2

Dina ahir April, nalika White Walkers ngepung Winterfell, aya anu langkung narik kajantenan ka urang; urang ngalakukeun peluncuran anu teu biasa. Sacara prinsip, urang terus rolling kaluar fitur anyar kana produksi (kawas dulur sejenna). Tapi ieu béda. Skala éta sapertos naon waé kamungkinan kasalahan anu urang laksanakeun bakal mangaruhan sadaya jasa sareng pangguna urang. Hasilna, urang digulung kaluar sagalana nurutkeun rencana, dina jangka waktu downtime rencanana sarta ngumumkeun, tanpa konsékuansi pikeun jualan. Tulisan éta ngeunaan kumaha urang ngahontal ieu sareng kumaha saha waé tiasa ngulang deui di bumi.

Ayeuna kuring moal ngajelaskeun kaputusan arsitéktur sareng téknis anu urang lakukeun atanapi nyarioskeun kumaha éta sadayana jalan. Ieu rada catetan dina margins ngeunaan kumaha salah sahiji rollouts paling hese lumangsung, nu kuring observasi jeung nu kuring ieu langsung aub. Kuring henteu ngaku lengkep atanapi rinci téknis; sigana bakal muncul dina tulisan anu sanés.

Latar + fungsi naon ieu?

Kami ngawangun platform awan Mail.ru Cloud Solutions (MCS), dimana kuring damel salaku diréktur téknis. Sareng ayeuna waktosna pikeun nambihan IAM (Manajemén Idéntitas sareng Aksés) kana platform kami, anu nyayogikeun manajemén ngahijikeun sadaya akun pangguna, pangguna, kecap akses, kalungguhan, jasa sareng seueur deui. Naha éta diperyogikeun dina awan mangrupikeun patarosan anu jelas: sadaya inpormasi pangguna disimpen di jerona.

Biasana hal-hal sapertos kitu mimiti diwangun dina awal-awal proyék naon waé. Tapi sajarahna hal geus saeutik béda dina MCS. MCS diwangun dina dua bagian:

  • Openstack kalawan modul otorisasina Keystone sorangan,
  • Hotbox (panyimpenan S3) dumasar kana proyék Mail.ru Cloud,

sabudeureun nu jasa anyar lajeng mucunghul.

Intina, ieu mangrupikeun dua jinis otorisasi anu béda. Tambih Deui, kami nganggo sababaraha kamajuan Mail.ru anu misah, contona, panyimpen kecap konci Mail.ru umum, ogé konektor openid anu ditulis sorangan, hatur nuhun anu SSO (otorisasi tungtung-ka-tungtung) disayogikeun dina panel Horizon. tina mesin virtual (OpenStack UI asli).

Nyiptakeun IAM pikeun kami hartosna ngahubungkeun sadayana kana hiji sistem, sapinuhna milik urang. Dina waktos anu sami, urang moal leungit pungsionalitasna sapanjang jalan, tapi bakal nyiptakeun pondasi pikeun masa depan anu bakal ngamungkinkeun urang sacara transparan nyaring éta tanpa refactoring sareng skala dina hal fungsionalitas. Ogé di mimiti, pamaké kungsi panutan pikeun aksés ka jasa (RBAC sentral, kontrol aksés basis peran) jeung sababaraha hal saeutik lianna.

Tugas tétéla non-trivial: python na perl, sababaraha backends, jasa ditulis mandiri, sababaraha tim ngembangkeun sarta admins. Sareng anu paling penting, aya rébuan pangguna langsung dina sistem produksi tempur. Sadaya ieu kedah ditulis sareng, anu paling penting, digulung tanpa aya korban jiwa.

Naon anu bakal urang gulung kaluar?

Pikeun nempatkeun éta kasarna pisan, dina sakitar 4 bulan kami nyiapkeun ieu:

  • Kami nyiptakeun sababaraha daemon énggal anu ngahijikeun fungsi anu saacanna damel di sababaraha bagian infrastruktur. Sesa jasa anu resep backend anyar dina bentuk setan ieu.
  • Urang nulis gudang sentral sorangan sandi jeung konci, sadia pikeun sakabéh jasa urang, nu bisa kalawan bébas dirobah sakumaha urang peryogi.
  • Urang nulis 4 backends anyar pikeun Keystone ti scratch (pamaké, proyék, kalungguhan, assignments peran), nu, dina kanyataanana, diganti database na, tur ayeuna meta salaku gudang tunggal pikeun sandi pamaké urang.
  • Urang ngajarkeun sagala jasa Openstack kami pikeun buka layanan kawijakan pihak katilu pikeun kawijakan maranéhanana tinimbang maca kawijakan ieu lokal ti unggal server (enya, éta kumaha Openstack jalan sacara standar!)

Rework utama sapertos kitu peryogi parobihan anu ageung, rumit sareng, anu paling penting, parobahan sinkron dina sababaraha sistem anu ditulis ku tim pangembangan anu béda. Sakali dirakit, sakabéh sistem kudu jalan.

Kumaha carana gulung kaluar parobahan misalna teu screw eta up? Kahiji urang mutuskeun pikeun nempo saeutik kana mangsa nu bakal datang.

Strategi rollout

  • Ieu bakal mungkin gulung kaluar produk dina sababaraha tahapan, tapi ieu bakal ngaronjatkeun waktu ngembangkeun ku tilu kali. Salaku tambahan, pikeun sababaraha waktos urang bakal gaduh desynchronization lengkep data dina pangkalan data. Anjeun kedah nyerat alat sinkronisasi anjeun nyalira sareng hirup sareng sababaraha toko data kanggo waktos anu lami. Sareng ieu nyiptakeun rupa-rupa résiko.
  • Sagalana anu tiasa disiapkeun sacara transparan pikeun pangguna parantos dilakukeun sateuacanna. Butuh waktu 2 bulan.
  • Urang ngantepkeun diri pikeun sababaraha jam - ngan ukur pikeun operasi pangguna pikeun nyiptakeun sareng ngarobih sumber.
  • Pikeun operasi sadaya sumber anu parantos diciptakeun, downtime henteu tiasa ditampi. Urang rencanana yén salila rollout, sumberdaya kedah dianggo tanpa downtime sarta mangaruhan pikeun klien.
  • Pikeun ngirangan dampak ka konsumén urang upami aya anu salah, kami mutuskeun pikeun ngaluncurkeun dina malem Minggu. Pangsaeutikna konsumén ngatur mesin virtual peuting.
  • Kami ngingetkeun ka sadaya klien kami yén salami periode anu dipilih pikeun diluncurkeun, manajemén jasa moal sayogi.

Digression: naon rollout a?

<awas, filsafat>

Unggal spesialis IT bisa kalayan gampang ngajawab naon rollout a. Anjeun masang CI / CD, jeung sagalana geus otomatis dikirimkeun ka toko. 🙂

Tangtu ieu téh bener. Tapi sesahna nyaéta ku alat otomatisasi pangiriman kode modéren, pamahaman ngeunaan rollout sorangan leungit. Kumaha anjeun poho ngeunaan epicness tina penemuan kabayang lamun nempo angkutan modern. Sagalana jadi otomatis nu rollout mindeng dilaksanakeun tanpa ngarti sakabeh gambar.

Sarta sakabeh gambar téh kawas kieu. Rollout diwangun ku opat aspék utama:

  1. Pangiriman kode, kalebet modifikasi data. Contona, migrasi maranéhanana.
  2. Balik deui kode nyaéta kamampuan pikeun uih deui upami aya anu salah. Contona, ngaliwatan nyieun cadangan.
  3. Waktos unggal operasi rollout / rollback. Anjeun kedah ngartos waktos operasi tina dua titik anu munggaran.
  4. fungsionalitas kapangaruhan. Ieu diperlukeun pikeun evaluate duanana épék positif jeung kamungkinan négatip.

Sadaya aspek ieu kedah dipertimbangkeun pikeun ngaluncurkeun anu suksés. Biasana ngan kahiji, atawa pangalusna kadua, titik ditaksir, lajeng rollout nu dianggap suksés. Tapi katilu jeung kaopat malah leuwih penting. Pamaké mana anu hoyong upami peluncuranna nyandak 3 jam tibatan menit? Atanapi upami aya anu teu dipikabutuh kapangaruhan nalika diluncurkeun? Atawa bakal downtime hiji layanan ngakibatkeun konsékuansi unpredictable?

Act 1..n, persiapan pikeun release

Mimitina kuring mikir sakeudeung ngajelaskeun rapat urang: sakabeh tim, bagian-bagianna, tumpukan diskusi dina titik kopi, argumen, tes, brainstorms. Teras kuring panginten éta henteu perlu. Opat bulan ngembangkeun salawasna diwangun ku ieu, utamana lamun anjeun teu nulis hal anu bisa dikirimkeun terus, tapi hiji fitur badag pikeun sistem hirup. Anu mangaruhan sadaya jasa, tapi teu aya anu kedah robih pikeun pangguna kecuali "hiji tombol dina antarmuka wéb."

Pamahaman urang ngeunaan kumaha carana gulung kaluar robah tina unggal pasamoan anyar, sarta cukup signifikan. Contona, urang bade ngapdet sakabéh database tagihan urang. Tapi kami ngitung waktos sareng sadar yén teu mungkin pikeun ngalakukeun ieu dina waktos rollout anu lumrah. Butuh waktu ampir saminggu tambahan pikeun beling jeung arsip database tagihan. Sarta lamun laju rollout ekspektasi masih teu nyugemakeun, kami maréntahkeun tambahan, hardware leuwih kuat, dimana sakabéh basa ieu nyeret. Ieu sanés yén kami henteu hoyong ngalakukeun ieu langkung gancang, tapi kabutuhan ayeuna pikeun ngaluncurkeun kami henteu aya pilihan.

Nalika salah sahiji urang ngagaduhan mamang yén rollout tiasa mangaruhan kasadiaan mesin virtual urang, urang nyéépkeun saminggu pikeun ngalaksanakeun tés, ékspérimén, analisis kode sareng nampi pamahaman anu jelas yén ieu moal kajantenan dina produksi urang, bahkan jalma anu paling cangcaya satuju. kalawan ieu.

Samentara éta, guys ti rojongan teknis ngalaksanakeun percobaan bebas sorangan dina urutan nulis parentah pikeun klien dina métode sambungan, nu sakuduna dituju robah sanggeus rollout nu. Aranjeunna dikeureuyeuh pamaké UX, disiapkeun parentah jeung nyadiakeun consultations pribadi.

Kami ngajadikeun otomatis sadaya operasi rollout anu mungkin. Unggal operasi ieu scripted, sanajan leuwih basajan, sarta tés anu terus ngajalankeun. Aranjeunna ngajawab ngeunaan cara anu pangsaéna pikeun mareuman jasa - ngaleungitkeun daemon atanapi meungpeuk aksés kana jasa nganggo firewall. Kami nyiptakeun daptar pariksa tim pikeun tiap tahapan peluncuran sareng diropéa terus-terusan. Kami ngagambar sareng terus-terusan ngamutahirkeun bagan Gantt pikeun sadaya padamelan, kalayan waktosna.

Teras kumaha…

Aksi ahir, saméméh rolling kaluar

... geus waktuna gulung kaluar.

Sakumaha anu disebatkeun, karya seni henteu tiasa réngsé, ngan ukur réngsé digarap. Anjeun kudu nyieun usaha tina wasiat, ngarti yén anjeun moal manggihan sagalana, tapi yakin yén anjeun geus nyieun sagala asumsi lumrah, disadiakeun pikeun sakabéh kasus mungkin, ditutup sagala bug kritis, sarta sakabeh pamilon tuh sagalana aranjeunna bisa. Beuki kode anu anjeun gulung, langkung sesah ngayakinkeun diri ngeunaan ieu (salain éta, sadayana terang yén mustahil pikeun ngaduga sadayana).

Urang mutuskeun yén kami siap gulung kaluar nalika kami yakin yén kami geus dipigawé sagalana mungkin pikeun nutupan sagala resiko keur pamaké kami pakait sareng mangaruhan kaduga jeung downtimes. Hartina, nanaon bisa salah iwal:

  1. Mangaruhan (sakral pikeun urang, paling berharga) infrastruktur pamaké,
  2. Fungsionalitas: panggunaan jasa kami saatos peluncuran kedah sami sareng sateuacanna.

Ngaguluyur

Hiji carita rollout nu mangaruhan sagalana
Dua gulung, 8 ulah ngaganggu

Urang nyandak downtime pikeun sakabéh requests ti pamaké pikeun 7 jam. Dina waktos ayeuna, urang gaduh rencana rollout sareng rencana rollback.

  • Rollout sorangan nyokot kira 3 jam.
  • 2 jam pikeun nguji.
  • 2 jam - cagar pikeun kamungkinan rollback parobahan.

A bagan Gantt geus digambar up pikeun tiap aksi, sabaraha lila waktu nu diperlukeun, naon kajadian sequentially, naon anu dipigawé dina paralel.

Hiji carita rollout nu mangaruhan sagalana
Sapotong bagan Gantt rollout, salah sahiji versi awal (tanpa palaksanaan paralel). Alat Sinkronisasi Anu Panghargaan

Kabéh pamilon boga peran maranéhanana dina rollout ditangtukeun, naon tugas maranéhna ngalakukeun, sarta naon maranéhna tanggung jawab. Urang nyoba mawa unggal tahapan ka automaticity, gulung kaluar, gulung deui, kumpulkeun eupan balik jeung gulung kaluar deui.

Babad kajadian

Janten, 15 urang sumping damel dinten Minggu, 29 April, jam 10 wengi. Salian pamilon konci, sababaraha datang saukur pikeun ngarojong tim, nu hatur nuhun husus ka aranjeunna.

Éta ogé kedah disebatkeun yén panguji konci kami nuju liburan. Mustahil pikeun ngaluncurkeun tanpa tés, kami ngajalajah pilihan. A batur sapagawean satuju pikeun nguji kami ti pakansi, nu manehna narima syukur pisan ti sakabéh tim.

00:00. Eureun
Urang ngeureunkeun requests pamaké, ngagantung up tanda nyebutkeun karya teknis. Nu ngawaskeun ngajerit, tapi sadayana normal. Urang pariksa yen euweuh ragrag lian ti naon sakuduna dituju ragrag. Sareng urang ngawitan damel dina migrasi.

Sarerea boga rencana rollout dicitak titik ku titik, sadaya jelema weruh saha anu ngalakukeun naon jeung di moment naon. Sanggeus unggal aksi, urang pariksa timings pikeun mastikeun kami teu ngaleuwihan aranjeunna, sarta sagalana mana nurutkeun rencana. Jalma anu teu ilubiung dina rollout langsung dina tahap ayeuna Nyiapkeun ku launching kaulinan online (Xonotic, tipe 3 quacks) ku kituna teu ngaganggu kolega maranéhanana. 🙂

02:00. Digulung kaluar
Hiji kejutan pikaresepeun - urang rengse rollout sajam saméméhna, alatan optimasi database urang jeung skrip migrasi. Ceurik umum, "digulung!" Sadaya fungsi anyar aya dina produksi, tapi sajauh ieu ngan ukur urang tiasa ningali dina antarmuka. Sarerea asup kana modeu tés, nyortir kana grup, sareng mimiti ningali naon anu kajantenan dina tungtungna.

Teu tétéla kacida alusna, urang sadar ieu sanggeus 10 menit, lamun euweuh disambungkeun atawa gawe dina proyék anggota tim '. Sinkronisasi gancang, urang nyoarakeun masalah urang, netepkeun prioritas, ngarobih kana tim sareng lebet kana debugging.

02:30. Dua masalah badag vs opat panon
Urang manggihan dua masalah badag. Urang sadar yen konsumén moal ningali sababaraha layanan disambungkeun, sarta masalah bakal timbul kalawan rekening pasangan. Duanana alatan skrip migrasi anu teu sampurna pikeun sababaraha kasus tepi. Urang kedah ngalereskeun ayeuna.

Kami nyerat patarosan anu ngarékam ieu, kalayan sahenteuna 4 panon. Kami nguji aranjeunna nalika pra-produksi pikeun mastikeun aranjeunna tiasa dianggo sareng henteu ngarusak nanaon. Anjeun tiasa gulung dina. Dina waktos anu sami, urang ngajalankeun uji integrasi biasa kami, anu ngungkabkeun sababaraha masalah deui. Éta kabéh leutik, tapi maranéhna ogé kudu repaired.

03:00. -2 masalah +2 masalah
Dua masalah badag saméméhna geus dibereskeun, sarta ampir kabéh minors teuing. Sadayana anu teu kapendak dina perbaikan aktip aktip dina akunna sareng ngalaporkeun naon anu aranjeunna mendakan. Urang prioritas, ngadistribusikaeun diantara tim, sarta ninggalkeun item non-kritis pikeun isuk.

Urang ngajalankeun tés deui, aranjeunna manggihan dua masalah badag anyar. Henteu sadayana kabijakan jasa sumping leres, janten sababaraha pamundut pangguna henteu lulus otorisasina. Ditambah masalah anyar sareng akun pasangan. Hayu urang buru kasampak.

03:20. Singkronisasi darurat
Hiji masalah anyar dibereskeun. Pikeun anu kadua, urang ngatur sinkronisasi darurat. Urang ngarti naon anu lumangsung: fix saméméhna dibereskeun hiji masalah, tapi dijieun sejen. Urang istirahat pikeun terang kumaha ngalakukeun éta leres sareng tanpa konsékuansi.

03:30. Panon genep
Urang ngarti naon kaayaan ahir basa kudu jadi sagalana mana ogé pikeun sakabéh mitra. Urang nulis pamundut kalawan 6 panon, gulung kaluar dina pre-produksi, nguji éta, gulung kaluar pikeun produksi.

04:00. Sagalana jalan
Sadaya tés lulus, teu aya masalah kritis anu katingali. Ti jaman ka jaman, hal di tim teu dianggo pikeun batur, urang meta promptly. Paling sering alarm palsu. Tapi sakapeung aya anu henteu sumping, atanapi halaman anu misah henteu jalan. Urang diuk, ngalereskeun, ngalereskeun, ngalereskeun. Tim anu misah ngaluncurkeun fitur gedé anu terakhir - tagihan.

04:30. Titik teu balik
Titik no balik geus approaching, nyaeta, waktu nalika, lamun urang mimiti gulung deui, urang moal minuhan downtime dibikeun ka urang. Aya masalah sareng tagihan, anu terang sareng ngarékam sadayana, tapi stubbornly nampik nyerat artos ti klien. Aya sababaraha bug dina halaman individu, tindakan, sareng status. Fungsi utama jalan, sadaya tés lulus suksés. Urang mutuskeun yén rollout geus lumangsung, urang moal gulung deui.

06:00. Dibuka pikeun sadayana di UI
Bug dibereskeun. Sababaraha nu teu daya tarik pikeun pamaké ditinggalkeun pikeun engké. Urang muka panganteur ka dulur. Urang terus ngerjakeun tagihan, ngantosan eupan balik pamaké sarta hasil monitoring.

07:00. Masalah sareng beban API
Janten jelas yén urang rada misplanned beban on API urang jeung nguji beban ieu, nu teu bisa nangtukeun masalah. Hasilna, ≈5% tina requests gagal. Hayu urang mobilisasi sareng milarian alesanana.

Billing nekad sareng henteu hoyong damel ogé. Urang mutuskeun pikeun nunda eta nepi ka engké dina urutan pikeun ngalaksanakeun parobahan dina cara tenang. Hartina, sagala sumber akumulasi di dinya, tapi write-offs ti klien teu ngaliwat. Tangtosna, ieu mangrupikeun masalah, tapi dibandingkeun sareng rollout umum sigana teu penting.

08:00. Ngalereskeun API
Urang digulung kaluar fix pikeun beban, gagal indit jauh. Urang ngawitan balik ka imah.

10:00. Sadayana
Sagalana geus dibereskeun. Éta sepi dina ngawaskeun sareng di tempat palanggan, timna laun-laun sare. Tagihan tetep, urang bakal mulangkeun deui isukan.

Lajeng beurang aya rollouts nu tetep log, bewara, Konci balik sarta kustomisasi pikeun sababaraha klien kami.

Janten, peluncuran éta suksés! Éta tiasa, tangtosna, langkung saé, tapi urang nyimpulkeun naon anu henteu cekap pikeun urang ngahontal kasampurnaan.

dina total

Salila 2 bulan persiapan aktip pikeun peluncuran éta, 43 tugas parantos réngsé, salami sababaraha jam dugi ka sababaraha dinten.

Salila peluncuran:

  • setan anyar jeung robah - 5 lembar, ngagantikeun 2 monoliths;
  • parobahan dina basis data - sadaya 6 basis data urang jeung data pamaké geus kapangaruhan, undeuran geus dijieun tina tilu database heubeul ka nu anyar;
  • frontend lengkep redesigned;
  • jumlah kode diundeur - 33 sarébu garis kode anyar, ≈ 3 sarébu garis kode dina tés, ≈ 5 sarébu garis kode migrasi;
  • sadaya data gembleng, teu hiji mesin virtual customer urang ruksak. 🙂

prakték alus pikeun rollout alus

Aranjeunna dipandu kami dina kaayaan susah ieu. Tapi, sacara umum, éta mangpaat pikeun nuturkeun aranjeunna salami rollout naon waé. Tapi beuki kompleks rollout, nu gede peran maranéhna maénkeun.

  1. Hal kahiji anu anjeun kedah laksanakeun nyaéta ngartos kumaha peluncuran éta tiasa atanapi bakal mangaruhan pangguna. Bakal aya downtime? Lamun kitu, naon downtime? Kumaha ieu bakal mangaruhan pamaké? Naon skenario anu pangsaéna sareng anu paling awon? Jeung nutupan resiko.
  2. Rencanana sagalana. Dina unggal tahapan, anjeun kedah ngartos sadaya aspek peluncuran:
    • pangiriman kode;
    • rollback kode;
    • waktos unggal operasi;
    • fungsionalitas kapangaruhan.
  3. Puterkeun skénario dugi ka sadaya tahapan peluncuran, kitu ogé résiko dina masing-masingna, janten écés. Upami anjeun gaduh mamang, anjeun tiasa istirahat sareng mariksa tahapan anu ditaroskeun nyalira.
  4. Unggal tahap tiasa sareng kedah ningkat upami éta ngabantosan pangguna urang. Contona, éta bakal ngurangan downtime atawa miceun sababaraha resiko.
  5. Uji balikan langkung penting tibatan tés pangiriman kode. Perlu mariksa yén salaku hasil tina rollback sistem bakal balik deui ka kaayaan aslina, sarta mastikeun ieu kalawan tés.
  6. Sagalana nu bisa otomatis kudu otomatis. Sagalana nu teu bisa otomatis kudu ditulis sateuacanna dina curang.
  7. Catet kriteria kasuksésan. Pungsi naon anu kedah sayogi sareng iraha waktosna? Upami ieu henteu kajantenan, jalankeun rencana balikan deui.
  8. Jeung paling importantly - jalma. Sarerea kedah sadar naon anu aranjeunna laksanakeun, kunaon sareng naon gumantung kana lampahna dina prosés rollout.

Sarta dina hiji kalimah, kalawan tata alus tur elaboration anjeun tiasa gulung kaluar nanaon rék tanpa konsékuansi pikeun jualan. Malah hal anu bakal mangaruhan sagala jasa anjeun dina produksi.

sumber: www.habr.com

Tambahkeun komentar