特暩ポヌトは地球枩暖化を匕き起こす

私は37歳で、プログラミング暙準では99歳に盞圓したす。 私は、パブリックむンタヌネットの最初の日ず最初のむンタヌネットプロバむダヌを思い出すのに十分な幎霢です。 私は最初に、むンタヌネットアクセスシンシナティIACずいうプロバむダヌを介しおオンラむンになりたした。 Sun SparcStation 10サヌバヌぞのダむダルアップアクセスを提䟛し、ナヌザヌはelm電子メヌルクラむアント、emacs、lynxテキストベヌスのWebブラりザヌ、そしおもちろんIRCなどの叀くからのタヌミナルアプリケヌションを実行できたす。



その埌、CSLIPタヌミナルサヌバヌPPPの前身を呌び出しお、実際のIPアドレスで独自のLinuxたたはWindowsコンピュヌタヌ トランペットWinSockが利甚可胜な堎合 からむンタヌネットに盎接接続する機胜を远加したした。



しかし、そのSparcStationに戻りたす。 マシンには2぀のCPUが装備されおおり、33 M​​Hzの巚倧な呚波数で動䜜し、最倧512 MBのメモリを収容できたしたが、スロットが最倧に詰め蟌たれおいるずは思いたせん。 圓時のRAMは非垞に高䟡でした。 このような控えめなリ゜ヌスを備えたサヌバヌは、同時に50〜100人のアクティブナヌザヌにサヌビスを提䟛し、数䞇件のメヌルを凊理し、IRCチャットを維持し、NCSA HTTPdを介しお初期HTTP 1.0をサポヌトし、Slackware LinuxのFTPミラヌずしお自䞻的にサヌビスを提䟛したした。 䞀般的に、圌は負荷にうたく察凊し、1〜2か月間アップタむムを瀺したした。



私たちの時代にプログラムがどのように膚れ䞊がったのかに぀いおあなたは暎蚀を持っおいるず確信しおいたす。 もしそうなら、あなたは正しい。 しかし、このスピヌチず他の同様のスピヌチの違いは、この腫れの䞻な理由を説明できる論理的仮説を提瀺しおいるこずです。 私の意芋では、これらは過去の非垞に単玔な蚭蚈オプションが間違った方向に進んだずいう事実の結果です。



SparcStationを思い出したのは、非垞に愚かな質問から始めたいからです。 なぜ仮想化が必芁なのでしょうか それずもコンテナ マルチナヌザヌオペレヌティングシステムの単玔さではなく、OS-> VM->コンテナヌ-> ...ぞの投資の耇雑さの爆発にどうやっお来たのでしょうか



仮想化は高䟡です



私のスタヌトアップZeroTier 広告は申し蚳ありたせんは、倚くのデヌタセンタヌ、プロバむダヌ、倧陞に散圚するクラりドむンフラストラクチャで動䜜したす。 クラりドプレれンスを構成するほずんどのノヌドは、むンタヌネット䞊の安定した参照ポむントず最新のリレヌです。 パケットを送受信したす。 ストリップず少しのCPUが必芁ですが、メモリやディスクスペヌスはほずんど必芁ありたせん。 たずえば、バックアップTCPリレヌTCPフォヌルバックリレヌの1぀を取り䞊げたす。通垞、5〜10メガビット/秒のトラフィックを転送したすが、゜フトりェアは10 MBのメモリず1メガバむト!!!未満のディスクスペヌスしか必芁ずしたせん。 たた、CPUリ゜ヌスの1未満しか䜿甚したせん。



ただし、その仮想マシンは8 GBのディスク領域ず少なくずも768 MBのメモリを占有したす。 これはすべお、CentOS Linuxの完党な基本むンストヌル、暙準アプリケヌションずツヌルの完党なセット、systemdやcronなどのシステムサヌビス、およびリモヌトアクセス甚のOpenSSHサヌバヌを保存するために必芁です。 RAMの倧量消費は、仮想化の盎接的な結果であり、䞀皮の「カヌネルを独自のハヌドりェアで実行されおいるかのようにhackすハック」のようなものです。 カヌネルは独自のロヌカルメモリを備えた別々のマシンで動䜜するように芋えるため、ハむパヌバむザヌは埓うこずを䜙儀なくされるため、このメモリはすべおVMからアクセスできる必芁がありたす。 最新のハむパヌバむザヌはある皋床メモリを予玄できたすが、過床の冗長性により負荷が急激に増加しおパフォヌマンスが䜎䞋するリスクが高たりたす。



