著者はCOVID-19救済基金を選択し、 Write forDOnationsプログラムの一環として寄付を受け取りました。

序章

Kubernetes とそれが可能にするマイクロサービスアーキテクチャは、非常に効率的でスケーラブルなシステムを作成できます。 ただし、これらのマイクロサービスの1つでパフォーマンスの問題が発生すると、問題が発生します。 通常、顧客対応サービスからの応答時間がますます長くなっていることに最初に気づきます。 問題は、バックエンドサービスの1つ、または最適な容量を超えているデータベースにある可能性があります。 問題の根本を発見するには、分散トレースを実装する必要があります。

Jaegerは、分散トレースソリューションであり、Cloud NativeComputingFoundationのインキュベーションプロジェクトを卒業しています。 トレースを視覚化するための快適なUI、トレースを収集するための Jaegerサイドカー、およびその他のいくつかのコンポーネントを備えています。 Jaegerのような分散トレースシステムでは、顧客が生成した各イベントのライフサイクルをトレースし、各サービスがそのイベントをどのように処理するかを確認できます。

このチュートリアルでは、非常に小さな分散アプリケーションをKubernetesクラスターにデプロイし、コードのスリープ関数を使用してパフォーマンスラグをシミュレートします。 この問題の根本原因を特定し、各イベントを追跡するには、Jaegerを使用します。 トレースを有効にすると、サービスの動作を観察し、問題を特定するのにどれほど効果的かがわかります。

前提条件

始める前に、次のツールとアカウントが必要になります。

ステップ1—サンプルアプリケーションの構築

Jaegerのトレース機能をテストするために、フロントエンド用とバックエンド用の2つのサービスを使用するサンプルアプリケーションsammy-jaegerをビルドしてデプロイします。 PythonFlaskマイクロフレームワークの両方を使用してビルドします。

私たちのアプリケーションは、フロントエンドを呼び出すたびに値が増加するヒットカウンターになります。 パフォーマンスの問題をシミュレートするために、フロントエンドがGETリクエストをバックエンドに送信するたびに実行されるランダム化されたスリープ関数をコーディングします。 このステップでは、そのアプリケーションをビルドしてデプロイします。 次の手順では、アプリをKubernetesにデプロイし、Jaegerをインストールしてから、それを使用してサービスの問題を追跡します。

まず、プロジェクトディレクトリ構造を作成し、内部をナビゲートしましょう。

  1. mkdir -p ./sammy-jaeger/frontend ./sammy-jaeger/backend && cd ./sammy-jaeger

これで、ルートディレクトリsammy-jaegerと2つのサブディレクトリができました。

output
. ├── backend └── frontend

また、ルートディレクトリ/sammy-jaegerに変更しました。 ここから残りのすべてのコマンドを実行します。

フロントエンドアプリケーションの構築を始めましょう。

フロントエンドアプリケーションの構築

お好みのテキストエディタを使用して、./frontendfrontend.pyという名前の新しいファイルを作成して開きます。

nano ./frontend/frontend.py

次のコードを追加します。 これにより、Flaskがインポートされ、カウンター関数が作成され、HTTPリクエストのルートが1つ定義されます。

./frontend/frontend.py
import os
import requests
from flask import Flask
app = Flask(__name__)

def get_counter(counter_endpoint):
    counter_response = requests.get(counter_endpoint)
    return counter_response.text

def increase_counter(counter_endpoint):
    counter_response = requests.post(counter_endpoint)
    return counter_response.text

@app.route('/')
def hello_world():
    counter_service = os.environ.get('COUNTER_ENDPOINT', default="https://localhost:5000")
    counter_endpoint = f'{counter_service}/api/counter'
    counter = get_counter(counter_endpoint)

    increase_counter(counter_endpoint)

    return f"""Hello, World!

You're visitor number {counter} in here!\n\n"""

3つのモジュールをインポートしています。 osモジュールはオペレーティングシステムと通信します。 requests モジュールは、HTTPリクエストを送信するためのライブラリです。 Flask は、アプリをホストするマイクロフレームワークです。

次に、get_counter()関数とincrease_counter()関数を定義します。これらの関数は、どちらもパラメーターcounter_endpointを受け入れます。 get_counter()は、GETメソッドを使用してバックエンドを呼び出し、現在のカウンター状態を見つけます。 increase_counter()は、POSTメソッドを使用してバックエンドを呼び出し、カウンターをインクリメントします。

次に、ルート/を定義します。これにより、hello_world()という別の関数が呼び出されます。 この関数は、バックエンドポッドのURLとポートを取得し、それを変数に割り当ててから、その変数を最初の2つの関数get_counter()increase_counter()に渡します。バックエンドへのX192X]