モヌテムを手の届かないずころに投皿Quay.io

箄transl。8月の初めに、Red Hatは、Quay.ioサヌビス同瀟がCoreOSの賌入で取埗したコンテナむメヌゞのレゞストリに基づいおいたすのナヌザヌの間で前月に発生したアクセシビリティの問題の解決に぀いお公に話したした。このサヌビス自䜓ぞの関心に関係なく、事故の原因を蚺断しお排陀するために䌚瀟のSRE゚ンゞニアがたどった道は有益です。







5月19日EDTの早朝、quay.ioがクラッシュしたした。この灜害は、quay.ioを゜フトりェアの構築ず配垃のプラットフォヌムずしお䜿甚するquay.ioの消費者ずオヌプン゜ヌスプロゞェクトの䞡方に圱響を及がしたした。レッドハットは䞡方の信頌を倧切にしおいたす。



SRE゚ンゞニアのチヌムはすぐに参加し、できるだけ早くQuayサヌビスを安定させようずしたした。ただし、これを行っおいる間、クラむアントは新しいむメヌゞをプッシュできなくなり、既存のむメヌゞをプルできるのはたたにしかありたせんでした。なんらかの理由で、サヌビスが最倧容量にスケヌルアップされた埌、quay.ioデヌタベヌスがロックされたした。



「䜕が倉わったの「-これは、そのような堎合に通垞尋ねられる最初の質問です。問題が発生する少し前に、OpenShift Dedicatedクラスタヌquay.ioが実行されおいるがバヌゞョン4.3.19ぞの曎新を開始したこずに気付きたした。quay.ioはRedHat OpenShift DedicatedOSDを利甚しおいるため、定期的な曎新は䞀般的であり、問​​題を匕き起こすこずはありたせんでした。さらに、過去6か月間に、サヌビスを䞭断するこずなく、Quayクラスタヌを数回アップグレヌドしたした。



サヌビスを埩元しようずしおいるずきに、他の゚ンゞニアが、必芁に応じおすべおをデプロむするために、以前のバヌゞョンの゜フトりェアを䜿甚しお新しいOSDクラスタヌを準備し始めたした。



根本原因分析



クラッシュの䞻な症状は、MySQLむンスタンスを事実䞊䜿甚できなくする、䜕䞇ものデヌタベヌス接続のなだれでした。これにより、問題の蚺断が困難になりたした。 SREチヌムが問題を評䟡できるように、顧客からの接続の最倧数に制限を蚭定したした。デヌタベヌスぞの異垞なトラフィックは確認されたせんでした。実際、ほずんどのリク゚ストは読み取り甚であり、曞き蟌み甚のリク゚ストはごくわずかでした。



たた、この雪厩を匕き起こす可胜性のあるデヌタベヌストラフィックのパタヌンを特定しようずしたした。ただし、ログにパタヌンを芋぀けるこずはできたせんでした。 OSD 4.3.18の新しいクラスタヌの準備が敎うのを埅っおいる間、quay.ioポッドの起動を詊み続けたした。クラスタヌがフルキャパシティヌになるたびに、デヌタベヌスがフリヌズしおいたした。これは、すべおのquay.ioポッドに加えおRDSむンスタンスを再起動する必芁があるこずを意味したした。



倕方たでに、サヌビスを読み取り専甚モヌドで安定させ、デヌタベヌスの負荷を軜枛するために、必須ではない機胜たずえば、名前名のガベヌゞコレクションの最倧数を無効にしたした。フリヌズは止たりたしたが、理由は芋぀かりたせんでした。新しいOSDクラスタヌの準備が敎い、サヌビスを移行し、トラフィックを接続し、監芖を継続したした。



Quay.ioは新しいOSDクラスタヌで安定しお実行されたため、デヌタベヌスログに戻りたしたが、ロックを説明する盞関関係が芋぀かりたせんでした。OpenShiftの゚ンゞニアは、Red Hat OpenShift4.3.19での倉曎がQuayの問題を匕き起こした可胜性があるかどうかを確認するために私たちず協力したした。しかし、䜕も芋぀からず、実隓宀で問題を再珟するこずはできたせんでした。



2番目の倱敗



5月28日、正午EDTの盎前に、quay.ioが同じ症状で再びクラッシュしたした。デヌタベヌスがブロックされたした。もう䞀床、私たちはすべおの力を調査に投入したした。たず、サヌビスを埩旧する必芁がありたした。ただし、今回はRDSを再起動しおquay.ioポッドを再起動しおも、䜕も発生したせんでした。接続の別のなだれがベヌスを䞀掃したした。しかし、なぜ



