開発者ドキュメント

本番Webアプリケーションサーバーのセットアップを改善する5つの方法

序章

アプリケーションがクラウドサーバー環境で稼働し始めたら、サーバー環境を改善して「機能する」環境から本格的な本番環境に飛躍させるにはどうすればよいか疑問に思われるかもしれません。 この記事は、クラウドサーバー環境のWebアプリケーションのコンテキストで「本番環境」の大まかな定義を作成し、既存のコンポーネントに追加できるいくつかのコンポーネントを示すことで、本番環境の計画と実装を開始するのに役立ちます。移行を行うためのアーキテクチャ。

このデモンストレーションの目的のために、 5 Common Server Setups で説明されているものと同様のセットアップから始めていると仮定しましょう。たとえば、Webアプリケーションを提供するだけの2サーバー環境です。

実際のセットアップはより単純またはより複雑かもしれませんが、ここで説明する一般的なアイデアとコンポーネントは、ある程度すべてのサーバー環境に適用されるはずです。

「本番環境」と言うときの意味を定義することから始めましょう。

本番環境とは何ですか?

Webアプリケーションのサーバー環境は、一般的な意味で、アプリケーションの動作を維持するために必要なハードウェア、ソフトウェア、データ、運用計画、および人員で構成されます。 実稼働環境とは、通常、これらの要素の許容レベルを最大限に考慮して設計および実装されたサーバー環境を指します。

可用性を促進する1つの方法は、環境内の単一障害点の数を減らすことです。 たとえば、静的IPと監視フェイルオーバーサービスを使用すると、ユーザーは正常な負荷バランサーにのみアクセスできます。詳細については、予約済みIPの使用方法のこのセクションとこのを参照してください。 ]負荷分散に関する記事

アプリケーションのコンテキストで、上記の各項目の許容レベルを定義するために時間をかけてください。 これは、問題のアプリケーションの重要性と性質によって異なります。 たとえば、ブログを回復できる限り、訪問者がほとんどいない個人のブログが時折のダウンタイムやパフォーマンスの低下に苦しむことはおそらく許容されますが、企業のオンラインストアは全面的に非常に高い評価を得る必要があります。 もちろん、すべてのアプリケーションで、すべてのカテゴリで100 % i nを達成するのは良いことですが、時間とお金の制約のために、それはしばしば実現可能ではありません。

(a)ハードウェアの信頼性、特定のハードウェアコンポーネントが障害が発生する前に指定された時間だけ適切に機能する確率、または(b)セキュリティを要因として言及していないことに注意してください。 これは、(a)使用しているクラウドサーバーは一般的に信頼できるが、(物理サーバー上で実行されているため)障害が発生する可能性があること、および(b)セキュリティのベストプラクティスを最大限に活用していることを前提としているためです。簡単に言えば、これらはこの記事の範囲外です。 ただし、信頼性とセキュリティは可用性に直接影響する可能性のある要因であり、どちらも回復可能性の必要性に寄与する可能性があることに注意する必要があります。

すべてのアプリケーションのさまざまなニーズと性質のために不可能な、実稼働環境を作成するためのステップバイステップの手順を示す代わりに、既存のセットアップを実稼働環境に変換するために利用できるいくつかの具体的なコンポーネントを紹介します。

コンポーネントを見てみましょう!

1. バックアップシステム

バックアップシステムは、データの定期的なバックアップを作成し、バックアップからデータを復元する機能を提供します。 バックアップでは、人為的エラーなどのさまざまな理由で発生する可能性のある偶発的な削除や望ましくない変更が発生した場合に、データを以前の状態にロールバックすることもできます。 すべてのコンピュータハードウェアは、ある時点で障害が発生する可能性があり、データ損失を引き起こす可能性があります。 これを念頭に置いて、すべての重要なデータの最近のバックアップを維持する必要があります。

本番環境に必要ですか?はい。 バックアップシステムは、リカバリ可能性を実現するために必要なデータ損失の影響を軽減できるため、データ損失が発生した場合の可用性を向上させますが、堅実なリカバリプランと組み合わせて使用する必要があります。次のセクションで説明します。 DigitalOceanのスナップショットベースのバックアップは、アクティブなデータベースやディスク書き込みI / Oの高い他のアプリケーションのバックアップを作成するのに適していないため、すべてのバックアップニーズに対応できない場合があることに注意してください。これらのタイプのアプリケーションを実行する場合、または、バックアップスケジュールの柔軟性を高めたい場合は、Baculaなどの別のバックアップシステムを使用してください。

上の図は、基本的なバックアップシステムの例です。 バックアップサーバーは、初期バックアップが作成されるアプリケーションサーバーと同じデータセンターにあります。 その後、バックアップのオフサイトコピーが別のデータセンターのサーバーに作成され、自然災害などの場合にデータが確実に保持されるようになります。

考慮事項

2. 回復計画

回復計画は、実稼働環境内の潜在的な障害または管理エラーから回復するための一連の文書化された手順です。 少なくとも、サーバーハードウェアの障害や偶発的なデータの削除など、必然的に発生すると思われる各障害シナリオの復旧計画が必要になります。 たとえば、サーバー障害の非常に基本的な回復計画は、バックアップからアプリケーションデータを復元するための追加の手順を含む、最初のサーバー展開を実行するために実行した手順のリストで構成できます。 より優れたリカバリプランは、優れたドキュメントに加えて、展開スクリプトと、Ansible、Chef、Puppetなどの構成管理ツールを活用して、リカバリプロセスの自動化と迅速化に役立てることができます。

