分析するまず、自分で実装する場合にどのように設計するかを想像することができます。 Informer は現在 ListWatch メカニズムであり、サーバーはストリーミング List をサポートしていないため、クライアントとサーバーの両方が適応する必要があるのは避けられません。したがって、予備的な方向性は次のようになります。
クライアントの適応は比較的単純であり、サーバー側でそれをどのように実装するかに依然として焦点が当てられています。まず、前回の Stale Read で紹介した以前のリストのロジックを確認しましょう。
新しいバージョンでは、リストの古い読み取りの問題が修正されました。最初の 2 つのケースでは、まず kube-apiserver から Etcd の最新の RV を取得し、WatchCache Store のコンテンツが RV に追いつくのを待ってから、すべてを一度に返します。 つまり、サーバーは最新の完全なデータがすでにあるかどうかを認識し、それに基づいてストリーミング形式でデータを返すことができます。既存のストリーミング API は Watch なので、これに基づいて List 効果をサポートできます。リストのリクエストに基づいて変更してみませんか?リストを変更すると、クライアント側の調整が過度に必要になるためです。 List は単独で使用されることが多いですが、Watch は基本的に Informer で使用されます。 したがって、最終的な作業は、Watch API を使用して List 効果を実現する方法になりますが、データは引き続きストリーミング形式でクライアントに返され、同時に、Informer は ListWatch メソッドを変更して、Watch API のみを使用して以前の効果を実現します。以下の記事では主にサーバーの実装を詳しく紹介し、クライアントの適応部分については簡単に紹介します。 原理Watch API に SendInitialEvents=true パラメータを追加することで、リスト効果をサポートします。 Watch リクエストを受信した後、サーバーは InitEvents としてクライアントに送信するデータを決定します。これらのデータを送信した後、サーバーは、InitEvents が送信されたことをクライアントに通知するサインとして、特定の BOOKMARK イベント (RV が以下の bookmarkAfterRV に対応する特定の注釈を持つ BOOKMARK) をクライアントに送信します。指定された BOOKMARK イベントを受信した後、クライアントは以前に受信したすべての InitEvents を List の結果として処理します。 タイミング図以下はv1.29コードに基づいた分析です。現時点では、v1.29 はまだアルファ状態です。記載されている古いバージョンは 1.27 より前のバージョンを指し、新しいバージョンは v1.29 を指します。表示されるコードが以下の説明と一致しない場合は、コードのバージョンが原因である可能性があります。 写真 WatchCache から始まり、右側の青い 4 つは kube-apiserver の起動時に実行されます。 G1 と G2 は、Etcd からデータを取得し、クライアントの CacheWatcher 入力チャネルにデータを送信するために使用される 2 つの goroutine を表します。
上記のプロセスは、サーバー起動時のデータ処理フローを説明しています。次に、クライアントからのリクエストがあった場合の処理フローを見てみましょう。
2a WatchCache ストアから返されるデータの取得を開始します。このときの処理ロジックは旧バージョンと同じです。ストア内のすべてのデータが返され、次のステップのためにストア データの最大 RV が記録されます。 2b 入力チャネル内のイベントを消費し、その RV が 2a で渡された RV より大きいかどうかを比較します。それが BOOKMARK タイプであり、その RV が 2a で渡された RV と等しく、bookmarkAfterRV イベントが送信されていない場合、この BOOKMARK イベントはリストの終了と見なされ、Annotation: k8s.io/initial-events-end が設定され、最終的にクライアントに送信されます。 これまで、サーバーの主なプロセスが紹介され、クライアント Informer も対応する適応を行いました。 WatchList 機能がオンになっている場合は、完全なデータを取得するために Watch 要求が送信されます。アノテーション k8s.io/initial-events-end を含む BOOKMARK イベントを受信すると、その RV が記録され、この期間中に受信および処理されたオブジェクトがリスト結果として使用されます。最後に、上記の RV をパラメータとして Watch リクエストが再度呼び出されます。このステップからは、Informer の従来の Watch ロジックになります。 データフロー写真 この画像は KEP 3157 ウォッチリストから取得したもので、実際にはタイミング図も含まれています。しかし、本のシーケンス図のタイミング図には、コードと一致しない問題がいくつかあります。したがって、タイミング図はここでは直接使用されず、再描画されます。 上記の 2 つの図を組み合わせると、全体のプロセスを理解できます。上図の a はタイミング図の 2a に対応し、b はタイミング図の 2b に対応し、c はタイミング図の G2.1 に対応します。下部の白い部分はタイミング図のG1のロジック、つまりEtcdからデータを取得することに対応しています。クライアント要求の処理は上から下へ行われ、データの返送は下から上へ行われます。 知らせ上記の処理ロジックには多くの詳細があり、特別な注意が必要です。
要約するこの記事では、WatchList の実装原理とロジックを主に分析し、いくつかの詳細を説明します。詳細については後ほどコミュニティとさらに話し合う予定です。この KEP では、kube-apiserver のメモリ負荷を軽減するための 2 つの変更も導入されています。スペースの都合上、次回の記事で紹介させていただきます。同時に、すべての最適化作業が完了する前と完了した後の効果の比較も示します。乞うご期待〜 |
<<: ガートナー: クラウドネイティブテクノロジーを導入してデジタル変革を加速する方法
絶対的に正しいとか、絶対的に間違っているとかいうものは存在せず、この言葉は決して時代遅れになることは...
SEO は非常に簡単なことだと考えているウェブマスターの友人はたくさんいます。実際、Lian Xin...
sharktech からの最新ニュース: いくつかの新しいサーバー モデルが追加されました。古いハー...
美団と大衆点評の合併は中国インターネット業界で大きな注目を集めている。両者の新会社の評価額は150億...
ウェブサイトのマーケティングとプロモーションのさまざまな方法の中で、電子メールによるプロモーションは...
私の一般的な答えは、電子商取引を行うこと、または SEO 関連サービスを提供することです。前者は S...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています今日、小小...
新浪科技報は4月11日午前、百度がモバイル検索ランキングアルゴリズムの調整を開始し、ウェブサイト運営...
バイトダンスは2か月ごとに本社で社内会議を開催し、そこで張一鳴氏がバイトダンスのさまざまな事業ライン...
第1四半期を振り返ると、医療美容業界は消費アップグレード路線に属し、浸透度が低く成長率が高い段階にあ...
Sanyouyun (uuuvps はどうですか、uuuvps の香港 VPS はどうですか?) こ...
インターネットマーケティングの核心はソフト記事であると言う人もいます。良いソフト記事は、読んだ人に爽...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますみなさんこ...
2011 年には、主要なモバイル アプリケーション ストアが急速に登場し、いくつかのグループに分かれ...
301 リダイレクトは、Web ブラウザに訪問者を特定のページからサイト上の別のページに誘導する場所...