不変サーバーとは何ですか?


23

不変のサーバーについては、次のよう質問があります

サーバー(私が得た部分)に関係していることは明らかです。そして不変の文法を消化するだけで、「ミュートすることは不可能」と関係があると思います。その推測が近い場合、私は正確にミュートすることができないものの手掛かりを持っていないだろう(と私はそれがサウンドカードまたは何かに関係しているとは思わない...)。

私の質問

  • (DevOpsのコンテキストで)実際に「不変サーバー」とは何ですか?
  • なぜ使用されるのですか?

4
変異することはできません
エフゲニー

3
@Evgeny:ggggggggggggrrrrrrrrrrrrrrrrrr、私は近くにいましたが、ミュートの推測が完全に間違っていました(私を笑わないでください...)。
Pierre.Vriens


私はとても率直に言ってすみませんが、「不変」を定義するための単純なインターネット検索は面倒ですか?質問はそれよりも大きいと思いますが、推測するのではなく単語の意味を調べることで、まともなスタートを切ることができたかもしれません。
エイドリアン

@Adrianは鈍くても問題ありません(私はESLに苦しんでいるので、私はそれをグーグルで調べて、鈍いことを正確に把握する必要があります)。しかし、あなたはこのmeta.SAの質問を知っているのだろうか?それとは別に、ウィキペディアのような代替手段ではなく、DevOpsの専門家から学びたいと思います。
Pierre.Vriens

回答:


19

不変性とは、コンピューターサイエンスの分野でよく使用される用語であり、一般に「作成後に変更することはできません」という意味です。通常、並列性、同時実行性、およびスレッドセーフティに関して使用されます。

そのトピックの議論は魅力的ですが、一般的にStack Overflowの他の場所で見つけることができます。ここに飛び込む衝動に抵抗しています。重要な概念は「作成後に変更することはできません」です。

Amazonで、WebサービスをMachine Image(AMI-繰り返し再プロビジョニングできるビルド済みのインスタンス)にベイクして展開する場合を想像してください。起動時にレジストリから取得する資格情報を介してバックエンドデータベースに接続します。Splunkなどのログツールにログをダンプします。通常の日常的な操作では、このボックスにsshする理由はありません。そのサービスをスケールアップする必要がある場合は、そのAMIのインスタンスをさらに作成し、ロードバランサーを調整するだけです。スピンダウンすると、単にインスタンスとロードバランサーが破壊されます。

日常の操作では、このボックスに変更する理由はありません。AMIからさらに起動できます。

OSレベルのセキュリティパッチを提供する必要がある場合はどうなりますか?パッチをインストールして新しいAMIをベイクして実行中のすべてのインスタンスを再デプロイするか、既存のイメージにsshしてパッチを更新しますか?ただsshする人がたくさんいます。「不変のアーキテクチャ」の支持者は、そのようなことを可能にすることを提案することでさえ私に怒鳴りました。

不変主義者(そのような言葉がある場合)は、新しいamiを焼くことを主張します。彼らは、これまでマシンにsshする理由をすべて取り除くことを提唱しています。彼らは、リポジトリから設定の詳細を引き出すことにより、そのマシンの起動時に特定のマシン設定を行うべきだと主張しています。これは「ペットではなく牛」の究極の表現です。

不変のアーキテクチャは、マシンイメージの作成の後に変更する理由がないマシン構成に関するものです。何かを変更する必要がある場合は、新しいインスタンスイメージをベイクし、古いものをシャットダウンして、新しいものを表示します。


「古いものをシャットダウンし、新しいものを持ち出します」。または、アーキテクチャで許可されている場合は、新しいものを起動し、ロードバランサーを調整し、古いものをシャットダウンします。そうすれば、ピーク時間の途中であっても、好きなときにいつでも実行できます。:)
ティムマローン

関数型プログラミング(1960年代)からの不変性により、バグ(多くの場合、気にかけられないことが多い)が削減されるだけでなく、同時実行も支援されることが認識されています。
ctrl-alt-delor

オリジナルを焼くのが難しいかもしれない監視エージェントや追加のソフトウェアがここでどのように作用するかについて、この素晴らしい答えに追加することに本当に興味があります。たとえば、パラメータの作成および変更後に新しいマシン環境を検出する必要があるAPM監視ソフトウェア。これをAWSにデプロイするためのSSMと自動化を検討していますが、後でインストールされる可能性のある追加のエージェントを扱う場合、AMI /イメージとの不変についてはほとんど説明していません。
シェルドン

10

クラウドテクノロジーはハードウェアとソフトウェアの境界を変えたため、以前はハードウェアの世界の独占的市民であった多くの技術的運用もソフトウェアの領域の対象となりました。共有コンピューティング環境では、コンピュータなどの古いようであるかもしれない自分自身1が、クラウド技術は、彼らと対話するための便利でお馴染みのメタファーを提供することによって、それらを普及可能性:クラウドのユーザーは予約インスタンス、完全なコンピュータや模倣を古い共有コンピューティング環境は、すべての可能なセットを持っているのに対し、扱いにくい制限と「プログラムをFTPサーバーにアップロードする必要があり、環境X(通常、使用するソフトウェアの10年前のバージョンを使用)で最大60分間実行する」は、以前のユーザーまたは実際のユーザーに馴染みがあるコンピューティングセンターの。

