「クラウドネイティブインフラ」第7章(2)

アプリケーションライフサイクル

レガシー・アプリケーションとライフサイクルネイティブクラウドアプリケーション彼らはソフトウェアによって管理にステージングする必要があることを除いて、違いはありません。

彼らのステージは、ソフトウェアによって管理されるべき以外のクラウドネイティブアプリケーションのためのライフサイクルは、従来のアプリケーションよりも違いはありません。

この章では、関係するすべてのモードとオプションの管理アプリケーションを説明するつもりはありません。展開、運用、破壊:私たちは、簡単に、特に段階の利益にネイティブアプリケーションを実行するために、クラウドネイティブのクラウドインフラストラクチャ上で説明します。

この章では、マン老化のアプリケーションに関係するすべてのパターンとオプションを説明するものではありません。私たちは、簡単に、特にクラウドネイティブインフラの上にクラウドネイティブアプリケーションを実行しているの恩恵を受けるいくつかの段階を説明します:展開、実行、および引退します。

これらの被験者は、すべてのコンテンツが含まれていませんが、アプリケーションのアーキテクチャは、さまざまな言語や選択したライブラリは、参照することができ、他の多くの本や記事があります。

これらのトピックは、すべてのオプションのすべての包括的ではありませんが、他の多くの本や記事は、アプリケーションのアーキテクチャ、言語、および選択したライブラリに依存し、選択肢を模索するために存在します。

配備します

展開は、インフラストラクチャアプリケーションに最も依存つの領域です。何がすることは、アプリケーション自体の展開を止めることができますが、インフラがまだ他の多くの側面を管理することができます。

配備は、アプリケーションは、ほとんどのインフラに依存している一つの領域です。自分自身を展開からアプリケーションを止めるものは何もありませんが、インフラが管理する他の多くの側面が残っています。

ここでの議論の対象とどのように統合すると配信ではありませんが、このトピックのいくつかの練習は明らかです。アプリケーションの配備は、単にコードを取得し、それを実行することではありません。ソフトウェアのすべてのフェーズを管理するために設計されたクラウドネイティブアプリケーション。これは、継続的な健康診断だけでなく、初期導入段階を含んでいます。技術、プロセス、および「人々」できるだけ態様の原理のボトルネックを解消するには。

あなたがどのように統合し、配信は、我々がここに対処しないであろう話題ですが、この空間でのいくつかの慣行は明確です。アプリケーションの配備は、単にコードを取り、それを実行している以上のものです。
クラウドネイティブアプリケーションは、すべての段階でソフトウェアで管理するように設計されています。これは、継続的な健康診断だけでなく、初期導入が含まれます。人間のボトルネックは、技術、プロセス、およびポリシーに極力排除する必要があります。

アプリケーションをデプロイすると、セルフサービス、自動化されなければならない、としばしば開発する場合、それは頻繁に行われるべきです。彼らはまた、検証され、安全な、テストする必要があります。

活発な開発中の、頻繁にあればアプリケーションのための配備は、セルフサービス、自動化、およびする必要があります。彼らはまた、テスト検証、および平穏する必要があります。

また、アプリケーションの各インスタンスを更新し、それぞれ、機能、互換性の新バージョンで、ソリューションをアップグレードするべきではありません。機能の切り替えは、ダイナミックに選択的にアプリケーションを再起動せずに有効にすることができ、新たなCIでなければなりません。その後、アップグレード、更新の最初の部分、及びテストによって検証し、すべてのテストに合格した場合に、制御された様式で放出します。

一度にアプリケーションのすべてのインスタンスを置き換えることはめったに新バージョンや機能のためのソリューションではありません。新機能は、選択的かつ動的にアプリケーションの再起動なしで有効にすることができる構成フラグ、後ろに「ゲーティング」されています。バージョンアップは、部分的に制御された方法でロールアウトし、すべてのテストに合格したときに、テストと検証、ロールアウト、およびされています。