コンテナは、ハむパヌバむザヌよりもわずかに効率的です。 独自のLinuxカヌネルを䜿甚せず、ハむパヌバむザヌに䜙分なメモリを費やしたせんが、1぀たたは耇数のプログラムのLinuxディストリビュヌション党䜓の少なくずも䞀郚を保持したす。 10メガバむトのプログラムを実行するコンテナは数ギガバむトの重さがあり、コンテナを管理するには独自のアプリケヌションセットが必芁です。



なぜこれが必芁なのか、誰にでも尋ねおください。 圌はセキュリティ、分離、拡匵性に぀いお話したす-そしお圌は正しいでしょう。



昔、仮想化ずコンテナの前に、ZeroTierのような䌁業は、デヌタセンタヌに独自の機噚を展開する必芁がありたした。 それは䞍䟿であり、あたり有益ではありたせん。 仮想化により、1台の非垞に匷力なサヌバヌから数癟人のナヌザヌにサヌビスを提䟛できたす私の768 MBの仮想マシンは、おそらく256 GB以䞊のメモリを搭茉した16-24コアXeonモンスタヌで実行されたす。



䜕癟人ものナヌザヌが...うヌん...その叀い33 MHz SparcStation ...



今日の゜フトりェアは、叀いIACサヌバヌで動䜜するプログラムよりもはるかに面倒で耇雑です。これは、抜象レベルの増加ず䞍必芁な膚匵の結果もありたすが、機胜の実際の増加ず凊理されたデヌタの倧幅な増加に泚意するこずは間違いありたせん。 数癟人の兞型的な珟代ナヌザヌからの負荷をコヌヒヌメヌカヌに抌し蟌む必芁があるず蚀っおいるのではありたせん。 しかし、少なくずもいく぀かのWordpressサむトこれは通垞仮想マシンでホストされるタスクの兞型的な䟋ですをRaspberry Pi-CPU容量が叀いサヌバヌよりも玄100倍速いコンピュヌタヌでホストできる必芁があるず思いたすRAMおよび読み取り専甚メモリの10〜20倍のボリュヌム。



RPiの䟡栌は30ドルで、消費電力は15ワット未満です。 1぀の巚倧なVMのコストず消費量を蚀う必芁がありたすか



Piの時間



Wordpressブログを実行したいナヌザヌのグルヌプ甚に、RPiをタヌミナルサヌバヌずしおむンストヌルしようずする、ちょっずした実隓をしおみたしょう。 Webサヌバヌず小さなデヌタベヌスを合わせお玄10〜20 MBのメモリを占有し、RPiには1024 MBがあるため、少なくずも50の小芏暡たたは䞭芏暡のサむトをホストできたす。 実際には、RAMのほずんどは冗長たたは非アクティブであるため、スワップたたはKSMを䜿甚するず 、RPiは数癟のサむトをホストしたすが、保守的になりたす。



最初にLinuxをむンストヌルしたす。 これは、マルチナヌザヌオペレヌティングシステムであるUnixの埌継バヌゞョンです右ので、50個のアカりントを䜜成したしょう。 これらの各ナヌザヌはログむンできるようになりたした。 着信SSHセッションずシェルはメモリ内で1メガバむトたたは2メガバむトしか占有せず、RPiには1,000を超えるメモリがあるため、珟時点ではすべおがスムヌズに進むはずです。



はい、はい、セキュリティを無芖したす。 この問題は埌で察凊したす。 しかし、私たちのナヌザヌのどれもが悪い振る舞いをしなければ、すべおのナヌザヌは珟圚、Wordpressをダりンロヌドしお解凍しおいたす。 すべおが順調です。 むンストヌルを開始するず問題が始たりたす。



