最新のインフラストラクチャのアップグレードから学んだ4つの教訓
公開: 2022-05-04インフラストラクチャのアップグレード。 特に私たちのようなSaaS企業にとって一般的なタスクですよね?
さて、私たちの最新のものは、それに少しひねりを加えたので、典型的なソフトウェアのアップグレードではありませんでした。
主な目標はソフトウェアを最新バージョンにアップグレードすることでしたが、今回はプロジェクトにさらに2つのステップを含めました。お客様が許可リストに含める必要のあるIPの数を減らし、データベースの冗長性を実現することです。
また、更新の大部分はスムーズに進みましたが、途中でサービスの中断も発生しました。
次の行では、アップグレードを実行した理由、アップグレードの方法、および最大の学習内容についての舞台裏の情報を共有します。
さっそく始めましょう!
そもそもアップグレードを実行した理由とその内容
私たちは、私たちの責任と、クライアントのビジネスの成功においてNitroPackが果たす役割を理解しています。 そのため、最適なパフォーマンス、最高のセキュリティ基準、24時間年中無休のサービスの安定性を確保することが重要です。
インフラストラクチャを定期的にアップグレードすることは、そのすべてを確実にするための多くの方法の1つです。 そして、前述のように、この特定のアップグレードには3つの部分がありました。
1.ソフトウェアを最新の安定バージョンに更新します
クラウドベースのソリューションとして、NitroPackが100,000以上のクライアントサイトに対して行うすべての最適化は、インフラストラクチャで実行されます。 現在、100台以上のサーバーを使用してサービスを実行しています。 このアップデートでは、サーバー群を調整するソフトウェアを最新の安定バージョンにアップグレードする必要がありました。
2.お客様が許可リストに含める必要のあるIPの数を減らします
簡単に言えば、私たちのIP許可リストプロセスはユーザーフレンドリーではありませんでした。
更新前は、クライアントは、クライアントのサイトへのNitroPackの送信トラフィック(リクエスト)を処理する40を超えるIPアドレスを許可リストに登録する必要がありました。 その上、これらのIPは修正されていませんでした。つまり、サーバーの1つが停止すると、新しいサーバーが別のIPアドレスを思い付きます。
新しいIPを生成するこのプロセスでは、NitroPackがサイトを正常に最適化するために、お客様は定期的に数十の新しいアドレスを許可する必要がありました。
更新後、お客様は3つの固定された変更されないIPのみを許可リストする必要があります。
3.データベースの冗長性を実現する
NitroPackのWebサイトとダッシュボードの全体的なパフォーマンスを向上させ、サービスのセキュリティを強化できるため、長い間、データベースの冗長性を実現したいと考えていました。 さらに、この更新により、ダウンタイムなしで将来のデータベースアップグレードを実行できるようになります。
これらの目標を念頭に置いて、プロセスを2つのステップに分割し、2つの間に1日を残して、十分な息抜きをしました。
ステップ1:(11月4日):IPの数を減らす
ステップ2:(11月6日):データベースの冗長性とサーバーソフトウェアの更新
しかし、すべてが私たちの期待どおりに進んだわけではありません。
計画通りに進まなかったこと
徹底的な準備にもかかわらず、3つのアップデートすべてで予期しない問題に直面しました。 何が起こったのか:
問題#1:IP更新プロセス中の接続の問題
11月4日には、NitroPackの発信トラフィックのIPアドレス数を減らすことを目的として、サービスの予備更新を行う予定でした。
Т最初のリリースには内部ソフトウェアのバグがあり、場合によってはサービスが発信接続を作成できませんでした。 残念ながら、この問題は、インフラストラクチャでトラフィックのピークが発生した場合にのみ発生しました。 そのため、最初のテストではステージング環境で問題を検出できませんでした。 接続の問題により、NitroPackは発信の最適化を確実に実行できず、一部のクライアントは数時間サービスが不安定になりました。