新しい機能を有効にするか、またはトラフィックの分離のアプリケーションのフローを制御するメカニズムの新しいバージョンを展開する場合は存在している必要があります(付録Aを参照)。これは、中断の影響を制限し、アプリケーションのパフォーマンスと新機能の使用を評価するために、徐放および速いフィードバックループを可能にすることができます。

新しい機能を有効にするか、新しいバージョンが展開されている場合は、に向かってまたは離れアプリケーションからのトラフィックを制御するメカニズムが存在する必要があります(付録Aを参照してください)。これは、停電の影響を制限し、遅いロールアウトを可能にし、より高速なフィードバックは、アプリケーションのパフォーマンスと機能の使用のためにループすることができます。

インフラストラクチャは、ソフトウェアの展開のすべての詳細を処理する必要があります。すべての要件が要件を満たしまたは変更されるまで、アプリケーションのバージョン、インフラストラクチャ要件と依存関係を定義することができるエンジニアは、インフラストラクチャは、この状態を駆動します。

インフラストラクチャは、ソフトウェアを展開するすべての詳細の世話をする必要があります。エンジニアは、アプリケーションのバージョン、インフラストラクチャの要件、および依存関係を定義することができ、そしてそれはすべての要件を満たしているかの要件が変更されるまでのインフラストラクチャは、その状態に向かってドライブします。

ラン

アプリケーションの運用フェーズでは、アプリケーションのライフサイクルcalmestと最も安定な相でなければなりません。観測は、アプリケーションが何をしているかを理解するために、そして必要に応じて業務アプリケーションに変更することができます:第1章では、二つの最も重要な側面を実行するためのソフトウェアについて説明します。

アプリケーションを実行すると、アプリケーションのライフサイクルの中で最も平穏かつ安定した段階でなければなりません。ソフトウェアを実行している2つの最も重要な側面は、第1章で説明します。観測は、アプリケーションが何をしているかを理解するために、操作性は、必要に応じてアプリケーションを変更することができるように。

私たちは、第1章では、健康やテレメトリデータの報告は、アプリケーションの観測を紹介していますが、それは動作しない場合、あなたはどのように行うのでしょうか?アプリケーションのテレメトリデータは、それがSLOを満たしていないことを示している場合、どのようにトラブルシューティングとデバッグアプリケーションのですか?

我々はすでに、健康やテレメトリデータを報告することによってアプリケーションのための観測について、第1章で詳しくに行きましたが、意図したとおりに物事が動作しないとき、あなたは何をしますか?アプリケーションのテレメトリデータは、それがSLOを満たしていないと言うならば、どのようにトラブルシューティングやアプリケーションをデバッグすることができますか?

クラウドネイティブアプリケーションは、SSHを介してサーバに接続し、ログを分析するべきではありません。それも、ファイルやログサーバ、SSHを必要とするかどうかを検討する価値があるかもしれません。

クラウドネイティブアプリケーションを使用すると、サーバーにSSHべきではないとログを掘ります。それも、あなたはSSHが必要な場合は、すべてのファイル、またはサーバのログを検討する価値があるかもしれません。

あなたは伝統的なツールが必要な場合は、まだ、雲のログ(ログデータ)APに必要)と、いくつかの場所にあるサーバーを積み重ねが、一見の価値。プログラムがクラッシュした場合は、デバッグアプリケーションとインフラストラクチャコンポーネントへの方法が必要です。

あなたはまだ、スタック内のどこかにデータ(雲のロギング)、およびログサーバ、アプリケーションへのアクセス(API)が必要ですが、それはあなたがすべてでは伝統的なツールが必要かどうかを確認するために、運動を通過する価値があります。物事が壊れたとき、あなたは、アプリケーションとインフラストラクチャのコンポーネントをデバッグする方法が必要です。

破損したシステムをデバッグする場合は、第5章で説明したように、最初に、テストするためのインフラストラクチャを確認する必要があります。テストは開いているか、適切に任意のインフラストラクチャコンポーネント期待される性能を提供するように構成されていないはずです。