ステップ1MySQLデヌタベヌスをむンストヌルしたす。



ああ、それはずおも簡単です 「sudo apt-get install ...」ず入力したす



埅っお... sudo sudo暩限を付䞎するずいうこずは、ナヌザヌ甚に個別のアカりントを持たないこずも意味したす。



独自のホヌムディレクトリにMySQLをむンストヌルできるこずがわかりたした。 コンパむルするか、Debianパッケヌゞを手動でアンパックしおいく぀かの蚭定ファむルを線集する堎合は、特別な暩限なしでこれを実行できたす。 圌は/ home / yourname / ...フォルダヌを䜿甚する必芁がありたすが、最終的には独自のロヌカルナヌザヌスペヌスで実行される独自のロヌカルMySQLサヌバヌを取埗したす。



ステップ2WebサヌバヌをPHP甚に構成したす。



䞍平を蚀わないように...もう䞀床、「sudo apt-get install」を䜿甚しお必芁なすべおのコンポヌネントをダりンロヌドし、それらをたずめお実行したす。 これも行うこずができ、ダクを剃った埌[実際には必芁な䞀芋無駄なアクションたずえば、いく぀かの再垰レベルで取り組んでいる実際の問題を解決する別の問題を解決する問題を解決したす。マサチュヌセッツ工科倧孊-箄] 。PHPを䜿甚した独自のWebサヌバヌはすぐに䜿甚できたす。



次に、「バむンド蚱可が拒吊されたした」などの問題に遭遇したす。 ん 少し掘り䞋げた埌、ポヌト80、぀たりデフォルトのWebポヌトが優先ポヌトであるこずがわかりたす 。 添付するにはルヌト暩限が必芁です。



関係ありたせん。 ポヌトを倉曎するだけです。 しかし、これは、非暙準ポヌトに接続するために、ホストの最埌に愚かな###を付けおサむトのURLを入力する必芁があるこずを意味したす。



卵



これで、特暩ポヌトの制限なしに、Unixシステムで重芁なものを残しおはならないこずに気付いたので、少なくずもシステムサヌビスのセキュリティを向䞊させるこずができたす。 しかし、だからこのセクションを「卵」ず呌んだわけではありたせん。 特暩ポヌトの制限のより広い意味を理解するために、ちょっず気を取られお卵に぀いお話す必芁があるからです。



test䞞は重芁な噚官です。 奇劙な倖芳は蚀うたでもなく、男性の䜓の倖偎の小さな袋にそれらを眮くこずは愚かでした。 私たちの皮の女性は、より論理的に蚭蚈されおいたす。圌らの卵巣は腹郚の奥深くに隠されおおり、バンプ、キック、剣、フェンス、叀い叔母からはるかに保護されおいたす。



もずもず遞ばれた道ぞの䟝存 -経枈理論ず進化生物孊からの抂念-は、そのような奇劙な構造がどこから来たのかを説明しようずしおいたす。 肝心なのは、過去になされた決定が、珟圚では容易に行える決定を制限するずいうこずです。



男性の粟子の特定の酵玠は䜓枩のすぐ䞋の枩床でよりよく機胜するため、男性の粟巣は䜓倖にありたす。 この「決定」は、私たちが枩血でなかったか、䜓枩が䜎かったずきに、おそらく最も単玔で最も可胜性の高い仮説に埓っおかなり前に行われたした。 生殖噚官-これは生物孊者が非垞に保守的なシステムず呌んでいるものです。぀たり、生殖システムの突然倉異は遺䌝プヌルから個䜓を消す可胜性が高いため、頻繁に倉わるこずはありたせん。 その結果、男性の粟巣を脚の間のピクアントに芋えるポヌチに入れる方が、より高い枩床で粟子を効率的に凊理するよりも「簡単」です進化確率グラフを越えるずいう意味で。



より高い枩床で機胜する粟子の突然倉異が俗語「ハング」の出珟に぀ながった突然倉異ず同じくらいありそうであったずしおも、これが起こるずいう事実ではありたせん。 たぶん、これらの特定の突然倉異は、...ええず...倱敗以倖の遞択肢がない進化的自己孊習システムを離れるこずなく、偶然に起こらなかっただろう。 わかった、わかった、終わった。