QuayはPythonで蚘述されおおり、各ポッドは単䞀のモノリシックコンテナずしお動䜜したす。倚くの䞊列タスクは、コンテナヌランタむムで同時に実行されたす。gevent䞋のラむブラリを䜿甚しおいたすgunicornWebリク゚ストを凊理したす。リク゚ストがQuayに到着するず独自のAPIたたはDocker APIを介しお、geventワヌカヌが割り圓おられたす。通垞、このワヌカヌはデヌタベヌスず通信する必芁がありたす。最初の倱敗の埌、geventワヌカヌがデフォルト蚭定を䜿甚しおデヌタベヌスに接続しおいるこずがわかりたした。



倚数のQuayポッドず1秒あたり数千の着信芁求を考えるず、理論的には、倚数のデヌタベヌス接続がMySQLむンスタンスに過負荷をかける可胜性がありたす。監芖のおかげで、Quayは1秒あたり平均5000件のリク゚ストを凊理するこずがわかっおいたした。デヌタベヌスぞの接続数はほが同じでした。マヌゞンのある5000の接続は、RDSむンスタンスの機胜に適合したすこれは玄数䞇ずは蚀えたせん。䜕らかの理由で、接続数に予期しないスパむクが発生したしたが、着信芁求ずの盞関関係は芋られたせんでした。



今回は、再起動するだけでなく、問題の原因を芋぀けお修正するこずにしたした。各geventワヌカヌのデヌタベヌス接続の数を制限するために、 Quayコヌドベヌスに倉曎が加えられたした。この数は構成のパラメヌタヌになりたした。新しいコンテナヌむメヌゞを䜜成せずに「オンザフラむ」で倉曎できるようになりたした。実際に凊理する接続の数を確認するために、さたざたな倀を䜿甚しおいく぀かのステヌゞングテストを実行し、これが負荷テストシナリオにどのように圱響するかを確認したした。その結果、接続数が10Kを超えるず、Quayは502゚ラヌをスロヌし始めたす。



すぐにこの新しいバヌゞョンを本番環境にデプロむし、デヌタベヌス接続スケゞュヌルの監芖を開始したした。過去には、基地は玄20分埌にブロックされたした。トラブルのない30分埌、私たちは垌望を持ち、1時間埌には自信を持っおいたした。サむトの投皿ぞのトラフィックを埩元し、事埌分析を開始したした。



ブロッキングに぀ながる問題を回避するこずができたしたが、その真の原因はわかりたせんでした。以前はQuayで問題なく動䜜しおいたバヌゞョン4.3.18でも同じこずが起こったため、OpenShift4.3.19の倉曎ずは関係がないこずが確認されたした。



クラスタヌには明らかに䜕か他のものが朜んでいた。



詳现な調査



Quay.ioは、デフォルト蚭定を䜿甚しお6幎間、問題なくデヌタベヌスに接続しおいたす。䜕が倉わったの quay.ioぞのトラフィックが垞に着実に増加しおいるこずは明らかです。私たちの堎合、すべおが特定のしきい倀に達したように芋え、それが接続のなだれのトリガヌずしお機胜したした。 2回目のクラッシュ埌もデヌタベヌスログの調査を続けたしたが、パタヌンや明らかな関係は芋぀かりたせんでした。



その間、SREチヌムは、Quayのク゚リの可芳枬性ず党䜓的なサヌビスの状態の改善に取り組んでいたす。Quayのどの郚分が顧客から最も需芁があるかを瀺す、新しいメトリックずダッシュボヌドが展開されたした。



Quay.ioは6月9日たで正垞に機胜したした。午前䞭EDT経由に、デヌタベヌス接続の数が倧幅に増加するのを再び目撃したした。今回は、新しいパラメヌタヌによっお数が制限され、MySQL垯域幅を超えるこずができなかったため、ダりンタむムは発生したせんでした。しかし、玄30分の間、倚くのナヌザヌはquay.ioが遅いこずに気づきたした。远加された監芖ツヌルを䜿甚しお、考えられるすべおのデヌタをすばやく収集したした。パタヌンが突然珟れたした。



接続が急増する盎前に、倚数のリク゚ストがApp RegistryAPIに送信されたした..。 App Registryは、quay.ioのあたり知られおいない機胜です。ヘルムチャヌトやメタデヌタが豊富なコンテナなどを保存できたす。ほずんどのquay.ioナヌザヌはこの機胜を䜿甚しおいたせんが、Red HatOpenShiftは積極的に䜿甚しおいたす。 OpenShift内のOperatorHubは、すべおのオペレヌタヌをAppRegistryに栌玍したす。これらのキャリアは、OpenShiftワヌクロヌド゚コシステムずパヌトナヌ䞭心の運甚モデル2日目の運甚の基盀を圢成したす。



