著者 |タン・リン この記事では、大規模クラスター管理の難しさを解決し、優れた合理的なクラスター スケジューリング システムを設計する Meituan の実践を紹介します。また、Kubernetes に代表されるクラウド ネイティブ テクノロジーを実装する際に Meituan が特に懸念する問題、課題、および対応するプロモーション戦略についても説明します。同時に、この記事では、Meituan のビジネス需要シナリオに対するいくつかの特別なサポートも紹介しています。この記事がクラウド ネイティブ分野に興味のある学生の役に立ち、刺激を与えることができれば幸いです。
導入クラスター スケジューリング システムは、エンタープライズ データ センターで重要な役割を果たします。クラスターのサイズとアプリケーションの数が急増するにつれて、開発者のビジネス上の問題の複雑さが大幅に増加しました。大規模クラスター管理の問題を解決し、安定性を確保し、コストを削減し、効率を向上させる優れた合理的なクラスター スケジューリング システムを設計するにはどうすればよいでしょうか。この記事では、これらの質問に一つずつ答えていきます。 | ※この記事は「新人プログラマー003」のクラウドネイティブ時代の開発者コラムに初掲載されました。 クラスタスケジューリングシステムの概要クラスター スケジューリング システムは、データ センター リソース スケジューリング システムとも呼ばれ、データ センターのリソース管理とタスク スケジューリングの問題を解決するためによく使用されます。データセンターのリソースを有効活用し、リソースの使用率を向上させるとともに、ビジネス関係者に自動化された運用・保守機能を提供して、サービスの運用・保守管理コストを削減することを目標としています。業界でよく知られているクラスター スケジューリング システムには、オープン ソースの OpenStack、YARN、Mesos、Kubernetes のほか、Google の Borg、Microsoft の Apollo、Baidu の Matrix、Alibaba の Fuxi、ASI などの有名なインターネット企業のシステムもあります。さまざまなインターネット企業の中核となる IaaS インフラストラクチャとして、クラスター スケジューリング システムは過去 10 年間で複数のアーキテクチャ上の進化を遂げてきました。ビジネスがモノリシックアーキテクチャから SOA (サービス指向アーキテクチャ) やマイクロサービスの開発へと進化するにつれ、基盤となる IaaS 機能も物理マシンのベアメタル時代からコンテナ時代へと徐々に移行してきました。私たちが対処しなければならない中核的な問題は進化の過程で変化していませんが、クラスターのサイズとアプリケーションの数の急速な拡大により、問題の複雑さも指数関数的に増加しています。この記事では、大規模クラスタ管理の課題とクラスタ スケジューリング システムの設計思想について説明します。 Meituan のクラスター スケジューリング システムの実装を例に、複数のクラスターの統合スケジューリング サービスの作成、リソース使用率の継続的な改善、PaaS コンポーネントを強化する Kubernetes エンジン サービスの提供、ビジネス向けのより優れたコンピューティング サービス エクスペリエンスの提供など、一連のクラウド ネイティブ プラクティスについて説明します。 大規模クラスターの管理の課題ご存知のとおり、ビジネスの急速な成長により、サーバーの規模とデータセンターの数が急増しました。開発者にとって、大規模クラスタ スケジューリング システムのビジネス シナリオでは、解決しなければならない問題が 2 つあります。
大規模クラスターの運用における課題上記 2 つの問題を実際の運用環境で解決するためには、さらに次の 4 つの大規模クラスターの運用および管理の課題に分類できます。
クラスタスケジューリングシステムを設計する際のトレードオフ上記の課題に対処するには、優れたクラスター スケジューラが重要な役割を果たします。しかし、現実には完璧なシステムは存在しません。したがって、クラスター スケジューリング システムを設計するときは、実際のシナリオに基づいていくつかの矛盾の間でトレードオフを行う必要があります。
現在、業界におけるクラスタ スケジューリング システムは、アーキテクチャによって、単一型スケジューラ、2 レベル スケジューラ、共有状態スケジューラ、分散スケジューラ、ハイブリッド スケジューラの 5 つの異なるアーキテクチャに分類できます (下の図 1 を参照)。各アーキテクチャは、各シナリオのニーズに基づいて異なる選択を行い、絶対的に良い、または悪いというものはありません。 図 1 クラスタ スケジューリング システム アーキテクチャの分類 (Malte Schwarzkopf - クラスタ スケジューラ アーキテクチャの進化より)
したがって、スケジューリング システムの品質を評価する方法は、主に実際のスケジューリング シナリオによって異なります。業界で最も広く使用されているシステムである YARN と Kubernetes を例に挙げると、どちらのシステムも一般的なリソース スケジューラですが、実際には YARN は短いタスクを処理するオフライン バッチに重点を置いているのに対し、Kubernetes はオンラインで長時間実行されるサービスに重点を置いています。アーキテクチャ設計と機能の違い ( Kubernetes はモノリシック スケジューラですが、YARN は 2 レベル スケジューラです) に加えて、両者には設計哲学と視点も異なります。 YARN はよりタスクに重点を置き、リソースの再利用に注意を払い、リモート データの複数のコピーを回避します。その目標は、より低コストかつより高速にタスクを実行することです。 Kubernetes は、サービス品質の確保を目的として、サービス ステータス、ピーク シフト、サービス プロファイリング、リソースの分離に重点を置いています。 美団のクラスターディスパッチシステムの進化コンテナ化の実装プロセスにおいて、Meituan はビジネス シナリオの要件に基づいて、クラスター スケジューリング システムのコア エンジンを OpenStack から Kubernetes に変換し、2019 年末までにオンライン ビジネスのコンテナ化カバレッジを 98% 超えるという目標を達成しました。ただし、リソース使用率が低い、運用および保守コストが高いなどの問題がまだ残っています。
そこで、クラスタースケジューリングシステムのクラウドネイティブ化を開始することにしました。マルチクラスター管理と自動化された運用および保守機能を備え、スケジューリング戦略の推奨とセルフサービス構成をサポートし、クラウドネイティブの基盤拡張機能を提供し、アプリケーション サービスの品質を確保しながらリソース使用率を向上させる、大規模で高可用性のスケジューリング システムを構築します。中核となる業務は、安定性の維持、コストの削減、効率性の向上という3つの主要な方向性を軸にディスパッチシステムを構築することです。
図2 Meituanクラスタスケジューリングシステムアーキテクチャ 最後に、Meituan クラスター スケジューリング システム アーキテクチャは、分野に応じて、スケジューリング プラットフォーム レイヤー、スケジューリング ストラテジー レイヤー、およびスケジューリング エンジン レイヤーの 3 つのレイヤーに分かれています (上記の図 2 を参照)。
運用の洗練と製品機能のブラッシュアップにより、Meituanの約100万のコンテナ/仮想マシンインスタンスの管理を一元化し、一方でリソース利用率を業界平均から一流レベルに向上させ、PaaSコンポーネントのコンテナ化とクラウドネイティブ実装もサポートしています。 複数のクラスタの統合スケジューリング: データセンターのリソース利用率の向上クラスター スケジューリング システムの品質を評価する場合、リソース使用率は最も重要な指標の 1 つです。そのため、2019年にコンテナ化は完了しましたが、コンテナ化は目的ではなく、あくまで手段に過ぎません。私たちの目標は、VM テクノロジー スタックからコンテナ テクノロジー スタックに切り替えることで、ユーザーのコンピューティング コストを全面的に削減するなど、ユーザーにさらなるメリットをもたらすことです。リソース使用率の向上は、クラスター内の個々のホット ホストによって制限されます。容量が拡張されると、ビジネス コンテナーがホット ホストに拡張される可能性があり、TP95 時間などのビジネス パフォーマンス指標が変動します。その結果、業界の他の企業と同様に、サービス品質を確保するにはリソースの冗長性を高めるしかありません。その理由は、Kubernetes スケジューリング エンジンの割り当て方法が、単純に Request/Limit Quota (Kubernetes がコンテナに対してユーザーが適用するリソース クォータとして、コンテナに対するリクエスト値 Request と制約値 Limit を設定する) を考慮しており、静的なリソース割り当てとなっているためです。その結果、異なるホストに同じ量のリソースが割り当てられているにもかかわらず、ホストのリソース使用率はサービスの違いにより大きく異なります。学界と産業界では、リソース利用効率とアプリケーション サービス品質の矛盾を解決するために、一般的に 2 つの方法が使用されています。最初の方法は、効率的なタスク スケジューラを使用してグローバルな観点から解決することです。 2 番目の方法は、単一マシンのリソース管理を通じてアプリケーション間のリソース分離を強化することです。どちらの方法を使用する場合でも、クラスターの状態を完全に把握する必要があるため、次の 3 つのことを行いました。
図3 クラスタフェデレーションV3アーキテクチャ クラスタ フェデレーション サービスの 3 番目のバージョンは、モジュールに応じてプロキシ レイヤーとワーカー レイヤーに分割され、独立して展開されます。
最終的には、複数のクラスターの統一されたスケジューリングを通じて、静的リソース スケジューリング モデルから動的リソース スケジューリング モデルへの移行を実現し、ホットスポット ホストの割合を減らし、リソースの断片化の割合を減らし、優先度の高いビジネス アプリケーションのサービス品質を確保し、オンライン ビジネス クラスターの平均サーバー CPU 使用率を 10 パーセント ポイント向上させました。クラスター リソースの平均使用率は、次のように計算されます: Sum(nodeA.cpu.現在使用されているコア数 + nodeB.cpu.現在使用されているコア数 + xxx) / Sum(nodeA.cpu.合計コア数 + nodeB.cpu.合計コア数 + xxx)。計算は 1 分ごとに 1 ポイントずつ行われ、その日のすべての値が平均化されます。 スケジューリングエンジンサービス:PaaSサービスのクラウドネイティブ実装を実現クラスター スケジューリング システムは、リソース スケジューリングの問題を解決するだけでなく、コンピューティング リソースのサービス使用の問題も解決します。書籍「Google のソフトウェア エンジニアリング」で述べられているように、Compute as a Service の主要コンポーネントの 1 つであるクラスタ スケジューリング システムは、リソース スケジューリング (物理マシンの分解から CPU/Mem などのリソース ディメンションまで) とリソース競合 ( 「ノイジー ネイバー」の解決) だけでなく、アプリケーション管理 (自動インスタンス展開、環境監視、例外処理、サービス インスタンス数の確保、ビジネスに必要なリソース量の決定、さまざまな種類のサービスなど) も解決する必要があります。さらに、アプリケーション管理は、ビジネス開発と運用の効率、サービスの災害復旧効果に直接影響するため、ある程度、リソースのスケジュール設定よりも重要です。結局のところ、インターネットの人件費は機械費よりも高いのです。複雑なステートフル アプリケーションのコンテナ化は、業界では常に難しい問題となっています。これは、さまざまなシナリオの分散システムでは通常、独自のステート マシンが維持されるためです。アプリケーション システムを拡張、縮小、またはアップグレードする場合、既存のインスタンス サービスの可用性とそれらの間の接続性をどのように確保するかは、ステートレス アプリケーションよりもはるかに複雑で困難な問題です。すべてのステートレス サービスをコンテナ化しましたが、優れたクラスター スケジューリング システムの価値はまだ十分には実現されていません。コンピューティング リソースを適切に管理するには、サービスの状態を管理し、リソースとサービスを分離し、サービスの回復力を向上させる必要がありますが、これは Kubernetes エンジンが優れている点でもあります。 Meituan の最適化およびカスタマイズされた Kubernetes バージョンに基づいて、Meituan Kubernetes Engine Service MKE を作成しました。
図4 Meituan Kubernetes Engineのサービススケジューリングとオーケストレーションフレームワーク クラウド ネイティブの実装を推進する中で、広く関心を集めている疑問は、「Kubernetes クラウド ネイティブ アプローチに基づいてステートフル アプリケーションを管理することと、管理プラットフォームを独自に構築することの違いは何か?」ということです。この問題については、問題の根本的な原因である保守性を考慮する必要があります。
将来の展望: クラウドネイティブ オペレーティング システムの構築クラウドネイティブ時代のクラスタ管理は、これまでのハードウェアやリソースなどを管理する機能から、アプリケーション中心のクラウドネイティブオペレーティングシステムへと進化していくと考えています。この目標を達成するために、Meituan のクラスターディスパッチシステムは次の側面に取り組む必要があります。
要約するMeituan のクラスター スケジューリング システムを設計する際、全体として適切性の原則に従いました。基本的なビジネスニーズを満たし、システムの安定性を確保した後、アーキテクチャを段階的に改善し、パフォーマンスを強化し、機能を充実させました。したがって、私たちは次のことを選択しました。
今後も、同じロジックに基づいて Meituan のクラスター スケジューリング システムを最適化および反復し、アプリケーション中心のクラウド ネイティブ オペレーティング システムへと完全に変革していきます。 著者について美団基礎研究開発プラットフォーム/基礎技術部の Tan Lin 氏。 |
<<: Kubernetes での Nginx Ingress の理解
>>: クラウド移行が成功した後の企業にとっての6つのメリット
網易科技ニュース、4月15日。本日、「中国商務日報」は、Qunar.comがBaidu、Hillho...
weservit は 2008 年にオランダで設立されました。自社設備をすべて備えた正式に登録された...
クラウド コンピューティングの概念は比較的抽象的かもしれません。一般的に言えば、クラウド コンピュー...
ビジネスをクラウドに移行することは良いことですが、企業は慎重に進めなければなりません。組織が複数のワ...
エコノミック・ボイスによると、リベート・ウェブサイトはCPS電子商取引促進計画に基づくビジネスモデル...
iwstack は、KVM ベースの 384M メモリ、10G ハード ディスク、1T トラフィック...
今から11月12日まで、zji(つまり、2011年に設立されたWeixiang Hostingですが...
Limewave は、オリジナルの Intel シリーズの VPS に AMD Ryzen 9 39...
タオバオを使い始めて5年が経ち、販売者として1年以上になります。徐々に、Taobao でビジネスを行...
インターネットの誕生から、ナビゲーションサイト、検索エンジン、コミュニティ、ポータル、フォーラム、ニ...
概要kube-scheduler とは何ですか? Kubernetes クラスターのコア コンポーネ...
[[346602]]導入理論計算機科学において、CAP 定理 (ブリューワーの定理とも呼ばれる) ...
クラウド ネイティブ開発では、アプリケーションをどこで実行するかではなく、どのように開発するかが重要...
Baidu の製品は常に SEO 担当者から大きな注目を集めています。数か月前、Baidu は Ba...
ウェブサイトの構築においては、フレンドリーなリンクは当然欠かせません。重要なリンクではありませんが、...