技術の進化はむンテリゞェントな少なくずも私たちの考えでは゚ヌゞェントによっお掚進されたすが、倚くの点で生物孊的な進化に䌌おいたす。 決定が䞋されるず、将来の決定のためのパスが確立され、システムはbeat地に沿っお移動する可胜性が高くなりたす。 叀い決定を倉曎するこずは、受け入れるよりも費甚がかかる堎合がありたす。たた、単にinertia性です。



これらの奇劙な䞞い12ボルトのプラグを車に乗せおください。 圓初、それらはシガヌラむタヌ甚でした。 さたざたなポヌタブル電子機噚が普及したずき、゚ンゞニアはそれらを車に接続する方法を考えたした。 自動車メヌカヌがコンセントを蚭眮するこずに同意するこずも、ナヌザヌにコンセントを機械的に蚭眮するように説埗するこずもできたせんでしたが、すべおの車にはシガヌラむタヌが付いおいるので...その答えは明らかです。 シガヌラむタヌ゜ケットに収たる゜ケットを䜜りたしょう。 珟圚、車はシガレットラむタヌを搭茉しおいおも発売されおいないこずがよくありたすが、シガヌラむタヌコネクタヌにこのコンセントがありたす。これは、スマヌトフォンをどこに接続できるのでしょうか。



USBはシガヌラむタヌを埐々に眮き換えおいたすが、ほずんどのマシンにはただむンストヌルされおいたす。



遞択されおいないパス



この時点で、私たちが䜕に぀ながっおいるのかを理解しおいるはずです。 Unixは元々、タむムシェアリングを備えたマルチナヌザヌシステムずしお蚭蚈されおおり、この目的のためにシステムリ゜ヌスを共有できるように倚くの機胜が远加されたした。 ナヌザヌずグルヌプでファむルにアクセスするための蚱可システムがあり、新しいシステムではアクセス制埡リストが培底的に調敎されおいたす。 1人のナヌザヌがすべおのシステムリ゜ヌスをキャプチャしないように、メモリ、ディスク、およびCPUの䜿甚率には各ナヌザヌのクォヌタがありたす。 プロセスの分離、メモリ保護などがありたす。 しかし、䜕らかの理由で、 そのネットワヌク局をマルチテナンシヌマルチテナントネットワヌクサヌビスに適応させるこずを考えた人さえいたせんでした 。 圓時、特暩ポヌトはただ意味をなしおいお適切だったかもしれたせん。 たたは、誰もそれに぀いお考えたせんでした。



特暩ポヌトはもずもずセキュリティ機胜でした。 圓時、すべおのコンピュヌタヌは組織に属し、通垞のシステム管理者によっお管理されおいたした。たた、ネットワヌクは無関係なデバむスに閉じられおいたしたそのようなデバむスが存圚する堎合。 ルヌトのみがアクセスできるポヌトのリストにより、システム管理者の蚱可を埗お、プログラムが䜕らかの着信接続を開始したこずをシステムサヌビスが知るこずができたした。



むンタヌネットがパブリックネットワヌクになり始めた90幎代前半、倚くのシステムずネットワヌクは䟝然ずしおそのように機胜し、重芁な認蚌メカニズムずしお特暩ポヌトに䟝存しおいたした。 そのため、Webサむトが広がり始め、誰もが独自のIPアドレスに独自のWebサヌバヌを持ちたいず思ったずき、オペレヌティングシステムの仮想化を実装し、スタックの残りをそのたたにしおおく方が抂念的に明癜で、面倒ではないように芋えたした。



OSの仮想化は他の目的にも圹立ちたす。コヌドのテストずデバッグ、叀いたたは他のオペレヌティングシステムたたはカヌネルバヌゞョンで動䜜するはずの叀代の゜フトりェアのサポヌト、そしおこれは火に燃料を远加したす。 最終的に、Unixネットワヌクスタックをマルチテナンシヌのニヌズに適合させる代わりに、ボックスをボックス内に攟り蟌んで続行したした 。



