著者: 李嘉軍 背景この記事では、Bytedoc 3.0 のクラスター配信に関するコンテンツと、クラウド ネイティブのプラクティスの一部を紹介します。Bytedoc 3.0 とクラウド ネイティブの機能を組み合わせて、ソフトウェア レイヤーの機能と一致し、Bytedoc 3.0 の「弾力性」機能を最大限に活用する、すぐに使用できるクラスターをユーザーに提供する方法について説明します。 問題点データベース サービスを使用するのは、ユーザー (ビジネス) と DBA (運用と保守) の 2 者です。運用・保守能力を継続的に強化することによってのみ、ユーザーにより良いサービス体験を提供することができます。 ユーザーのニーズ運用および保守要件目標とアイデアターゲット上記の問題を解決するために、Bytedoc 3.0 ソフトウェア レイヤーには関連機能が実装されています。全体的な「弾力性」機能と一致するように、配信層で同様の機能を提供する必要があります。 目標 1:データベースはスレーブを迅速に拡張/回復し、データベースの読み取り機能を数秒で拡張できます。スレーブ インスタンスの拡張は、高度に自動化され、可能な限り高速に行われる必要があります。 目標 2:コンピューティング リソースをオンデマンドで拡張できます。コンピューティング集約型のビジネスでは、コンピューティング リソースを迅速に拡張し、実際の負荷に合わせてユーザーにさらに多くのリソースを割り当てることができます。 目標 3:コンピューティング/ストレージ リソースの使用率を改善し、ビジネス使用コストを削減します。 目標 4:より標準化された配信機能とより高い配信品質により、ユーザーに優れたデータベース サービスを提供します。 実装のアイデア私たちは、Kubernetes をクラウドネイティブにすることで目標を達成します。 Kubernetes は、コンテナ化されたアプリケーションの展開、スケーリング、管理を自動化するための、業界全体にわたるオープンソースのオーケストレーション システムです。簡単に言えば、サービス(この場合は Bytedoc データベース サービス)を体系的にパッケージ化し、実行し、管理することができます。これにより、既存の運用および保守の経験を業界全体のサービス配信/管理ソリューションと組み合わせて、より優れた高品質のデータベース サービスを提供できるようになり、Bytedoc 3.0 の「弾力性」を最大限に活用できるようになります。 ByteDoc 1.0 の時代では、ほとんどのデータベース サービス インスタンスは仮想マシンに直接デプロイされていました。仮想マシン仕様の分割によりリソース割り当てが制限され、マシンリソースをオンデマンドで柔軟に割り当てることができず、ほとんどのマシンリソースがアイドル状態となり、有効活用できない状況となっていました。同時に、コンピューティングとストレージのリソースが制限されていたため、1.0 の自社開発デプロイメント プラットフォームでコンテナ化されたデプロイメントを実装することは非常に困難であり、仮想マシン デプロイメント ソリューションが保持されました。 ByteDoc 3.0 が登場するまでは、データはストレージ層に移動され、サービスを提供する際にはコンピューティング層でのリソース割り当てに重点が置かれ、コンテナ化された展開モデルが実現可能になりました。 Kubernetes のコンテナ展開および管理ソリューションと組み合わせて、コンテナの自動管理操作の大部分を Kubernetes コントローラーに引き渡し、クラスター展開、スレーブ拡張などの ByteDoc 3.0 サービス オーケストレーション プロセスに重点を置き、3.0 の「弾力性」機能を十分に発揮できるようにしました。 クラウドネイティブ実践サービスをクラウドネイティブにすることは、実際には「移行」プロセスであり、既存のサービスをパッケージ化、実行、管理し、Kubernetes によって提供されるソリューションに基づいてそれらを再現することが含まれます。 Kubernetes では、ByteDoc 3.0 クラスターをカスタム リソース (CustomResource) として定義します。データベース サービスを提供すると、実際にリソースが作成されます。 K8s の組み込みワークロード リソースと同様に、カスタム リソースも管理するためのコントローラーが必要です。このタイプのコントローラーは通常、オペレーターと呼ばれます。 したがって、ByteDoc 3.0 クラウドネイティブ実践の鍵は、ByteDoc Operator を構築することです。 Kubernetes の基本概念コンテナ化された展開前述のように、Kubernetes はコンテナのライフサイクル管理を主な役割とするコンテナ オーケストレーション システムであるため、実際のアプリケーションは事前にコンテナ イメージにパッケージ化して、K8s に配信して使用できるようにする必要があります。 ポッドhttps://kubernetes.io/zh/docs/concepts/workloads/pods/ パッケージ化されたコンテナは最終的に Pod 内で実行され、Pod によって管理されます。 Pod は、K8s に組み込まれている最も基本的なリソースの 1 つであり、デプロイメントのための最小のコンピューティング ユニットです。これは、マシン リソースを共有するコンテナーのグループに例えることができます。 例外により Pod (内部のコンテナ) が終了した場合、通常、Pod は削除され、破棄され、高度なワークロードは Pod を「再起動」するのではなく、新しい Pod を作成して置き換えます。 高度なワークロード通常、構築する Operator は Pod を直接作成しません。代わりに、K8s によって提供される高度なワークロード リソースを使用します。これにより、ポッドを作成し、基本的なリソース管理機能を提供できるようになります。 展開: 通常はステートレス サービス用に、指定された数の同一 Pod を維持します。 ステートフルセット: ポッドのグループも維持されます。特別なのは、各ポッドに安定したネットワーク識別子があることです。このシナリオでは、Pod が破棄されて再構築されると、外部ユーザーには Pod が「再起動」されたように見えるため、通常はステートフル サービスに使用されます。 K8sとのやり取り方法Kubernetes コントロール プレーンの中核は API サーバーです。 API サーバーは、ユーザー、クラスターのさまざまな部分、およびクラスター外部のコンポーネントが相互に通信するための HTTP API を提供する役割を担います。 一般的に言えば、K8s とのやり取りは命令型ではなく宣言型で行われます。 # サンプル. ヤム Kubernetes 上の ByteDoc 3.0 アーキテクチャ(ByteDoc クラシック アーキテクチャ、3 つの部分から構成) モンゴス:
設定サーバー:
シャード:
mongo のレプリカ セットの場合、レプリカ セット メンバーは、他のレプリカ セット メンバーと通信するために、ネットワーク識別子 (ホスト、DNS、サービス検出、ヘッドレス サービスなど) を使用して構成に登録する必要があります。そのため、ここでは、StatefulSet によって提供される安定したネットワーク識別子をメンバー名として使用し、データベース インスタンス (対応するポッド) に障害が発生した後、同じ ID でレプリカ セットに追加され、正常にサービスが提供されるようにします。 連邦モデル複数のコンピュータルームのシナリオにおけるアーキテクチャ実際、上記の ByteDoc 3.0 クラスターは、単一のコンピュータ ルーム内のアーキテクチャです。オンライン本番環境では、複数のコンピュータ ルームの災害復旧シナリオも考慮する必要があります。複数のコンピュータ ルームのシナリオでは、3 つのレプリカを持つクラスターが必要であり、各コンピューティング インスタンスは異なるコンピュータ ルームに展開されます。ただし、これらのレプリカは同じレプリケーション セット内にある必要があります。いくつかのクロス K8s ソリューションを参照した後、次のマルチコンピュータ ルーム アーキテクチャを採用しました。 候補となるクロス K8s ソリューションは何ですか?1. コミュニティによって提供される Federation V1 ソリューション (非推奨、後に V2 ソリューションに改善)
2. クラウドネイティブSREチームが提供する一般的なオペレータソリューション
3. MongoDBが提供するCross-K8sソリューション
なぜ今このオプションを選んだのですか?私たちの現在のソリューションは、実際にはコミュニティの Federation ソリューションに似ています。私たちは以下の機能を通じて完全な ByteDoc 3.0 クラスターを構築します。
そのため、この Meta Operator ソリューションを選択し、ワーカー K8s を通じてリソースを作成し、Operator がクラスター構築作業を完了します。 望ましい状態を達成する仕様: では、ByteDoc 演算子は実際にどのようなロジックを実行するのでしょうか? Operator は実際に K8s コントローラーの設計コンセプトを満たしています。つまり、各リソース オブジェクトには予想される状態があり、Operator はリソース オブジェクトを予想される状態に調整する必要があります。この調整プロセスは「調整」と呼ばれます。 詳しく見てみると、ByteDoc クラスターは 3 つのコンポーネントに分かれていることがわかります。 Mongos、構成サーバー、およびシャード コンポーネントがすべて目的の状態に到達し、最終的にコンポーネントが「接続」されれば、クラスター全体も目的の状態に到達します。 したがって、クラスター全体の調整を複数のモジュールの調整に分解できます。それぞれの小さなモジュールが期待される状態に達すると、クラスター全体も期待される状態に達します。 bytedoc 演算子は、おおよそこの設計概念に基づいています。 したがって、当社のオペレーターの一般的なプロセスは次のとおりです。 ステータス管理https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/kubernetes-objects/#object-spec-and-status 名前が示すように、Status はリソース オブジェクトの現在のステータスを保存するために使用されます。ステートマシンや小さなストレージとして使用できます。以下を達成するために使用できます:
状態: リソース テンプレート管理 - Helm前述のように、各 ByteDoc コンポーネントは実際には K8s 組み込みリソースによって管理されます。通常、CR yaml ファイル全体を最初から書き直す必要はありません。 mongos インスタンスの数、CPU、メモリ リソースの制限など、固定テンプレート内の動的パラメータを調整できます。 この時点から、エンジニアリング実装には 2 つの方向があります。
テンプレートのレンダリングとリソースの公開私たちは、Helm (コード) を使用して組み込みリソース ファイルのレンダリングを管理し、オペレーター イメージで公開するという、2 番目の方法のよりエレガントなバージョンを採用しました。私たちは、Helm 標準に従って一連のチャート ファイルを維持しました。 リソースを作成するときは、helm sdk を使用してパラメーターをチャート テンプレートにレンダリングし、実際のリソース yaml を生成して、ワーカー K8s クラスターに公開します。オペレーターは、変更の実行を続行する前に、リソースが完全に準備されるまで待つだけです。 テンプレートのバージョン管理このソリューションのもう 1 つの優れた機能は、さまざまなバージョンのチャート テンプレートを、バージョンに応じて異なるディレクトリに分けて保存できることです。 チャート テンプレートの新しいバージョンをリリースする必要がある場合でも、サービスの古いバージョンは影響を受けません。新しく作成されたサービスでは、新しいバージョンのチャート テンプレートを使用できます。 誤操作の防止K8s の導入により、多くの利便性を備えたクラスターの提供/管理が可能になりますが、実際には諸刃の剣でもあります。ほとんどのクラスターは不注意により誤操作される可能性があり、その結果、データベース サービスの可用性が低下します。 考えられるシナリオは次のとおりです。
ファイナライザー https://kubernetes.io/zh/docs/concepts/overview/working-with-objects/finalizers/ これは、誤って削除されるのを防ぐための K8s のネイティブ ソリューションです。それはマーカーです。削除を伴うすべての操作では、ファイナライザーがあるかどうかを確認する必要があります。
スケールダウンするインスタンスの最小数これは非常に簡単な解決策です。 CR スケーリングの変更を受け取ったら、その数量が 0 より大きいかどうかを確認し、利用可能なインスタンスがない極端なケースを回避するために、スケーリング = 0 を受け入れないでください。 災害復旧能力実用的な効果 |
<<: エッジコンピューティングは単なる誇大宣伝でしょうか?
>>: 2022年のクラウド大手の「エコ革命」第一歩:リベートの削減、転売の抑制、発言権の競争
フォーラムで良い広告アライアンスを見つけるのに苦労しているウェブマスターをたくさん見てきました。ここ...
彼はここにいます。そして、「2022 クラウド インフラストラクチャおよびプラットフォーム サービス...
3月22日、ファーウェイとClusterTech Groupは2019年ファーウェイ中国エコシステム...
SEOの敷居は非常に低いため、SEOに取り組む人は増えています。しかし、本当にSEOが上手な人はごく...
SEO スキルや SEO 知識についてはよく話題になりますが、これらは人気があるように思われるかもし...
BurstNet では、誰もが自分の VPS が本当に平均的だと思っています。ネットワークが非常に悪...
Baidu がまたアップデートされ、また別のウェブマスターグループが落ちました! 前回のアップデート...
マイニングをする人はたくさんいますし、大容量のハードドライブを備えた VPS を必要とする人もたくさ...
人が善人と悪人に分かれるのと同じように、データベース マーケティングも、正確なデータベース マーケテ...
検索エンジンはクリック課金制で、オンライン広告の収益は異常に大きいことは誰もが知っています。しかし、...
CIO の Neil Holden 氏が Halfords グループをさらにクラウドに移行したとき、...
価格検索エンジンは、オンラインショッピングをする消費者層にサービスを提供するウェブサイトです。10年...
マイクロイノベーションの事例を読んで思うこと昨日、Jin Cuodao 氏のマイクロイノベーション事...
すべての SEO 担当者は、「Baidu 11 位」という言葉を多かれ少なかれ知っていると思います。...
A5 チャット アクティビティは、毎週木曜日の午後 2 時 30 分から 4 時まで、admin5 ...