この移行の実際的な結果は、展開手順をソフトウェアアーティファクトで表すことができるようになったことです。(展開手順は、データベース、Webサーバー、またはこのインフラストラクチャに属するものを使用してインフラストラクチャをセットアップする方法と、それらが実行されるネットワークを合わせた指示です。)これらの新しいレンズに合わせて、サーバーの手動メンテナンスはほとんど似ています実動コードの手動パッチ-これはごくまれに望ましいことです。手動メンテナンスでは、実稼働で実際に実行されているシステムとこれらのシステムを説明するコードの間に矛盾が生じる可能性があります。つまり、再現性のない動作や不可能なバグ分析、二重バグ修正、その他の災害を意味します。

不変のサーバーパターンは、我々はプログラムを実行しているの手動メンテナンスを避ける必要がありますそれによれば、上記のマントラのクラウド運用のためだけの転置です。不変のサーバーパターンでは、サーバーを手動で構成する代わりに、この構成を自動化することをお勧めします。

実装フレーバー

不変サーバーパターンの一般的な考え方は非常に明確ですが、実装の微妙な違いがたくさんあります。たとえば、一部のアプローチでは、サーバーをまったく更新せず、代わりに体系的サーバーを置き換えることを提案しています。これは、更新により、展開が複数の異なる時間に開始され、複数の異なる更新プロセスを経たサーバーで構成される状況が生じ、サーバーの不均一なセットが暗示され、サーバーがジョブを処理する方法に微妙な違いが生じる可能性があるためです。2番目の一般的なバリエーションポイントは、サーバーへのリモートアクセスに関する規律です。手動メンテナンスが発生しないことを保証するために、サーバーへの完全なリモート管理アクセスを無効にしたい人もいます。

履歴メモ

私の知る限り、「不変サーバー」という用語はKief Morrisによって一般化されましたが、そのアイデア自体ははるかに古いものです。1999年に、FreeBSD刑務所は、使い捨てコンピューティング環境の構成を完全に自動化するというアイデアをすでに広めました。この手法を説明するこの名前を聞く何年も前に、これが「不変サーバー」パターンの実装を開始した方法です。

CD-ROMに基づく物理的な不変性を装う不変性は、信頼できるコンピューティングシステムを製造するための一般的な手段でもあります。これは不変のサーバーパターンと間違われることはありません。


1自動織機テーブルまたはローラーオルガンをコンピューターとしてカウントしない場合。


1
うわー、もう一つの興味深い説明、merci!今、私は本当にどの答えを承認済みとしてマークするかを決定するのに困っています(その忍耐をお願いします、そして私はこの時点でどの1つを決定するのかはまったく決めていませんが。 。)。
Pierre.Vriens

1
エイベック・プレイザール!–回答を受け入れるまで数日待つことをお勧めします。これにより、ユーザーがより多くの回答を書く可能性が高くなります。
マイケルルバルビエグリューネ

9

不変サーバーとは、変更や修正ができないサーバーです(理想的には更新とセキュリティパッチ以外)。サーバー上のソフトウェアを変更する代わりに、目的のソフトウェアで新しいサーバーをスプールし、古いサーバーを終了します。

この概念は、テスト、開発、およびQAサーバーがすべて同一であることを保証するのに役立ちます。これは、この質問の範囲外の複数の理由で重要です。不変サーバーのもう1つの利点は、古いサーバーにアプリケーションをロールバックできることです。たとえば、本番サーバー1でKを変更する必要があるため、サーバー2をスプールしてKを変更します。10分後に、Kがすぐに修正するのではなく、アプリケーションで何かを壊したことに気付きました。顧客のダウンタイムを引き起こす可能性があるため、トラフィックをサーバー1にリダイレクトし、2の何が問題なのかを見つけます。


うーん、興味深い...これをさらに消化するのに時間が必要です...「質問に対する1つの答えが10の新しい質問をトリガーしますか?」...
Pierre.Vriens

1
すぐに「ロールバック」するという習慣は、しばしば「ブルー/グリーンデプロイメント」と呼ばれます(レッド/ブラックも、誰が呼び出しを行うかによって異なります)。
エフゲニー

@Evgenyと、さらに悪いことに、A / B展開と名付けられ、A / B実験との境界線が曖昧になります。(さらに悪いことに、同じアプリの複数バージョンのこのタイプの展開が機能フラグの代わりにA / B実験を行うためにライブである場合)
-Tensibai

Blue / Green Deploymentsは、サーバー自体ではなく、既存のアプリケーションへの更新のデプロイメント用であると常に言われました。@Evgeny
タートル

