Golang の Web フレームワーク Iris フレームワークを使用した分散構成管理の実装
インターネットの急速な発展と普及に伴い、ますます多くの企業や個人がさまざまな 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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Go ではファイルを安全に読み書きすることが重要です。ガイドラインには以下が含まれます。 ファイル権限の確認 遅延を使用してファイルを閉じる ファイル パスの検証 コンテキスト タイムアウトの使用 これらのガイドラインに従うことで、データのセキュリティとアプリケーションの堅牢性が確保されます。

Go データベース接続の接続プーリングを構成するにはどうすればよいですか?データベース接続を作成するには、database/sql パッケージの DB タイプを使用します。同時接続の最大数を制御するには、MaxOpenConns を設定します。アイドル状態の接続の最大数を設定するには、ConnMaxLifetime を設定します。

GoLang フレームワークと Go フレームワークの違いは、内部アーキテクチャと外部機能に反映されています。 GoLang フレームワークは Go 標準ライブラリに基づいてその機能を拡張していますが、Go フレームワークは特定の目的を達成するための独立したライブラリで構成されています。 GoLang フレームワークはより柔軟であり、Go フレームワークは使いやすいです。 GoLang フレームワークはパフォーマンスの点でわずかに優れており、Go フレームワークはよりスケーラブルです。ケース: gin-gonic (Go フレームワーク) は REST API の構築に使用され、Echo (GoLang フレームワーク) は Web アプリケーションの構築に使用されます。

JSON データは、gjson ライブラリまたは json.Unmarshal 関数を使用して MySQL データベースに保存できます。 gjson ライブラリは、JSON フィールドを解析するための便利なメソッドを提供します。json.Unmarshal 関数には、JSON データをアンマーシャリングするためのターゲット型ポインターが必要です。どちらの方法でも、SQL ステートメントを準備し、データをデータベースに永続化するために挿入操作を実行する必要があります。

ベスト プラクティス: 明確に定義されたエラー タイプ (エラー パッケージ) を使用してカスタム エラーを作成する 詳細を提供する エラーを適切にログに記録する エラーを正しく伝播し、非表示または抑制しないようにする コンテキストを追加するために必要に応じてエラーをラップする

FindStringSubmatch 関数は、正規表現に一致する最初の部分文字列を検索します。この関数は、最初の要素が一致した文字列全体で、後続の要素が個々の部分文字列である、一致する部分文字列を含むスライスを返します。コード例: regexp.FindStringSubmatch(text,pattern) は、一致する部分文字列のスライスを返します。実際のケース: 電子メール アドレスのドメイン名を照合するために使用できます。たとえば、email:="user@example.com", pattern:=@([^\s]+)$ を使用してドメイン名を照合します。 [1]。

Go フレームワークで一般的なセキュリティ問題に対処する方法 Web 開発で Go フレームワークが広く採用されているため、そのセキュリティを確保することが重要です。以下は、一般的なセキュリティ問題を解決するための実践的なガイドであり、サンプル コードも含まれています。 1. SQL インジェクション SQL インジェクション攻撃を防ぐには、プリペアド ステートメントまたはパラメータ化されたクエリを使用します。例: constquery="SELECT*FROMusersWHEREusername=?"stmt,err:=db.Prepare(query)iferr!=nil{//Handleerror}err=stmt.QueryR

バックエンド学習パス:フロントエンドからバックエンドへの探査の旅は、フロントエンド開発から変わるバックエンド初心者として、すでにNodeJSの基盤を持っています...
