すべおに圱響を䞎えたロヌルアりトストヌリヌ

すべおに圱響を䞎えたロヌルアりトストヌリヌ
珟実の敵 12f-2たで

XNUMX 月末、ホワむト りォヌカヌがりィンタヌフェルを包囲しおいる間に、さらに興味深いこずが私たちに起こりたした。私たちは珍しい展開を行いたした。 原則ずしお、私たちは (他の皆さんず同様に) 新しい機胜を実皌働環境に継続的にロヌルアりトしおいたす。 しかし、これは違いたした。 その芏暡は、私たちが犯す可胜性のある間違いがすべおのサヌビスずナヌザヌに圱響を䞎えるほどでした。 その結果、蚈画および発衚されたダりンタむム期間内に、売䞊に圱響を䞎えるこずなく、すべおを蚈画どおりに展開したした。 この蚘事では、私たちがどのようにしおこれを達成したか、そしお誰でも自宅でそれを再珟できる方法に぀いお説明したす。

ここでは、私たちが行ったアヌキテクチャ䞊および技術的な決定に぀いお説明したり、それがどのように機胜するかに぀いおは説明したせん。 これらはむしろ、私が芳察し、私が盎接関䞎した最も困難なロヌルアりトの XNUMX ぀がどのように行われたかに぀いおの欄倖のメモです。 完党性や技術的な詳现に぀いおは䞻匵したせん。おそらくそれらは別の蚘事で登堎するでしょう。

背景ずどのような機胜ですか?

私たちはクラりドプラットフォヌムを構築しおいたす Mail.ru クラりド ゜リュヌション (MCS) でテクニカル ディレクタヌを務めおいたす。 そしお今床は、すべおのナヌザヌ アカりント、ナヌザヌ、パスワヌド、ロヌル、サヌビスなどの統合管理を提䟛する IAM (Identity and Access Management) をプラットフォヌムに远加したす。 なぜクラりドが必芁なのかは明らかな疑問です。すべおのナヌザヌ情報がクラりドに保存されおいるからです。

通垞、そのようなものはプロゞェクトの最初から構築され始めたす。 しかし歎史的に芋お、MCS では状況が少し異なりたした。 MCS は XNUMX ぀の郚分で構築されたした。

  • 独自の Keystone 認蚌モゞュヌルを備えた Openstack、
  • Mail.ru Cloud プロゞェクトに基づくホットボックス (S3 ストレヌゞ)、

その埌、新しいサヌビスが登堎したした。

本質的に、これらは XNUMX ぀の異なるタむプの承認でした。 さらに、Horizo​​n パネルで SSO (゚ンドツヌ゚ンド認蚌) が提䟛されたおかげで、䞀般的な Mail.ru パスワヌド ストレヌゞや自䜜の openid コネクタなど、別個の Mail.ru 開発をいく぀か䜿甚したした。仮想マシン (ネむティブ OpenStack UI) の数。

私たちにずっお IAM を䜜成するずいうこずは、すべおを単䞀のシステムに接続し、完党に私たち独自のものにするこずを意味したした。 同時に、途䞭で機胜を倱うこずはなく、リファクタリングせずに透過的に改良し、機胜の面で拡匵できる将来に向けた基盀を䜜成したす。 たた、圓初は、ナヌザヌにはサヌビスぞのアクセス (䞭倮 RBAC、ロヌルベヌスのアクセス制埡) やその他の小さなものに察するロヌル モデルがありたした。

このタスクは、Python ず Perl、いく぀かのバック゚ンド、独自に䜜成されたサヌビス、いく぀かの開発チヌムず管理者など、簡単ではないこずが刀明したした。 そしお最も重芁なこずは、戊闘本番システムには䜕千人ものラむブ ナヌザヌがいるずいうこずです。 これらすべおを䜜成し、最も重芁なこずに、死傷者を出さずに展開する必芁がありたした。

䜕を展開するのでしょうか?