はい。サーバー、コンテナ、アプリケーション、その他を入れ替えても、Blue / Greenと呼ぶことができます。ここで独自のQ&Aに値すると思います。答えの中でロールバックを説明した方法は、しばしばB / Gと呼ばれることを指摘したかっただけです。
エフゲニー

6

最高の説明は、(いつものように)Martin FowlerのImmutable Serversに関するblikiの記事にあります

サーバーは、ハードウェアであろうとクラウド内の仮想サーバーであろうと、通常、オペレーティングシステムとアプリケーションが実行されています。

多くの場合、アプリケーションとオペレーティングシステムのコンポーネントは、構成が必要であり、変更を適用する必要があります。たとえば、セキュリティパッチ、アプリケーションの新しいバージョンの展開、構成の変更。

あなたはどんな変化があることを考えると、突然変異サーバーの状態には、この用語は、immutableより多くの意味を作るために開始します。それは何を意味突然変異は、このようなAサーバー上で許可されていません。

多くの場合、サーバーの状態の変更に関与しているのは、バージョンの展開、構成の変更、またはセキュリティパスなどです。その結果、サーバーは期待どおりに機能しなくなります。たとえば、構成の誤りなどにより、アプリケーションが実行されない場合があります。

これが、不変サーバーを作成するためのプラクティスが確立されている理由です。で不変のサーバ、画像サーバはにバンドルされたすべての設定、パッチ、アプリケーションのバージョンで作成されます。サーバ、そのイメージは様々な環境でのサーバーを作成するために使用することができます。

このようなイメージが使用される最初の環境は、イメージが機能するかどうかをテストできる環境です。異常が検出された場合にのみ、そのようなイメージを実稼働環境に昇格させて、そこでサーバーを新しいバージョン(正常に機能することがわかっている)に置き換えることができます。

画像の作成と画像のプロモートのプロセスが自動化されると、非常に失敗に耐えるプロセスが得られます。このプロセスには、人的労力がほとんどかからず、サービスに失敗する可能性が非常に低くなります。

不変サーバーには、たとえばsshサーバーがないなど、「入力」する方法が含まれていません。この場合、サーバーのすべての計測(メトリック、ログ)がメトリックデータベースやログ集約サービスなどの外部のシステムに出荷されることもよくあります。

コンテナー(参照:Docker)には、イメージを作成し、それらを実行中のコンテナーにスポーンするプロセスもあります。これらは、更新された画像に基づいて新しいコンテナに置き換えられることが非常に多く、変更されることはありません。変更を導入して「何かを修正」するためにコンテナに人が入らないことを意味します。


興味深い説明ですが、可能であれば、少しでも変異させて、それが理にかなっている場合は、何らかの形で関連していると思われるもの、つまりシステムの「フラッシュ」について詳しく説明します。私は、だれかを「多かれ少なかれ」誰かに「遊び」させ、(例えば)毎晩何らかの初期状態へのリセットがあることを前もって警告することだと思います。そのようなリセットのための入力は...ええと...私は何を言おうとしていたように聞こえます...正しい:それのために使用することができるような不変のもの。
Pierre.Vriens

2
サーバーを既知の状態(Chef / Puppet / Ansible / etc ...など)に戻すサービスを実行することは、不変サーバーを使用していないことを意味します。en.wikipedia.org/wiki/Promise_theoryは優れていますが、martinfowler.com / bliki / ImmutableServer.htmlはさらに優れています。
エフゲニー

あなたは私を信じていますが、それはむしろ「私に挑戦している」(毎日の質問の制限を見つけようとする)ことです。「30日間で50問しか質問できない」というSEルールもどこかにありませんか?
Pierre.Vriens

0

逆から始めましょう、可変サーバーとは何ですか?

従来、変更可能なサーバーインフラストラクチャは、継続的に変更および更新されます。シェルを保護し、パッケージをアップグレードし、構成し、サービスをインストールし、新しいコードを展開できます。これは、それを変更可能にするものであり、変更または変更できます。

不変のインフラストラクチャは、展開後にサーバーが変更されることのないもう1つのインフラストラクチャパラダイムです。何らかの方法で何かを更新、修正、または修正する必要がある場合、適切な変更を加えた共通イメージから構築された新しいサーバーがプロビジョニングされ、古いサーバーが置き換えられます。検証後、それらは使用され、古いものは廃止されます。

なぜ使用されるのですか? 不変のインフラストラクチャの利点は、インフラストラクチャの一貫性と信頼性の向上、およびよりシンプルで予測可能な展開プロセスです。また、サーバーのクラッシュなどによるダウンタイムなど、可変インフラストラクチャの一般的なサーバーの問題を軽減します。

ただし、包括的な展開の自動化と高速サーバープロビジョニングを介して効率的にプロビジョニングする方法を知る必要があります。

あなたがビットコインをマイニングしていると想像してください。サーバーがクラッシュした場合、ダウンタイムは必要ありません。できるだけ早くバックアップする必要があるため、不変のインフラストラクチャがソリューションとなるはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.