Beego での分散調整と管理のための ZooKeeper と Curator の使用

WBOY
リリース: 2023-06-22 21:27:50
オリジナル
955 人が閲覧しました

インターネットの急速な発展に伴い、分散システムは多くの企業や組織のインフラストラクチャの 1 つになりました。分散システムが適切に機能するには、調整して管理する必要があります。この点で、ZooKeeper と Curator は使用する価値のある 2 つのツールです。

ZooKeeper は、クラスター内のノード間のステータスとデータの調整に役立つ、非常に人気のある分散調整サービスです。 Curator は、ZooKeeper をカプセル化するオープン ソース ライブラリで、ZooKeeper をより便利に使用するのに役立ちます。

この記事では、Beego で分散調整と管理を行うために ZooKeeper と Curator を使用する方法を紹介します。具体的には、次の側面から説明します。

  1. Beego プロジェクトへの Curator 依存関係の導入

Curator を使用する前に、まず Beego プロジェクトにインストールする必要があります。 Curator の依存関係を紹介します。プロジェクトの go.mod ファイルを変更することで、この目標を達成できます。具体的な手順は次のとおりです。

まず、ターミナルを開き、Beego プロジェクトが配置されているパスを入力します。

次に、次のコマンドを実行して go.mod ファイルを開きます:

$ go mod edit -require github.com/apache/curator@v4.2.0
ログイン後にコピー

このコマンドは、Curator のバージョン番号を指定して go.mod ファイルの最後の行に依存関係レコードを追加します。それは導入する必要がある。この例ではバージョン v4.2.0 を選択しましたが、必要に応じて他のバージョンを選択することもできます。

最後に、次のコマンドを実行して Curator の依存関係をダウンロードします。

$ go mod tidy
ログイン後にコピー

このコマンドは、go.mod ファイルに記録されている依存関係情報に基づいて、必要な依存関係パッケージをダウンロードします。

  1. Beego プロジェクトで ZooKeeper クライアントを作成する

Curator 依存関係を導入した後、それを使用して ZooKeeper に接続できるようになります。これを行う前に、Beego プロジェクトで ZooKeeper クライアントを作成する必要があります。具体的な手順は次のとおりです。

まず、Beego プロジェクトのモジュールに、たとえば「zk_client.go」という名前の新しいファイルを作成します。

このファイルでは、Curator の関連パッケージをインポートし、グローバル ZooKeeper クライアント変数を定義する必要があります。コードは次のとおりです:

package main import ( "fmt" "github.com/apache/curator-go/curator" ) var zkClient curator.CuratorFramework
ログイン後にコピー

ZooKeeper クライアント変数を定義した後、When Beego プロジェクトが開始されるので、初期化します。具体的には、次のコードを Beego プロジェクトの main 関数に追加できます。

func main() { // 启动ZooKeeper客户端 err := initZKClient() if err != nil { panic(err) } // 启动Beego服务 beego.Run() } func initZKClient() error { // 创建ZooKeeper客户端配置对象 config := &curator.Config{ Retry: &curator.RetryPolicy{ MaxRetry: 3, SleepTime: time.Second, }, Namespace: "myapp", } // 创建ZooKeeper客户端 client, err := curator.NewClient([]string{"127.0.0.1:2181"}, config) if err != nil { return err } // 启动ZooKeeper客户端 client.Start() // 等待ZooKeeper客户端连接成功 if ok := client.WaitForConnection(curator.DefaultTimeout); !ok { return fmt.Errorf("failed to connect to ZooKeeper") } // 设置全局ZooKeeper客户端变量 zkClient = client return nil }
ログイン後にコピー

上記のコードでは、まず「config」という名前の ZooKeeper クライアント構成オブジェクトを定義します。このオブジェクトでは、再試行戦略と ZooKeeper 名前空間を指定します。次に、構成オブジェクトを使用して ZooKeeper クライアントを作成し、起動しました。最後に、クライアントが正常に接続するのを待ち、それを前に定義したグローバル ZooKeeper クライアント変数に割り当てます。

  1. Beego プロジェクトでの ZooKeeper の使用

前のステップで、ZooKeeper クライアントを正常に作成しました。このクライアントを使用して、いくつかの分散調整および管理機能を実装できるようになりました。 ZooKeeper を使用したサンプル コードを次に示します。

3.1 ZooKeeper ノードの作成

次のコードを使用して、ZooKeeper に新しいノードを作成できます:

func createZKNode(path string, data []byte) error { // 创建ZooKeeper节点 _, err := zkClient.Create(). WithMode(curator.PERSISTENT). WithACL(curator.DigestACL("user:password", []byte("rw"))). ForPathWithData(path, data) if err != nil { return err } return nil }
ログイン後にコピー

上記のコードでは、ZooKeeper クライアントの Create メソッドを使用します。新しいノードを作成します。このメソッドは、パスとデータ バイト配列を入力パラメータとして受け取り、新しく作成されたノード パスを返します。さらに、ノードの作成モードと ACL 権限も指定します。

3.2 ZooKeeper ノードのデータを取得する

次のコードを使用して、ZooKeeper ノードのデータを取得できます。

func getZKNodeData(path string) ([]byte, error) { // 从ZooKeeper中获取数据 data, _, err := zkClient.GetData().ForPath(path) if err != nil { return nil, err } return data, nil }
ログイン後にコピー

上記のコードでは、 ZooKeeper クライアントの GetData メソッドを使用して、対応するノードのデータを取得します。このメソッドは入力パラメータとしてノード パスを受け取り、データ バイト配列を返します。

3.3 ZooKeeper ノードのデータを更新する

次のコードを使用して、ZooKeeper ノードのデータを更新できます。

func setZKNodeData(path string, data []byte) error { // 更新ZooKeeper节点的数据 _, err := zkClient.SetData().ForPathWithData(path, data) if err != nil { return err } return nil }
ログイン後にコピー

上記のコードでは、 ZooKeeper クライアントの SetData メソッドを使用して、対応するノードのデータを更新します。このメソッドはノード パスとデータ バイト配列を入力パラメータとして受け取りますが、結果は返しません。

  1. 概要

この記事では、Beego での分散調整と管理に ZooKeeper と Curator を使用する方法を紹介しました。具体的には、Curator 依存関係を導入し、ZooKeeper クライアントを作成し、ZooKeeper クライアントを使用していくつかの分散調整および管理機能を実装しました。この記事が分散システムを構築する必要がある開発者に役立つことを願っています。

以上がBeego での分散調整と管理のための ZooKeeper と Curator の使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!