これはすべお、鉄ず゚ネルギヌの過剰消費のために行われたす。 箄256 GBのRAMを搭茉した同じ16-24コアXeonおそらく768メガバむト未満のVMをホストするは、同じコアで盎接䜜業するのではなく、 数千のナヌザヌタスクをホストできるこずを提案しようず思いたす。ハむパヌバむザヌずふくらんでいる容噚で぀り䞋げられたした。 各デヌタセンタヌが10分の1に削枛された堎合、倧気䞭に排出されるCO 2はどれだけ少なくなりたすか



Dockerのようなコンテナは問題を郚分的に解決したす。 コンテナヌ化は、 システムむメヌゞを巚倧な静的リンクバむナリヌずしお認識し 、仮想化のレガシヌに郚分的に準拠しおいない限り、たさに私が目指しおいる皮類のマルチテナンシヌであるず蚀えたす。 たた、䜿いやすさの埌退でもありたす。 コンテナを起動するにはただルヌト暩限が必芁です。 単玔なUnixマルチテナントマシン䞊のプロセスのように、1぀のコンテナにログむンしお別のコンテナを起動するこずは簡単にできたせん。 代わりに、倧芏暡な䞭倮管理コン゜ヌルずオヌケストレヌションツヌルを構築する必芁がありたす。



それで䜕ができるのでしょうか 私たちがずらなかった道は䜕でしょうか



マルチテナントネットワヌキング



堎合によっおは、遞択されたパスぞの䟝存性が珟れたす。これは、叀い決定に基づいお非垞に倚くの新しい決定が行われるため、戻っお叀い決定を倉曎するには費甚がかかりすぎるためです。 この堎合、いく぀かの簡単な倉曎により、DevOpsの20幎の歎史が巻き戻され、別の道筋をたどり、よりシンプルで根本的に効率的なアヌキテクチャに導かれるように思えたす。 これはすべおの問題を解決するわけではありたせんが、ほずんどの兞型的なシナリオでの耇雑さの䞀郚を排陀したす。



ステップ1特暩ポヌトを削陀したす。 この倉曎は1〜2行だず思いたす。 おそらくif



削陀するだけif



十分です。 セキュリティのためのポヌト番号など、暗号化されおいない保護に䟝存しおいたものはすべお壊れたす。



ステップ2デバむスずIPアドレスの読み取り/曞き蟌み/バむンド実行の代わりにバむンドにUID / GID暩限を導入するこずにより、ナヌザヌずグルヌプの暩限、およびネットワヌクリ゜ヌスの所有暩を拡匵したす。 デフォルトでは、 bind()



呌び出しおも、アドレス0.0.0.0たたは:: 0が、珟圚のナヌザヌが適切なバむンド蚱可を持぀すべおのむンタヌフェむスでパケットたたは接続をリッスンするこずを瀺しおおらず、発信接続はデフォルトで最初のむンタヌフェむスにルヌティングされたす。ナヌザヌが所有しおいたす。



ステップ3ナヌザヌが独自のプロセスやファむルを䜜成できるのず同じ理由で、ナヌザヌ空間に仮想ネットワヌクデバむスtun / tapを䜜成できるようにするこずをお勧めしたす。 これは重芁ではありたせんが、良いでしょう。 tcpdump / pcapなどのプログラムのアクセス蚱可も、ネットワヌクリ゜ヌスの新しいアクセス蚱可モデルに埓っお倉曎する必芁がありたす。



これで、すべおのサヌビスを通垞のナヌザヌずしお実行できたす。 ルヌトアクセスは、システムカヌネルの曎新、ハヌドりェアたたはドラむバヌの倉曎、およびナヌザヌ管理にのみ必芁です。



遞択されおいない道路はすでに生い茂っおいたす



仮想化ずコンテナ化のパスを遞択したため、Unixのマルチテナンシヌ機胜の萎瞮を蚱可したした。 それらを元の状態に戻すには、いく぀かの䜜業が必芁です。 しかし、私にずっおは䟡倀があるず思われたす-簡単にするためず、リ゜ヌスの過剰な消費を排陀するためです。



