現在、Go 言語の主な応用分野の 1 つは、コンテナ (Docker に代表される)、Kubernetes、Prometheus などを含むクラウド ネイティブ テクノロジーです。後ほど、クラウド ネイティブ テクノロジー スタックの主要テクノロジーを紹介する一連の記事を書く予定です。 過去 2 年間、多くの大企業にとって主要な技術的方向性の 1 つは、アプリケーションをクラウドに移行することでした。このプロセスにおける典型的な誤用は、コンテナを仮想マシンとして使用し、コンテナ内で一連のプロセスを開始することです。ただし、コンテナと仮想マシンのプロセス管理機能には大きな違いがあります。コンテナでも仮想マシンでも、プロセス番号 1 が存在します。仮想マシンでは systemd プロセスであり、コンテナではエントリポイントの起動プロセスです。その後、他のすべてのスレッドはプロセス番号 1 の子プロセス、または子プロセスの子プロセスとなり、これを再帰的に繰り返します。ここでの主な違いは、systemd プロセスがゾンビ プロセスをリサイクルできるかどうかです。より多くのコンテナ技術の専門家とコミュニケーションを取りたい場合は、私の WeChat liyingjiese を追加し、「グループに参加」と記入してください。このグループは、世界中の大手企業のベストプラクティスと業界の最新動向を毎週報告しています。
ゾンビプロセス ゾンビ プロセスといえば、Linux システムにおけるプロセスの状態について簡単に説明します。 ps や top などのコマンドを使用して、システム内のプロセスを表示できます。たとえば、ecs 仮想マシンで ps aux を実行すると、次の出力が得られます。
最初のものは、先ほど説明したプロセス No. 1 systemd であることがわかります。 STAT 列はプロセスのステータスです。ここでのステータスはすべて S に関連していますが、通常は R、D、Z などのステータスもあります。各ステータスの意味を簡単に説明すると次のようになります。
ゾンビプロセスに関しては、ここで議論を続けましょう。通常の使用では、子プロセスを作成するには、通常、親プロセスがシステム コール wait() または waitpid() を介して子プロセスが終了するのを待機し、子プロセスのリソースを再利用する必要があります。この方法に加えて、リサイクルは非同期的に実行することもできます。この方法の基本は、子プロセスが終了した後、親プロセスに SIGCHLD シグナルを送信することです。これに基づいて、親プロセスは子プロセスのリソースをリサイクルするための SIGCHLD シグナル処理関数を登録します。これら 2 つの方法を覚えておいてください。それらについては後で説明します。 ゾンビ プロセスの最大の害は、プロセス番号などのリソースが永続的に占有されることです。システムには最大プロセス数 n の制限があり、プロセス番号 1 から n が占有されると、システムはプロセスとスレッドを作成できなくなります (OS では、プロセスとスレッドは同じデータ構造 task_struct で表されます)。この時点で、ユーザーの直感では、シェルはコマンドを実行できないと感じます。その理由は、シェルコマンド実行の本質は fork だからです。
孤立したプロセス 前述したように、子プロセスが親プロセスより先に終了し、親プロセスが子プロセスの残りのリソースをリサイクルしない場合は、ゾンビ プロセスが生成されます。ここに別の状況があります。親プロセスが子プロセスより先に終了した場合、子プロセスのリソースを誰が再利用するのでしょうか? 親プロセスは子プロセスより先に終了します。この時点で、まだ実行中の子プロセスを一般に孤立プロセスと呼びます。ただし、実際には孤立プロセスの明確な定義はなく、そのステータスは上記で説明したいくつかのプロセス状態のままです。では、孤立プロセスのリソースを誰が回収するのでしょうか?この状況に対応して、Unix 系システムでは、これらの孤立プロセスの親プロセスをプロセス番号 1、つまり systemd プロセスに設定し、systemd は孤立プロセスのリソースを再利用します。 シングルプロセスモデルの本質 上記の 2 つのセクションを読んだ後、仮想マシンまたは完全な OS がゾンビ プロセスを回避する方法がわかるはずです。ただし、コンテナでは、プロセス 1 が一般にエントリ ポイント プロセスになります。コンテナは、ゾンビプロセス処理を回避するために、孤立プロセスの親プロセスをプロセス番号 1 に設定する上記の方法を処理できません。これにより、孤立プロセスなどの異常なシナリオでは、コンテナ内のゾンビプロセスを完全に処理できないというジレンマが発生します。 したがって、コンテナの単一プロセス モデルの本質は、コンテナ内のプロセス 1 には、複数のプロセスや複数のスレッドなどの複雑なシナリオを管理する機能がないことです。これらの複雑な状況をコンテナ内で処理する必要がある場合、開発者はエントリ ポイント プロセスにこの機能を提供する必要があります。これにより、開発者の精神的負担が増大することは間違いありません。これは、一般的なテクノロジーやプラットフォーム フレームワークが望まない恥ずかしい状況です。 回避方法 開発者がエントリポイント プロセスに複数のプロセスを管理する機能を与えることについてのセクション 2 での説明に加えて、これを行うには Kubernetes を使用することをお勧めします。今では誰もコンテナを手動で管理していないと思います。ほとんどの人はコンテナ オーケストレーションおよびスケジューリング ツール Kubernetes に目を向けています (まだ Swarm を使用している人には、できるだけ早く暗闇を捨てて光に参加することをお勧めします :))。 Kubernetes では、複数のコンテナを Pod にオーケストレーションし、同じ Linux NameSpace を共有できます。この技術の本質は、Kubernetes を使用して一時停止イメージを提供することです。詳しく説明すると、一時停止イメージを使用して最初に NameSpace をインスタンス化し、次に他のコンテナーをこの NameSpace に追加して NameSpace の共有を実現します。突然、これにはコンテナと名前空間の技術的な背景が必要であることに気付きました。スペースが限られているため、この技術的な背景についてはご自身で調べていただければ幸いです。あるいは、次の記事でコンテナ技術の本質について論じるつもりです。 では早速、一時停止について紹介しましょう。 Pause は、Kubernetes バージョン 1.16 で導入されたテクノロジーです。 pause を使用するには、次のように、Pod によって作成された yaml で shareProcessNamespace パラメータを true に指定するだけです。
ポッドを作成する:
Pod に接続し、ps を使用してプロセス リストを表示します。
Pod 内のプロセス 1 が /pause になり、他のコンテナのエントリポイント プロセスがプロセス 1 の子プロセスになることがわかります。ここで、問題の核心に迫ります。/pause プロセスは、ゾンビ プロセスを回避するために、どのようにして孤立プロセスの親をプロセス 1 に設定するのでしょうか。ソースコードを見てみましょう。git リポジトリ: pause.c:
35 行目と 13 行目に特に注意してください。これが上で説明した内容です。
SIGCHLD シグナル処理関数の中核は、 while (waitpid(-1, NULL, WNOHANG) > 0) の行です。ここで、WNOHANG パラメータは、親プロセスがブロックせずに直接戻ることを可能にします。 要約する コンテナ化への変革への道のりは非常に長いです。変換プロセス中、多くのビジネス関係者は、思考の慣性によりコンテナを仮想マシンとして使用したいと考えますが、これにより多くの問題が発生する可能性があります。おそらく、より良い実践のために、いくつかのコンテナ設計パターンを検討することができるでしょう。 |
<<: クラウド コンピューティングによる混乱を経験している 3 つのホットな市場はどれですか?
>>: IBM はハイブリッド クラウドでクラウド コンピューティングの状況を変えることができるでしょうか?
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています「六月は花...
2012年1月12日、ドメイン名の個人登録の許可は、ドメイン名業界で常に最も議論されているトピックで...
これまで常に強力であったインターネットトラフィックの考え方は、今後どこに向かうのでしょうか? 201...
40年前、中国のマーケティング業界は新聞やテレビの広告から始まり、広告を出す余裕のあるブランドはほん...
[[349357]]分散システムはスタンドアロンシステムと比べてどのような困難を抱えているのでしょう...
2019年6月、 iQiyiの会員数は1億人を突破し、中国の有料動画市場は正式に「10億人レベル」の...
インターネットの発展に伴い、指数関数的に増加する情報量が流入し続け、インターネットの世界全体がホルモ...
2019 年 11 月 14 日 - エクスペリエンス経済の時代において、オラクルは技術革新にこだわ...
工業情報化部は27日、中国電信と中国聯通にFDDネットワーク規格の4G運用ライセンスを正式に発行した...
タオバオ司法オークション - オークションページ浙江省高級人民法院と淘宝網が共同で立ち上げた「司法オ...
justhost.asiaは、香港データセンターの帯域幅が200Gbpsにアップグレードされたことを...
私は a5 ウェブマスターの Web サイトに記事を送信しましたが、多くのウェブマスターが記事を収集...
Computerworldによると、Googleは来年音声検索技術の開発に注力する予定だ。百度が近年...
Hostyun は、ロサンゼルス KR データセンターにかなりの数のマシンを導入しています。VPS ...
インターネット マーケティングの時代では、Baidu、Google、360 が 3 大検索エンジンで...