非垞に倧たかに蚀うず、玄 4 か月で以䞋を準備したした。

  • 私たちは、むンフラストラクチャのさたざたな郚分で以前に動䜜しおいた機胜を集玄する、いく぀かの新しいデヌモンを䜜成したした。 残りのサヌビスには、これらのデヌモンの圢で新しいバック゚ンドが芏定されたした。
  • 圓瀟は、すべおのサヌビスで利甚できるパスワヌドずキヌの独自の䞭倮ストレヌゞを䜜成し、必芁に応じお自由に倉曎できたす。
  • 私たちは Keystone 甚に 4 ぀の新しいバック゚ンド (ナヌザヌ、プロゞェクト、ロヌル、ロヌル割り圓お) をれロから䜜成したした。実際、これがデヌタベヌスを眮き換え、ナヌザヌ パスワヌドの単䞀リポゞトリずしお機胜するようになりたした。
  • 私たちは、すべおの Openstack サヌビスに、ポリシヌを各サヌバヌからロヌカルで読み取るのではなく、サヌドパヌティのポリシヌ サヌビスにアクセスしおポリシヌを取埗するように教えたした (はい、Openstack はデフォルトでそのように動䜜したす)。

このような倧芏暡な再䜜業には、異なる開発チヌムによっお䜜成された耇数のシステムにおける倧芏暡で耇雑な、そしお最も重芁な同期的な倉曎が必芁です。 組み立おが完了するず、システム党䜓が動䜜するはずです。

このような倉曎を台無しにせずに展開するにはどうすればよいでしょうか? たず、少し将来のこずを考えおみるこずにしたした。

ロヌルアりト戊略

  • 補品を耇数の段階に分けお展開するこずも可胜ですが、その堎合は開発時間が XNUMX 倍に増加したす。 さらに、しばらくの間、デヌタベヌス内のデヌタが完党に非同期化するこずになりたす。 独自の同期ツヌルを䜜成し、耇数のデヌタ ストアを長期間䜿甚する必芁がありたす。 そしおこれはさたざたなリスクを生み出したす。
  • ナヌザヌに察しお透過的に準備できるこずはすべお事前に行われおいたした。 2ヶ月かかりたした。
  • リ゜ヌスの䜜成ず倉曎のためのナヌザヌ操䜜のみに、数時間のダりンタむムを蚱容したした。
  • すでに䜜成されおいるすべおのリ゜ヌスの操䜜にずっお、ダりンタむムは蚱容できたせん。 私たちは、ロヌルアりト䞭にリ゜ヌスがダりンタむムなく動䜜し、クラむアントに圱響を䞎えるように蚈画したした。
  • 䜕か問題が発生した堎合のお客様ぞの圱響を軜枛するために、日曜日の倜に展開するこずにしたした。 倜間に仮想マシンを管理する顧客は少なくなりたす。
  • 展開のために遞択された期間䞭はサヌビス管理が利甚できなくなるこずをすべおのクラむアントに譊告したした。

䜙談: ロヌルアりトずは䜕ですか?

泚意・理念

IT スペシャリストなら誰でも、ロヌルアりトが䜕であるかを簡単に答えるこずができたす。 CI/CD をむンストヌルするず、すべおが自動的にストアに配信されたす。 🙂

もちろんこれは真実です。 しかし、問題は、最新のコヌド配信自動化ツヌルでは、ロヌルアりト自䜓の理解が倱われおいるこずです。 珟代の亀通機関を芋おいるず、車茪の発明の壮倧さを忘れおしたうでしょう。 すべおが自動化されおいるため、党䜓像を理解できないたた展開が行われるこずがよくありたす。

そしお党䜓像はこんな感じ。 ロヌルアりトは XNUMX ぀の䞻芁な偎面で構成されたす。

  1. デヌタ倉曎を含むコヌドの配信。 たずえば、圌らの移䜏。
  2. コヌドのロヌルバックずは、䜕か問題が発生した堎合に元に戻す機胜です。 たずえば、バックアップの䜜成などです。
  3. 各ロヌルアりト/ロヌルバック操䜜の時間。 最初の XNUMX ぀のポむントの操䜜のタむミングを理解する必芁がありたす。
  4. 圱響を受ける機胜。 予想されるプラスの効果ず起こり埗るマむナスの効果の䞡方を評䟡する必芁がありたす。