幸いなことに、開発チームはHTTPクライアントのソフトウェアを更新することで問題を迅速に軽減することができました。
問題#2:データベースのバックアップに予想よりも時間がかかった
11月6日にデータベースの冗長性の作業を開始したとき、計画よりもはるかに時間がかかることがすぐにわかりました。 これにより、1日後にサーバーソフトウェアのアップグレードをプッシュする必要がありました。
しかし、それは善意を念頭に置いていました。 そもそもデータベースのバックアップには細心の注意を払い、問題なく冗長性を実現できるようにしたかったのです。
問題#3:サーバーエラーによりソフトウェアのアップグレードプロセスが遅くなりました
11月7日にサーバーソフトウェアアップグレードの展開を開始したとき、少数(1%未満)のサーバーが予期しないエラーをスローし始め、最終的に更新の展開が妨げられ、プロセス全体の速度が低下しました。 問題を自分で修正する方法はなく、サーバープロバイダーにエスカレーションする必要がありました。
タスクの規模を考えると、小さな問題のように見えますが、この予期しないエラーにより、NitroPackのクライアントのごく一部(2%未満)で断続的な短時間のサービスダウンタイムが発生しました。
問題#4:予期しない502CDNエラーが原因でサービスが不安定になる
アップグレードが完了したと思ったとき、監視システムは、頻繁に発生するCDNエラーをHTTPステータスコード502で登録し始めました。
残念ながら、エラーはすべてのクライアントに影響を及ぼし、CDNリソース配信が数日間不安定になりました。 問題を調査した後、サービスの不安定性を恒久的に修正するソフトウェアアップデートを発行しました。
NitroPackのすべてが適切に機能するようになったら、このインフラストラクチャのアップグレードから得た知識に基づいて、将来改善できることを検討するために回顧会議を行いました。
同じ問題が将来二度と起こらないようにするために私たちが取っているステップ
全体として、アップグレード全体がどのように行われたかを誇りに思っています。 時折サービスが不安定になることがありましたが、それは制御された方法であり、クライアントベース全体のサービス全体のダウンタイムを回避することに成功しました。
しかし、私たちは自分の背中を軽くたたき、何がうまくいったかに完全に集中することは、会社やサービスとして私たちを前進させないことを知っています。
そのため、将来のアップグレードをさらに効率的に実行するために実装する改善点を伝えたいと考えています。 主なポイントは次のとおりです。
ストレステスト対応のステージング環境
これにより、数万のリクエストがある大量の状況でのみ発生するエラーを検出できます。 たとえば、HTTPクライアントと再利用可能な接続の問題を事前に特定するのに役立ち、中断することなくIP更新を実行できたはずです。
より良い監視および警告システム
このアップグレード中に発生した問題に基づいて、監視とアラートの両方が不足している領域を特定することができました。 すばらしいニュースは、これらの領域の両方をすでに構成していることです。
チーム間のコラボレーションの向上とよりプロアクティブなクライアントコミュニケーション
アップグレードに関与するさまざまなチームが互いに理想的に同期されていなかったため、既存のお客様にアップグレードの進捗状況を積極的かつタイムリーに伝えることができなかったと感じています。 status.nitropack.ioページを用意して、アップグレードで何が起こっているかを誰もが追跡できるようにしましたが、それだけでは不十分でした。
次回は、ソーシャルメディア、メール、ダッシュボード、ウェブサイトなど、できるだけ多くのチャネルでアップグレードの進捗状況をお知らせします。
サーバープロバイダーとのより良い調整
今後のアップデートでは、予期しない問題に対するタイムリーな解決策を確実にするために、サービスプロバイダーとのより良い調整に努めます。 これにより、予期しないサーバーエラーをより効率的に処理できます。
最後になりましたが、ご理解とご協力のほどよろしくお願い申し上げます。 あなたの信頼は私たちのサービスを絶えず改善するための私たちの原動力です。