壊れたシステムをデバッグするときは、まず、インフラストラクチャのテストをご覧ください。第5章で説明したようにテストが適切に設定されていないか、期待される性能を提供していない任意のインフラストラクチャコンポーネントを公開する必要があります。

あなたが基盤となるインフラストラクチャを管理していないからといって、インフラストラクチャは、あなたの問題の原因となることができないという意味ではありません。テストによって期待どおりにインフラが実行することを確実にすることが望ましいことを確認します。

あなたが基盤となるインフラストラクチャを管理していないからといって、インフラストラクチャは、あなたの問題の原因となることができないという意味ではありません。期待を検証するテストを持つことは、あなたのインフラストラクチャは、あなたが期待する方法を実行していることを確認します。

インフラ要因を除いた後、あなたはより多くの情報のためのアプリケーションを確認する必要があります。最良の方法は、アプリケーションのデバッグアプリケーションパフォーマンス管理(APM)を介して行われ、トラッキングアプリケーションは、そうでOpenTracingを介して配布することができます。

インフラが除外された後、あなたはより多くの情報のためのアプリケーションになります。アプリケーションのデバッグのために有効にする最高の場所は、アプリケーション・パフォーマンス管理(APM)や、OpenTracingなどの規格を経由して、トレース可能性の分散アプリケーションです。

例をOpenTracing、実現とAPMは、本書の範囲を超えています。非常に簡単な概要として、OpenTracingは、あなたがより簡単にネットワークとアプリケーショントラフィックの問題を特定するために、アプリケーション全体の呼び出しを追跡することができます。例示的な可視化をOpenTracingが図7-1に見ることができます。サービスメトリックおよびレポートのエラーを収集するためにAPMツールは、アプリケーションに追加します。

OpenTracing例、実装、およびAPMは、本書の範囲外です。非常に簡単な概要として、OpenTracingは、あなたがより簡単にネットワークとアプリケーションの通信問題を識別するためにアプリケーション全体の呼び出しをトレースすることができます。OpenTracingの例の視覚化は、図7-1に見ることができます。APMは、収集サービスにメトリックと障害を報告するために、あなたのアプリケーションにツールを追加します。

図7-1。OpenTracingの可視化

テストトラックとまだ露出の問題は、時にはあなただけのアプリケーションに関するより詳細なログを有効にする必要がある場合。しかし、サイトを破壊することなく、問題のデバッグを有効にする方法の場合は?

テストやトレースがまだ問題を公開していないときは、時にはあなただけのアプリケーションの詳細詳細ログを有効にする必要があります。しかし、どのように問題を破壊せずにデバッグを有効にするには?

実行時設定は、クラウドが、ネイティブ環境でのアプリケーションのために、コンフィギュレーション、アプリケーションを再起動することなく、ダイナミックであるべきことが重要です。設定オプションは、動的にアプリケーションのAPI呼び出し、HTTPヘッダ情報や、さまざまな方法を変更するアプリケーションライブラリの実装を通じて、まだですが、集中型のコーディネーターによるフラグ値にできるはずです。

Configuration at runtime is important for applications, but in a cloud native environment, configuration should be dynamic without application restarts. Configuration options are still implemented via a library in the application, but flag values should have the ability to dynamically change through a centralized coordinator, application API calls, HTTP headers, or a myriad of ways.

动态配置的两个例子是Netflix的Archaius和Facebook的Gatekeeper。前Facebook工程经理Justin Mitchell在Quora帖子中分享,[Gatekeeper]在代码部署发布中隔离feature。当我们观察用户指标,性能并确保服务到位以便扩展时,功能可能会在几天或几周内发布。

Two examples of dynamic configuration are Netflix’s Archaius and Facebook’s Gatekeeper. Justin Mitchell, a former Facebook engineering manager, shared in a Quora post that:
[Gatekeeper] decoupled feature releasing from code deployment. Features might be released over the course of days or weeks as we watched user metrics, performance, and made sure services were in place for it to scale.

允许对应用程序配置进行动态控制,可以更好地控制公开的feature,并更好地测试部署代码,发布新代码很容易并不意味着它是适合所有情况的正确解决方案