展開を成功させるには、これらすべおの偎面を考慮する必芁がありたす。 通垞、最初のポむントのみ、たたはせいぜい 3 番目のポむントのみが評䟡され、その埌、ロヌルアりトは成功したずみなされたす。 しかし、XNUMX 番目ず XNUMX 番目はさらに重芁です。 ロヌルアりトに XNUMX 分ではなく XNUMX 時間かかるずしたら、どのナヌザヌがそれを望むでしょうか? それずも、ロヌルアりト䞭に䞍必芁な䜕かが圱響を受けた堎合でしょうか? それずも、XNUMX ぀のサヌビスのダりンタむムが予期せぬ結果をもたらすのでしょうか?

第 1 幕..n、リリヌスの準備

最初に、私たちの䌚議に぀いお簡単に説明しようず思いたした。チヌム党䜓、そのメンバヌ、コヌヒヌポむントでの議論の山、議論、テスト、ブレむンストヌミングです。 それなら䞍芁かなず思いたした。 XNUMX か月の開発は垞にこれで構成されたす。特に継続的に提䟛できるものを䜜成しおいない堎合は、ラむブ システムの XNUMX ぀の倧きな機胜で構成されたす。 これはすべおのサヌビスに圱響したすが、ナヌザヌにずっおは「Web むンタヌフェむスの XNUMX ぀のボタン」以倖は䜕も倉わらないはずです。

展開方法に぀いおの私たちの理解は、新しい䌚議のたびに、そしおかなり倧きく倉わりたした。 たずえば、請求デヌタベヌス党䜓を曎新する予定でした。 しかし、時間を蚈算したずころ、劥圓な展開時間内にこれを行うのは䞍可胜であるこずがわかりたした。 請求デヌタベヌスをシャヌディングしおアヌカむブするのにさらに XNUMX 週​​間近くかかりたした。 そしお、予想されるロヌルアりト速床がただ満足のいくものではなかったずき、私たちは远加のより匷力なハヌドりェアを泚文し、そこではベヌス党䜓が匕きずられたした。 もっず早くこれを実行したくなかったわけではありたせんが、珟圚展開する必芁があるため、遞択肢がありたせんでした。

私たちの䞀人が、ロヌルアりトが仮想マシンの可甚性に圱響を䞎えるのではないかず疑念を抱いたずき、私たちは XNUMX 週間かけおテスト、実隓、コヌド分析を実斜したした。その結果、このようなこずは本番環境では起こらないずいう明確な理解を埗るこずができ、最も疑念を抱いおいた人たちも同意したした。これずずもに。

その間、テクニカル サポヌトの担圓者は、展開埌に倉曎されるはずだった接続方法に関するクラむアント向けの指瀺を䜜成するために、独自の独立した実隓を実斜したした。 圌らはナヌザヌ UX に取り組み、説明曞を䜜成し、個人的なコンサルティングを提䟛したした。

可胜なすべおのロヌルアりト操䜜を自動化したした。 最も単玔なものであっおも、すべおの操䜜がスクリプト化され、テストが垞に実行されおいたした。 圌らは、サヌビスをオフにする最善の方法、぀たりデヌモンを省略するか、ファむアりォヌルでサヌビスぞのアクセスをブロックするかに぀いお議論したした。 私たちは展開の各段階でチヌムのチェックリストを䜜成し、垞に曎新したした。 すべおのロヌルアりト䜜業に぀いお、タむミングを含むガント チャヌトを䜜成し、垞に曎新したした。

そしお 

ロヌルアりト前の最終段階

...いよいよ展開の時間です。

よく蚀われるように、芞術䜜品は完成するものではなく、䜜業が完了するだけです。 すべおを芋぀けるこずはできないこずを理解しながら、すべおの合理的な仮定を立お、すべおの可胜なケヌスに備え、すべおの重倧なバグを解決し、すべおの参加者ができる限りのこずを行ったず信じお、意志を持っお努力する必芁がありたす。 展開するコヌドの数が増えるほど、これを玍埗させるのは難しくなりたす (さらに、すべおを予枬するのは䞍可胜であるこずは誰もが理解しおいたす)。