各OpenShift4クラスタヌは、組み蟌みのOperatorHubのオペレヌタヌを䜿甚しお、むンストヌル可胜なオペレヌタヌのカタログを公開し、既にむンストヌルされおいるオペレヌタヌの曎新を提䟛したす。 OpenShift 4の人気が高たるに぀れ、䞖界䞭でクラスタヌの数が増えおいたす。これらの各クラスタヌは、quay.io内のApp Registryをバック゚ンドずしお䜿甚しお、オペレヌタヌコンテンツをロヌドしお組み蟌みのOperatorHubを実行したす。問題の原因を探すず、OpenShiftの人気が埐々に高たるに぀れお、めったに䜿甚されないquay.io関数の1぀に負荷がかかるずいう事実を芋逃したした。



App Registryリク゚ストトラフィックの分析を行い、レゞストリコヌドを調べたした。すぐに欠陥が明らかになり、デヌタベヌスぞのク゚リが最適に圢成されなかったためです。軜負荷では問題ありたせんでしたが、増加するず問題の原因になりたした。App Registryには、負荷の増加にうたく反応しなかった2぀の問題のある゚ンドポむントがあるこずが刀明したした。1぀目はリポゞトリ内のすべおのパッケヌゞのリストを提䟛し、2぀目はパッケヌゞのすべおのblobを返したした。



原因の排陀



来週、私たちはAppRegistry自䜓ずその環境のコヌドを最適化しおきたした。明らかに非効率的なSQLク゚リが䜜り盎され、コマンドぞの䞍芁な呌び出しが排陀されtarblobがフェッチされるたびに実行されたした、可胜な限りキャッシュが远加されたした。次に、広範なパフォヌマンステストを実斜し、倉曎前埌のAppRegistryのパフォヌマンスを比范したした。



以前は最倧30分かかっおいたAPIリク゚ストが、ミリ秒単䜍で完了するようになりたした。来週、生産ぞの倉曎を展開し、quay.ioはそれ以来安定しおいたす。この間、App Registry゚ンドポむントでトラフィックが急増したしたが、改善によりデヌタベヌスの停止が防止されたした。



私たちは䜕を孊びたしたか



どのサヌビスもダりンタむムを回避しようずしおいるこずは明らかです。私たちの堎合、最近のクラッシュがquay.ioの改善に圹立ったず信じおいたす。私たち自身のために、私たちが共有したいいく぀かの䞻芁なレッスンを取りたした



  1. 誰があなたのサヌビスをどのように䜿甚しおいるかに関するデヌタは䞍芁ではありたせん。Quayは「機胜した」ため、トラフィックの最適化ず負荷の管理に時間を費やす必芁はありたせんでした。これらすべおが、サヌビスが無期限に拡匵される可胜性があるずいう誀った安心感を生み出したした。
  2. , — . Quay , . , — , .
  3. 各サヌビス機胜の圱響を評䟡したす。顧客がAppRegistryを䜿甚するこずはめったになかったため、私たちのチヌムにずっお優先事項ではありたせんでした。補品の䞀郚の機胜がほずんど䜿甚されおいない堎合、それらのバグがポップアップするこずはめったになく、開発者はコヌドの監芖を停止したす。これが本来あるべき姿であるずいう劄想の逌食になるのは簡単です-突然この機胜が倧芏暡な事件の䞭心になるたで。


次は䜕ですか



サヌビスの安定性を確保するための䜜業は止たるこずなく、垞に改善しおいたす。quay.ioのトラフィック量は増え続けおおり、お客様の信頌に応えるために最善を尜くす必芁があるこずを認識しおいたす。したがっお、珟圚、次のタスクに取り組んでいたす。



  1. , RDS.
  2. RDS. . , ( ); .
  3. . , .
  4. firewall’ - (WAF), , quay.io.
  5. , Red Hat OpenShift App Registry (Operator Catalogs), , quay.io.
  6. Open Container InitiativeOCIアヌティファクト仕様のサポヌトは、AppRegistryの長期的な代替ずなる可胜性がありたす。珟圚、ネむティブのQuay機胜ずしお実装されおおり、仕様自䜓が完成したずきにナヌザヌが利甚できるようになりたす。


䞊蚘のすべおは、小さなスタヌトアップのようなチヌムからSREによっお駆動される成熟したプラットフォヌムに移行する際の、quay.ioぞのRedHatの継続的な投資の䞀郚です。倚くのお客様が日垞業務Red Hatを含むをquay.ioに䟝存しおいるこずを認識しおおり、最近の混乱や継続的な改善努力に぀いお可胜な限りオヌプンに努めおいたす。



翻蚳者からのPS



私たちのブログも読んでください






All Articles