Allowing dynamic control over application configuration enables more control over exposed features and better test coverage of deployed code. Just because pushing new code is easy doesn’t mean it is the right solution for every situation.

基础架构可以通过协调何时启用功能并根据高级网络策略路由流量来帮助解决此问题并启用更灵活的应用程序。此模式还允许更精细的控件和更好地协调全量或回滚方案。

Infrastructure can help solve this problem and enable more flexible applications by coordinating when features are enabled and routing traffic based on advanced net‐ work policies. This pattern also allows finer-grained controls and better coordination of roll-out or roll-back scenarios.

在动态的自服务的环境中,将部署的应用程序数量将迅速增长。您需要确保在类似的自助服务模型中动态调试应用程序以便部署应用程序。

In a dynamic, self-service environment the number of applications that will get deployed will grow rapidly. You need to make sure you have an easy way to dynamically debug applications in a similar self-service model to deploy the applications.

尽管工程师喜欢推出新的应用程序,但反过来很难让他们下线旧的应用程序。即使如此,它仍然是应用程序生命周期中的关键阶段。

As much as engineers love pushing new applications, it is conversely difficult to get them to retire old applications. Even still, it is a crucial stage in an application’s life cycle.

Retire

在快速变化的环境中,部署新的应用程序和服务很常见。注销应用程序应该以与创建它们相同的方式自服务。

Deploying new applications and services is common in a fast-moving environment. Retiring applications should be self-service in the same way as creating them.

如果自动部署和监控新服务和新资源,则也应按相同标准销毁。尽快部署新服务而不删除未使用的服务是最容易产生技术债务的。

If new services and resources are deployed and monitored automatically, they should also be retired under the same criteria. Deploying new services as quickly as possible with no removal of unused services is the easiest way to accrue technical debt.

识别应注销的服务和资源是特定于业务的。您可以使用应用程序的遥测测量中的经验数据来了解是否正在使用应用程序,但是应该由业务部门决定是否注销应用程序。

Identifying services and resources that should be retired is business specific. You can use empirical data from your application’s telemetry measurements to know if an application is being used, but the decision to retire applications should be made by the business.

不需要时,应自动清除基础架构组件(例如,VM实例和负载平衡器端点)。一个自动组件清理的例子是Netflix的Janitor Monkey。该公司在一篇博客文章中解释道:

Infrastructure components (e.g., VM instances and load balancer endpoints) should be automatically cleaned up when not needed. One example of automatic component cleanup is Netflix’s Janitor Monkey. The company explains in a blog post:

Janitor Monkey通过对其应用一组规则来确定资源是否应该是被清理的候选者。如果每一个规则都确定资源是清理候选者,则Janitor Monkey会标记资源并安排时间来清理它。

Janitor Monkey determines whether a resource should be a cleanup candidate by applying a set of rules on it. If any of the rules determines that the resource is a cleanup candidate, Janitor Monkey marks the resource and schedules a time to clean it up.

所有这些应用阶段的目标是让基础设施和软件来管理,而不是传统的由人来管理。我们采用协调模式与组件元数据相结合,不再编写由人工运行的自动化脚本,而是根据当前上下文不断运行并根据需要在高级别上执行的操作做出决策。

The goal in all of these application stages is to have infrastructure and software manage the aspects that would traditionally be managed by a human. Instead of writing automation scripts that run once by a human, we employ the reconciler pattern combined with component metadata to constantly run and make decisions about actions that need to be taken on a high level based on current context.

应用程序生命周期阶段不是应用程序依赖于基础设施的唯一方面。还有一些基础服务,每个阶段的应用程序都依赖于基础设施。我们将在下一节中介绍一些为应用程序提供的支持服务和API基础结构。

Application life cycle stages are not the only aspects where applications depend on infrastructure. There are also some fundamental services for which applications in every stage will depend on infrastructure. We will look at some of the supporting services and APIs infrastructure provides to applications in the next section.

おすすめ

転載: www.cnblogs.com/langshiquan/p/10960854.html