予期せぬ圱響やダりンタむムに䌎うナヌザヌのリスクをすべおカバヌするために可胜な限りのこずを行ったず確信できた時点で、展開の準備が敎ったず刀断したした。 ぀たり、次の堎合を陀いお、あらゆる問題が発生する可胜性がありたす。

  1. (私たちにずっお神聖で最も貎重な) ナヌザヌ むンフラストラクチャに圱響を䞎える、
  2. 機胜: ロヌルアりト埌のサヌビスの䜿甚は、ロヌルアりト前ず同じである必芁がありたす。

展開䞭

すべおに圱響を䞎えたロヌルアりトストヌリヌ
8ロヌル、XNUMXは干枉しない

ナヌザヌからのすべおのリク゚ストに察しお 7 時間のダりンタむムをずりたす。 珟時点では、ロヌルアりト蚈画ずロヌルバック蚈画の䞡方がありたす。

  • ロヌルアりト自䜓には玄 3 時間かかりたす。
  • テストに2時間。
  • 2 時間 - 倉曎のロヌルバックに備えお予玄したす。

ガント チャヌトは、アクションごずに䜜成され、どれくらいの時間がかかるか、䜕が順番に起こるか、䜕が䞊行しお行われるかが瀺されおいたす。

すべおに圱響を䞎えたロヌルアりトストヌリヌ
ロヌルアりト ガント チャヌトの䞀郚。初期バヌゞョン (䞊列実行なし) の XNUMX ぀。 最も䟡倀のある同期ツヌル

すべおの参加者には、ロヌルアりトにおける圹割、実行するタスク、および責任が決定されおいたす。 私たちは各段階を自動化し、展開し、展開し、フィヌドバックを収集し、再床展開しようずしたす。

むベントのクロニクル

それで、15月29日日曜日午埌10時にXNUMX人が出勀したした。 䞻芁な参加者に加えお、単にチヌムをサポヌトするために来おくれた人もいお、圌らには特に感謝しおいたす。

たた、䞻芁なテスタヌが䌑暇䞭であるこずにも蚀及する䟡倀がありたす。 テストせずに展開するこずは䞍可胜であり、オプションを怜蚎䞭です。 同僚が䌑暇䞭に私たちをテストするこずに同意し、そのこずにチヌム党䜓から倚倧な感謝を受けおいたす。

00:00。 停止
ナヌザヌのリク゚ストを停止し、技術的な䜜業を瀺す看板を掲げたす。 監芖員は悲鳎を䞊げおいたすが、すべお正垞です。 萜ちるはずのもの以倖に䜕も萜ちおいないこずを確認したす。 そしお移行の䜜業を開始したす。

誰もが時点ごずに印刷されたロヌルアりト蚈画を持っおおり、誰がい぀䜕を行うのかを誰もが知っおいたす。 それぞれのアクションの埌、タむミングを確認し、それを超えおいないこずを確認し、すべおが蚈画どおりに進んでいたす。 珟段階でロヌルアりトに盎接参加しおいない人は、同僚の迷惑にならないよう、オンラむン トむ (Xonotic、タむプ 3 もどき) を起動しお準備を進めおいたす。 🙂

02:00。 ロヌルアりト
うれしい驚きです。デヌタベヌスず移行スクリプトの最適化により、ロヌルアりトが XNUMX 時間早く終了したした。 「ロヌルアりト」ずいう倧将の叫び声。 すべおの新機胜は運甚䞭ですが、今のずころむンタヌフェむスでのみ確認できたす。 党員がテストモヌドに入り、グルヌプに分類され、最終的に䜕が起こったのかを芋始めたす。

結果はあたり良くありたせんでした。10 分埌、チヌム メンバヌのプロゞェクトに䜕も接続されおおらず、䜕も動䜜しおいないこずに気づきたした。 迅速な同期により、私たちは問題を衚明し、優先順䜍を蚭定し、チヌムに分かれおデバッグに入りたす。

02:30。 XNUMX ぀の倧きな問題ず XNUMX ぀の目
XNUMX ぀の倧きな問題が芋぀かりたした。 私たちは、䞀郚の接続されたサヌビスが顧客に衚瀺されなくなり、パヌトナヌ アカりントで問題が発生するこずに気づきたした。 どちらも、䞀郚の゚ッゞケヌスにおける移行スクリプトが䞍完党であるこずが原因です。 今すぐ修正する必芁がありたす。

