インターネットの急速な発展と普及に伴い、ますます多くの企業や個人がさまざまな Web アプリケーションを開発し、保守し始めています。これらのアプリケーションは通常、運用環境、テスト環境、開発環境などのさまざまな環境にデプロイして実行する必要があります。これらの異なる環境では、アプリケーション構成が異なる場合があり、これらの構成は、ビジネス ニーズやユーザー ニーズに合わせて継続的に調整および更新する必要がある場合があります。したがって、構成管理は非常に重要な課題となっています。
構成管理は、主に構成データを保存、取得、変更する方法を含むデータ管理の一種とみなすことができます。信頼性が高く効率的な構成管理システムを実装するには、etcd や consul などの分散構成管理ツールを使用できます。これらのツールは、高可用性、データの一貫性、耐障害性、複雑な KV ストレージ システムなどの機能を提供し、構成管理を強力にサポートします。
この記事では、Golang の Web フレームワークである Iris Framework を使用して分散構成管理を実装する方法を主に紹介します。 Iris は、MVC モード、ルーティング管理、依存関係注入、およびその他の多くの機能をサポートする、高性能で使いやすい Web フレームワークです。また、構成管理、セッション管理、ロギング操作を容易にする、config、session、logger などのいくつかのパッケージも含まれています。ここでは、Iris を使用して、分散 KV ストア内の構成データを取得および変更し、他のサーバーに更新できるシンプルな構成管理システムを実装します。
まず、Iris と etcd-cli ツールをインストールする必要があります。 Iris は Go 言語の標準ライブラリに依存しているため、最初に Go 言語環境をインストールする必要があります。次に、Go コマンド ライン ツールを使用して Iris をインストールします。
go get -u github.com/kataras/iris
同様に、コマンド ラインで etcd クラスターを管理できるように etcd-cli ツールもインストールする必要があります。バイナリ ファイルをダウンロードして、etcd の公式ソリューションで直接使用できます:
wget https://github.com/etcd-io/etcd/releases/download/v3.5.0/etcd-v3.5.0-linux-amd64.tar.gz tar xzf etcd-v3.5.0-linux-amd64.tar.gz cd etcd-v3.5.0-linux-amd64
次に、etcd クラスターを実行し、キーと値のペアをいくつか追加します。 etcd サービスは、次のコマンドを使用して開始できます:
./etcd --name node1 --initial-advertise-peer-urls http://127.0.0.1:2380 --listen-peer-urls http://127.0.0.1:2380 --listen-client-urls http://127.0.0.1:2379,http://127.0.0.1:4001 --advertise-client-urls http://127.0.0.1:2379,http://127.0.0.1:4001 --initial-cluster-token etcd-cluster-1 --initial-cluster node1=http://127.0.0.1:2380,node2=http://127.0.0.1:2381,node3=http://127.0.0.1:2382 --initial-cluster-state new
ここでは、ノードの 1 つ (node1) をリーダーとして、3 つのノードを含む etcd クラスターを開始しました。ノードはポート 2380 を介して相互に通信し、etcd クライアントはポート 2379 またはポート 4001 を介してノードに接続できます。これらのパラメータの詳細な説明は、etcd 公式ドキュメントに記載されています。
次に、etcd-cli ツールを使用して、いくつかのキーと値のペアを分散ストレージに追加します。たとえば、いくつかの構成データを含む「app_config」という名前のディレクトリを追加できます。
./etcdctl --endpoints http://127.0.0.1:2379 put /app_config/database_url "mysql://root:123456@localhost:3306/test_db"
これにより、データの一部が etcd クラスターに追加されます。ここで、「/app_config/database_url」がキーです。 「mysql://root:123456@localhost:3306/test_db」が値です。このデータはどのノードでもアクセスおよび変更できるため、分散構成管理が可能になります。
これで、Iris フレームワークを使用して構成管理システムの構築を開始できます。まず、プログラム内で Iris フレームワークと etcd ライブラリを参照し、Iris アプリケーションを作成する必要があります。
package main import ( "context" "github.com/coreos/etcd/client" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/logger" "github.com/kataras/iris/v12/middleware/recover" ) var app *iris.Application var etcdEndpoints []string func main() { app = iris.New() app.Use(recover.New()) app.Use(logger.New()) app.Get("/config", getConfigHandler) app.Put("/config", updateConfigHandler) app.Run(iris.Addr(":8080"), iris.WithoutServerError(iris.ErrServerClosed)) }
ここでは、Iris アプリケーションのルーティング ルールを設定します。ここで、「/config」は取得用であり、構成データの API インターフェイスを更新します。また、エラー回復用とログ記録用の 2 つのミドルウェアも使用しました。これらのミドルウェアは、アプリケーションのパフォーマンスと信頼性を最適化するのに役立ちます。
次に、etcd クラスターに接続して構成管理を実行できるように、etcd クライアントを作成する必要があります。次のコードを使用して etcd クライアントを作成できます。
etcdEndpoints = []string{"http://127.0.0.1:2379"} cfg := client.Config{ Endpoints: etcdEndpoints, } etcdClient, err := client.New(cfg) if err != nil { panic(err) }
ここでは、etcd クラスターのアドレスを指定し、client.Config を使用して etcd クライアントを初期化します。 TLS 証明書、ユーザー名、パスワードなどの他の構成オプションを設定することもできます。
これで、getConfigHandler と updateConfigHandler のロジックを実装して、構成データの取得と更新を容易にすることができます。 getConfigHandler の実装は次のとおりです。
func getConfigHandler(ctx iris.Context) { key := ctx.URLParam("key") if key == "" { ctx.StatusCode(iris.StatusBadRequest) ctx.JSON(map[string]string{ "error": "missing key parameter", }) return } api := client.NewKeysAPI(etcdClient) resp, err := api.Get(context.Background(), key, nil) if err != nil { ctx.StatusCode(iris.StatusInternalServerError) ctx.JSON(map[string]string{ "error": err.Error(), }) return } ctx.StatusCode(iris.StatusOK) ctx.JSON(resp.Node.Value) }
ここでは、まず URL パラメーターから取得する構成のキーを取得し、次に etcd の KeysAPI を使用して構成データを取得します。対応するキーが見つからない場合は、エラー情報を含むステータス コード 400 の応答が返されます。データの取得に成功すると、キーに対応する値を含むステータス コード 200 の応答が返されます。
updateConfigHandler の実装は次のとおりです。
func updateConfigHandler(ctx iris.Context) { key := ctx.URLParam("key") value := ctx.URLParam("value") if key == "" || value == "" { ctx.StatusCode(iris.StatusBadRequest) ctx.JSON(map[string]string{ "error": "missing key or value parameter", }) return } api := client.NewKeysAPI(etcdClient) _, err := api.Set(context.Background(), key, value, nil) if err != nil { ctx.StatusCode(iris.StatusInternalServerError) ctx.JSON(map[string]string{ "error": err.Error(), }) return } ctx.StatusCode(iris.StatusOK) ctx.JSON(map[string]string{ "status": "success", }) }
ここでは、更新する構成のキーと値を URL パラメーターから取得します。次に、etcd の KeysAPI を使用して、値を指定されたキーに設定します。更新が成功すると、ステータス コード 200 の応答と「ステータス」キーを含む JSON データが返されます。
最後に、アプリケーションを実行し、curl などのツールを使用して API インターフェイスの応答をテストする必要があります。アプリケーションは次のコマンドを使用して開始できます:
go run main.go
Curl を使用して API インターフェイスをテストできます。たとえば、次のコマンドを使用して構成データを取得できます:
curl http://localhost:8080/config?key=/app_config/database_url
これにより、次の JSON 応答が返されます:
"mysql://root:123456@localhost:3306/test_db"
次のコマンドを使用して構成データを更新することもできます。
curl -X PUT -d "value=postgresql://user:password@localhost/dbname" http://localhost:8080/config?key=/app_config/database_url
これにより、「/app_config/database_url」キーに対応する値が「postgresql://user:password@localhost/dbname」に変更されます。更新が成功すると、次の JSON 応答が返されます:
{"status":"success"}
到这里,我们已经实现了一个简单的分布式配置管理系统,该系统可以方便地获取和修改分布式KV存储中的配置数据。我们使用了Iris框架的路由、中间件和JSON响应等功能,以及etcd的KeysAPI来管理分布式存储。通过这样的方式,我们可以优化我们的应用程序的可靠性和性能,并提供更好的核心功能。
当然,实际情况下,我们需要考虑更多的方面,例如数据的安全性、版本控制、配置发布和回滚等问题。但是,通过使用Iris框架和etcd工具的技术,我们可以更加容易地构建和维护分布式配置管理系统,从而更好地满足业务和用户需求。
以上がGolang の Web フレームワーク Iris フレームワークを使用した分散構成管理の実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。