本番環境に必要ですか?はい。 リカバリプランはサーバー環境にソフトウェアとして存在しませんが、運用セットアップに必要なコンポーネントです。 これらを使用すると、バックアップを効果的に利用でき、環境を再構築したり、必要に応じて目的の状態にロールバックしたりするための青写真を提供できます。

上の図は、障害が発生したデータベースサーバーの復旧計画の概要です。 この場合、データベースサーバーは、同じソフトウェアがインストールされた新しいサーバーに置き換えられ、最後の適切なバックアップを使用してサーバーの構成とデータが復元されます。 最後に、アプリサーバーは新しいデータベースサーバーを使用するように構成されます。

考慮事項

3. 負荷分散

サーバー環境に負荷分散を追加して、ワークロードを複数のサーバーに分散することにより、パフォーマンスと可用性を向上させることができます。 負荷分散されたサーバーの1つに障害が発生した場合、障害が発生したサーバーが再び正常になるまで、他のサーバーが着信トラフィックを処理します。 クラウドサーバー環境では、負荷分散は通常、アプリケーションの特定のコンポーネントを実行する複数のサーバーの前に、ロードバランサー(リバースプロキシ)ソフトウェアを実行するロードバランサーサーバーを追加することで実装できます。

本番環境に必要ですか?必ずしも必要ではありません。 負荷分散は、実稼働環境では必ずしも必要ではありませんが、正しく実装されていれば、システムの単一障害点の数を減らす効果的な方法になる可能性があります。 また、水平スケーリングによって容量を追加することにより、パフォーマンスを向上させることもできます。

上の図は、負荷を共有するための追加のアプリサーバーと、両方のアプリサーバー間でユーザーリクエストを分散するためのロードバランサーを追加しています。 この設定は、単一のアプリサーバーがトラフィックに追いつくのに苦労している場合にパフォーマンスに役立ち、アプリケーションサーバーの1つに障害が発生した場合にアプリケーションを利用できるようにするのにも役立ちます。 ただし、データベースサーバーとロードバランサーサーバー自体に2つの単一障害点があります。

注: DigitalOceanロードバランサーは、フルマネージドで可用性の高いロードバランシングサービスです。 DigitalOceanでアプリケーションを実行している場合は、ロードバランサーサービスが環境に適している可能性があります。

考慮事項

4. モニタリング

監視は、サービスのステータスとサーバーリソース使用率の傾向を追跡することでサーバー環境をサポートできるため、環境の可視性が向上します。 監視システムの最大の利点の1つは、スクリプトの実行や通知の送信などのアクションをトリガーするように構成できることです。サービスやサーバーがダウンした場合、またはCPU、メモリ、ストレージは、過剰に使用されます。 これらの通知により、問題が発生するとすぐに対応できるため、アプリケーションのダウンタイムを最小限に抑えるか、防ぐことができます。

本番環境に必要ですか?必ずしもそうとは限りませんが、本番環境のサイズと複雑さが増すにつれて、監視の必要性が高まります。 重要なサービスとサーバーリソースを追跡する簡単な方法を提供します。 次に、監視により回復性が向上し、セットアップの計画と保守に情報を提供できます。

上の図は、監視システムの例です。 通常、監視サーバーは、アプリケーションサーバーとデータベースサーバーで実行されているエージェントソフトウェアにステータスデータを要求し、各エージェントはソフトウェアとハードウェアのステータス情報で応答します。 その後、システムの管理者は、監視コンソールを使用してアプリケーションの全体的な状態を確認し、必要に応じてより詳細な情報にドリルダウンできます。

考慮事項

5. 一元化されたロギング

一元化されたログは、ログを表示および検索する簡単な方法を提供することにより、サーバー環境をサポートできます。ログは通常、環境全体の個々のサーバーに1か所でローカルに保存されます。 ログを読み取るために個々のサーバーにログインする必要がないという便利さのほかに、集中ログを使用すると、特定の時間枠でログとメトリックを相互に関連付けることにより、複数のサーバーにまたがる問題を簡単に特定できます。 また、ローカルログをアプリケーションサーバーから独自の独立したストレージを持つ一元化されたログサーバーにオフロードできるため、ログの保持に関してより柔軟性があります。

本番環境に必要ですか?いいえ。ただし、監視と同様に、集中ログは、サーバー環境のサイズと複雑さが増すにつれて、サーバー環境に関する貴重な洞察を提供できます。 従来のログ記録よりも便利であることに加えて、サーバーログを迅速に監査して可視性を高めることができます。

上の図は、集中型ロギングシステムの簡略化された例です。 ログ配布エージェントは各サーバーにインストールされ、重要なアプリとデータベースのログを集中ログサーバーに送信するように構成されています。 システムの管理者は、単一のコンソールからすべての重要なログを表示、フィルタリング、および検索できます。

考慮事項

結論

すべてのコンポーネントをまとめると、本番環境は次のようになります。

本番サーバーのセットアップをサポートおよび改善するために使用できるコンポーネントについて理解したので、それらを独自のサーバー環境に統合する方法を検討する必要があります。 もちろん、すべての可能性を網羅しているわけではありませんが、これにより、どこから始めればよいかがわかります。 利用可能なリソースと本番環境の目標のバランスに基づいて、サーバー環境を設計および実装することを忘れないでください。

上記のような環境のセットアップに興味がある場合は、次のチュートリアルを確認してください:本番用のビルド:Webアプリケーション

モバイルバージョンを終了