少なくずも 4 ぀の目を䜿甚しお、これを修正するリク゚ストを䜜成したす。 私たちはプリプロダクション䞭にそれらが機胜し、䜕も壊れおいないこずを確認するためにテストしたす。 転がっおもいいよ。 同時に、定期的な統合テストを実行するず、さらにいく぀かの問題が明らかになりたす。 どれも小さいですが、修理が必芁です。

03:00。 -2 問題 +2 問題
以前の XNUMX ぀の倧きな問題が修正され、小さな問題もほがすべお修正されたした。 修正に専念しおいない人は党員、自分のアカりントで積極的に䜜業し、芋぀けたものを報告しおいたす。 優先順䜍を付けおチヌムに分配し、重芁でない項目は午前䞭に残しおおきたす。

再床テストを実行するず、新たに XNUMX ぀の倧きな問題が発芋されたした。 すべおのサヌビス ポリシヌが正しく到着したわけではないため、䞀郚のナヌザヌ リク゚ストは承認を通過できたせん。 さらに、パヌトナヌアカりントに関する新たな問題も発生したす。 急いで芋おみたしょう。

03:20。 緊急同期
新しい問題が XNUMX ぀修正されたした。 XNUMX ぀目ずしお、緊急同期を蚈画しおいたす。 䜕が起こっおいるかは理解しおいたす。以前の修正により XNUMX ぀の問題は解決されたしたが、別の問題が発生したした。 䌑憩を取っお、結果を残さずに正しく実行する方法を芋぀けたす。

03:30。 六぀の目
私たちは、すべおのパヌトナヌにずっおすべおがうたくいくために、ベヌスの最終状態がどうあるべきかを理解しおいたす。 私たちは 6 ぀の目でリク゚ストを䜜成し、それを実皌働前に展開し、テストし、実皌働に向けお展開したす。

04:00。 すべおが機胜しおいたす
すべおのテストに合栌し、重倧な問題は芋圓たりたせん。 時々、チヌム内の䜕かが誰かにずっおうたくいかない堎合、私たちはすぐに察応したす。 ほずんどの堎合、譊報は誀報です。 ただし、堎合によっおは、䜕かが届かなかったり、別のペヌゞが機胜しないこずがありたす。 私たちは座っお、修正しお、修正しお、修正したす。 別のチヌムが最埌の倧きな機胜である課金を立ち䞊げおいたす。

04:30。 埩垰䞍胜点
埌戻りできない時点、぀たり、ロヌルバックを開始するず、䞎えられたダりンタむムに間に合わなくなる時が近づいおいたす。 請求曞䜜成には問題があり、すべおを把握しお蚘録しおいるにもかかわらず、顧客からのお金を償华するこずを頑なに拒吊しおいたす。 個々のペヌゞ、アクション、ステヌタスにいく぀かのバグがありたす。 䞻芁な機胜は動䜜し、すべおのテストは正垞にパスしたす。 ロヌルアりトが行われたず刀断し、ロヌルバックはしたせん。

06:00。 UI で誰でも利甚できるようにする
バグが修正されたした。 ナヌザヌの興味を匕かないものは埌回しにされたす。 私たちはむンタヌフェヌスを誰にでも公開したす。 ナヌザヌからのフィヌドバックず結果の監芖を埅ちながら、匕き続き請求の䜜業を続けたす。

07:00。 APIのロヌドに関する問題
API の負荷の蚈画を少し誀っおこの負荷をテストしたが、問題を特定できなかったこずが明らかになりたした。 その結果、リク゚ストの玄 5% が倱敗したす。 力を合わせおその理由を探っおみたしょう。

請求は頑固で働きたくもありたせん。 倉曎を冷静に実行するため、延期するこずずいたしたした。 ぀たり、すべおのリ゜ヌスがそこに蓄積されたすが、クラむアントからの償华は行われたせん。 もちろん、これは問題ではありたすが、䞀般的な展開に比べれば、重芁ではないようです。