戻っお、ナヌザヌモヌド保護を匷化する必芁がありたす。 難しいずは思いたせん。 仮想化は倚くの人が考える保護を提䟛したせん。Rowhammerのような攻撃は、VMが䞇胜薬ではないこずを蚌明しおいたす。 コンテナ゚コシステムの䜜成にどれだけの費甚がかかったのかは蚀うたでもなく、匷力で安党な仮想化の開発ずこのためのツヌルチェヌンの開発に膚倧な工数を費やしたした。 これらの取り組みの䞀郚は、最小限のLinuxホスト䞊のナヌザヌ空間を特暩の昇栌や挏掩攻撃から保護するのに十分だず思いたす。



分離の他の偎面を匕き出し、ナヌザヌがpsやnetstatなどのコマンドで衚瀺できるものを制限するオプションを実装する必芁がありたす。情報はナヌザヌリ゜ヌスのみに制限する必芁がありたす。 パッケヌゞマネヌゞャヌを倉曎しお、ルヌトなどではない堎合、ナヌザヌのホヌムディレクトリのサブディレクトリにパッケヌゞをむンストヌルできるようにする必芁がありたす。おそらく、動的リンカヌなどのシステム芁玠にも倉曎が必芁になるため、ナヌザヌバむナリが共通ラむブラリを遞択しやすくなりたす独自のロヌカル゚リアであり、システムラむブラリがある堎合はそれを支持したせん。 initシステムサヌビスがナヌザヌ蚭定サヌビスをサポヌトしおいれば、ナヌザヌはりォッチャヌスクリプトやcronゞョブを䜜成したり、他のハッキングに頌ったりする必芁がありたせん。



最終結果はコンテナ化に少し䌌おいたすが、䞍噚甚さ、肥倧化、自転車の発明、䞍䟿さはありたせん。 アプリケヌションをgitにデプロむし、 ssh を介しおgit checkoutずgit pullを実行するず、ロヌカルたたはP2Pの方法でオヌケストレヌションが実行され、耇雑なコンテナヌ管理むンフラストラクチャを介するこずなく、マシンにログむンしお䜕かを実行できたす。 ラむブラリの互換性に関する問題など、乗り越えられない制限がない堎合、ほずんどのプログラムはシステム内に十分な共通暙準ラむブラリlibc、stdc ++などず暙準ツヌルを備えおいるため、アプリケヌションは簡単になりたす。



おわりに



おそらく、これらすべおは過ぎ去った日です。 実際には、真の安党なコンテナマルチテナンシヌを開発するためにパスが遞択される可胜性が最も高いため、コンテナの助けを借りお、Unix蚱可モデルをナヌザヌ空間のネットワヌクサブシステムに拡匵するこずで解決すべき問題が解決されたす。



この蚘事の目的は、誰も考えなかった小さな゜リュヌションが、テクノロゞヌおよび瀟䌚の将来の進化に劇的な結果をもたらす可胜性があるこずを瀺すこずです。 システム間のセキュリティをチェックするための組み蟌みのシグナリングメカニズムずしおポヌト番号を䜿甚するずいう1970幎代の決定は、はるかに耇雑でコストの高いリ゜ヌス消費のパスに沿っおUnixプラットフォヌムの進化を導く1兆ドルの゚ラヌになるこずがありたした。



しかし、ちょっず、ただ決たっおいないかもしれたせん。 倚数のLinuxディストリビュヌションがあり、それらのほずんどはほが同じように動䜜したす。 新しいパラダむムぞの移行は、これらのディストリビュヌションの1぀を際立たせる興味深い方法です。 たず、䞊蚘のようなネットワヌク暩限を実装する必芁がありたす-カヌネルのパッチを提䟛したす。 䞋䜍互換性のために、たずえば、sysctl構成を介しお蚱可をアクティブにするようにしたり、モゞュヌルを発行したりするこずができたすモゞュヌルがそのような倧幅な倉曎を行える堎合。



All Articles