08:00。 APIを修正
負荷の修正をロヌルアりトしたずころ、障害は解消されたした。 私たちは家に垰り始めたす。

10:00。 党お
すべおが修正されおいたす。 モニタリング䞭は静かで、お客様のずころではチヌムは埐々に眠っおいきたす。 請求は残っおおりたすので、明日埩元させおいただきたす。

その埌、日䞭に䞀郚のクラむアント向けにログ、通知、リタヌン コヌド、カスタマむズを修正するロヌルアりトが行われたした。

ずいうこずで、展開は成功したした もちろん、もっず良くなる可胜性はありたすが、完璧を達成するには䜕が䞍十分であるかに぀いお結論を導き出したした。

合蚈で

展開に向けた 2 か月間にわたる積極的な準備の間に、数時間から数日間にわたる 43 のタスクが完了したした。

ロヌルアりト䞭:

  • 新しい悪魔ず倉曎された悪魔 - 5぀の郚分、2぀のモノリスを眮き換えたす。
  • デヌタベヌス内の倉曎 - ナヌザヌ デヌタを含む 6 ぀のデヌタベヌスすべおが圱響を受け、ダりンロヌドは XNUMX ぀の叀いデヌタベヌスから XNUMX ぀の新しいデヌタベヌスに行われたした。
  • 完党に再蚭蚈されたフロント゚ンド。
  • ダりンロヌドされたコヌドの量 - 新しいコヌドが 33 行、テスト䞭のコヌドが玄 3 行、移行コヌドが玄 5 行。
  • すべおのデヌタはそのたたであり、顧客の仮想マシンは XNUMX 台も損傷したせんでした。 🙂

適切な展開のための優れたプラクティス

圌らはこの困難な状況で私たちを導いおくれたした。 ただし、䞀般的に蚀えば、ロヌルアりト䞭にそれらに埓うこずは有益です。 しかし、展開が耇雑になればなるほど、それらが果たす圹割も倧きくなりたす。

  1. 最初に行う必芁があるのは、ロヌルアりトがナヌザヌにどのような圱響を䞎える可胜性があるか、たたはどのような圱響を䞎えるかを理解するこずです。 ダりンタむムは発生したすか? その堎合、ダりンタむムはどれくらいですか? これはナヌザヌにどのような圱響を䞎えるのでしょうか? 考えられる最良のシナリオず最悪のシナリオは䜕ですか? そしおリスクもカバヌしたす。
  2. すべおを蚈画しおください。 各段階で、ロヌルアりトのすべおの偎面を理解する必芁がありたす。
    • コヌドの配信。
    • コヌドのロヌルバック。
    • 各操䜜の時間。
    • 圱響を受ける機胜。
  3. ロヌルアりトのすべおの段階ず各段階でのリスクが明らかになるたで、シナリオをプレむしおください。 疑問がある堎合は、䌑憩を取っお、疑わしいステヌゞを個別に怜蚎するこずができたす。
  4. ナヌザヌの圹に立぀のであれば、各段階を改善するこずができたすし、そうすべきです。 たずえば、ダりンタむムが短瞮されたり、リスクが陀去されたりしたす。
  5. ロヌルバック テストは、コヌド配信テストよりもはるかに重芁です。 ロヌルバックの結果、システムが元の状態に戻るこずをテストで確認する必芁がありたす。
  6. 自動化できるものはすべお自動化する必芁がありたす。 自動化できないものはすべお、事前に虎の巻に曞いおおく必芁がありたす。
  7. 達成基準を蚘録したす。 どの機胜をい぀䜿甚できるようにする必芁がありたすか? これが起こらない堎合は、ロヌルバック蚈画を実行しおください。
  8. そしお最も重芁なのは人々です。 誰もが、自分が䜕をしおいるのか、なぜ、そしお展開プロセスでの自分の行動に䜕が䟝存するのかを認識する必芁がありたす。

䞀蚀で蚀えば、適切な蚈画ず綿密な調敎があれば、売䞊に圱響を䞎えるこずなく、望むものは䜕でも展開できたす。 本番環境のすべおのサヌビスに圱響を䞎えるものであっおも。

出所 habr.com

コメントを远加したす