Zookeeper と Dubbo を使用して Beego に分散サービス ガバナンスを実装する

王林
リリース: 2023-06-22 08:43:50
オリジナル
1147 人が閲覧しました

インターネット ビジネスの継続的な発展に伴い、単一のサービス ノードではもはや高い同時実行性と高可用性のニーズを満たすことができなくなりました。したがって、分散アーキテクチャは現代の開発手法となり、習得しなければならないテクノロジーの 1 つとなっています。

分散アーキテクチャでは、サービス ガバナンスは複雑かつ重要な問題です。サービスの高可用性、品質、パフォーマンスを保証するために、サービス ガバナンスはサービスの登録、検出、負荷分散、フェイルオーバー、監視などの複数の機能を実装する必要があります。 Zookeeper と Dubbo は分散サービス ガバナンスのリーダーであり、連携してサービス ガバナンスのプロセス全体を実現できます。

この記事では、Zookeeper と Dubbo を使用して、Beego フレームワークに分散サービス ガバナンスを実装する方法を紹介します。

1. Zookeeper

Zookeeper はオープンソースの分散調整サービスで、元々は Yahoo によって開発され、現在では Apache のトップレベル プロジェクトとなっています。多数のノードを管理し、それらを調整、同期、監視して、高可用性とサービス検出機能を実現できます。

  1. Zookeeper のインストールと起動

まず、Zookeeper の公式 Web サイト https://zookeeper.apache.org/ から Zookeeper の安定バージョンをダウンロードする必要があります。解凍して、zoo.cfg ファイルを設定します。 Zookeeper をスタンドアロン モードで起動するには、zoo.cfg ファイルに設定の行を追加するだけです:

server.1=localhost:2888:3888
ログイン後にコピー

このうち、1 は Zookeeper クラスター内の番号を表し、localhost:2888:3888 は表します。 IP、ポート、および Zookeeper ノードによって監視されるポート 選択ポート。

次に、次のコマンドを実行して Zookeeper を起動します:

./zkServer.sh start
ログイン後にコピー

次のコマンドを使用して、Zookeeper が正常に起動したかどうかを確認できます:

echo ruok | nc localhost 2181
ログイン後にコピー

Zookeeper が正常に実行されている場合は、起動が成功したことを示す「imok」が返されます。

  1. Zookeeper の操作に ZkGo を使用する

Go 言語では複数の Zookeeper ライブラリから選択できますが、その中でより人気があり安定しているのは ZkGo です。 ZkGo を使用すると、Zookeeper への接続、ノードの作成、ノードの変更の監視などが簡単に行えます。

Go 言語の Beego フレームワークで ZkGo を使用するには、最初に ZkGo 依存関係をインストールする必要があります:

go get github.com/samuel/go-zookeeper/zk
ログイン後にコピー

その後、コード内で Zookeeper ノードを操作できます。例:

package main import ( "fmt" "time" "github.com/samuel/go-zookeeper/zk" ) func main() { // 连接Zookeeper服务器 conn, _, err := zk.Connect([]string{"localhost:2181"}, time.Second*5) if err != nil { panic(err) } defer conn.Close() // 创建一个节点 path, err := conn.Create("/test", []byte("hello world"), 0, zk.WorldACL(zk.PermAll)) if err != nil { panic(err) } fmt.Println("Created znode:", path) // 获取该节点的值 data, _, err := conn.Get(path) if err != nil { panic(err) } fmt.Printf("Get znode %s: %s ", path, data) // 删除该节点 err = conn.Delete(path, -1) if err != nil { panic(err) } fmt.Println("Deleted znode:", path) }
ログイン後にコピー

In 上記の例では、まずzk.Connectメソッドを通じて Zookeeper サーバーに接続し、次にzk.Createメソッドを使用して「」という名前のノードを作成します。 /test」を実行し、ノードデータとして「hello world」の文字列を追加します。次に、zk.Getメソッドを使用して「/test」ノードのデータを取得し、zk.Deleteメソッドを使用してノードを削除します。

2. Dubbo

Dubbo は、高性能分散サービス フレームワークであり、Alibaba のオープンソース プロジェクトの 1 つです。 Dubbo は、サービス登録、検出、負荷分散、フェイルオーバーなどの複数の機能を提供し、複数の RPC 通信プロトコルをサポートします。

  1. Dubbo のインストールと起動

まず、Dubbo フレームワークをダウンロードする必要があります。公式 Web サイトは https://github.com/apache/dubbo-go です。解凍後、 dubbo /go-server/demo ディレクトリに入り、次のコマンドを使用して Dubbo を起動します。

go run main.go
ログイン後にコピー

起動後、Dubbo の Web 管理コンソールを通じて Dubbo の実行ステータスを表示できます。

  1. Dubbo を使用してサービスの登録と呼び出しを行う

Beego フレームワークと Dubbo を統合するには、次のコマンドでインストールできる DubboGo SDK の使用が必要です。

go get github.com/apache/dubbo-go
ログイン後にコピー

DubboGo を使用する SDK は、Dubbo が提供する RPC サービスに簡単にアクセスできます。 Beego フレームワークでは、次のコードを通じて Dubbo によって提供されるサービスを登録して呼び出すことができます:

import ( "github.com/apache/dubbo-go/config" "github.com/apache/dubbo-go/registry" ) // 注册Dubbo服务 func RegisterDubboService() { // 配置Dubbo服务注册中心 config.GetApplicationConfig().Name = "my-application" config.GetProviderConfig().Registry = registry.NewZookeeperRegistry("127.0.0.1:2181") // 注册服务 err := config.RegisterProvider( &config.ServiceConfig{ InterfaceName: "org.apache.dubbo.DemoService", Protocol: "dubbo", Ip: "127.0.0.1", Port: 20880, MethodConfigs: []*config.MethodConfig{ &config.MethodConfig{ Name: "SayHello", }, }, Registry: config.GetProviderConfig().Registry, }, new(DemoServiceImpl), ) if err != nil { panic(err) } } // 调用Dubbo服务 func CallDubboService() { // 配置Dubbo服务发现中心 config.GetConsumerConfig().Registry = registry.NewZookeeperRegistry("127.0.0.1:2181") // 调用服务 reference, err := config.NewReference(&config.ReferenceConfig{ InterfaceName: "org.apache.dubbo.DemoService", Urls: []string{"dubbo://127.0.0.1:20880/org.apache.dubbo.DemoService"}, Registry: config.GetConsumerConfig().Registry, }) if err != nil { panic(err) } demoService := reference.(*DemoService) res, err := demoService.SayHello("Dubbo") if err != nil { panic(err) } fmt.Println(res) }
ログイン後にコピー

上記のコードでは、最初に DubboGo SDK を使用してサービスを登録し、次に DubboGo SDK を使用してサービスを呼び出します。 。サービスを登録するときは、まず Dubbo サービス登録センターを構成し、次にサービスのインターフェイス名、プロトコル、IP アドレス、ポート、メソッド構成、およびその他の情報を定義する必要があります。サービスを呼び出すときは、Dubbo サービス検出センターを構成し、Dubbo によって提供されるサービス URL とインターフェイス名を使用して Dubbo サービス参照を作成する必要があります。

3. Zookeeper と Dubbo の統合

Zookeeper と Dubbo を Beego フレームワークに統合するには、まず Dubbo サービスを登録し、次に Dubbo によって提供されるサービス URL を使用して Dubbo を登録する必要があります。 Zookeeper のノード。これは、次のコードで実現できます。

import ( "github.com/apache/dubbo-go/config" "github.com/apache/dubbo-go/registry" "github.com/samuel/go-zookeeper/zk" ) // 集成Zookeeper和Dubbo func IntegrateZkDubbo() { // 配置Dubbo服务注册中心 config.GetApplicationConfig().Name = "my-application" config.GetProviderConfig().Registry = registry.NewZookeeperRegistry("127.0.0.1:2181") // 注册Dubbo服务 err := config.RegisterProvider( &config.ServiceConfig{ InterfaceName: "org.apache.dubbo.DemoService", Protocol: "dubbo", Ip: "127.0.0.1", Port: 20880, MethodConfigs: []*config.MethodConfig{ &config.MethodConfig{ Name: "SayHello", }, }, Registry: config.GetProviderConfig().Registry, }, new(DemoServiceImpl), ) if err != nil { panic(err) } // 将Dubbo服务URL注册到Zookeeper conn, _, err := zk.Connect([]string{"localhost:2181"}, time.Second*5) if err != nil { panic(err) } defer conn.Close() serviceURL := fmt.Sprintf("dubbo://127.0.0.1:20880/org.apache.dubbo.DemoService?anyhost=true&application=my-application&dubbo=2.0.2&generic=false&interface=org.apache.dubbo.DemoService&loadbalance=random&methods=SayHello&pid=1&side=provider&timeout=1000000") _, err = conn.Create("/dubbo/org.apache.dubbo.DemoService/providers/"+serviceURL, nil, zk.FlagEphemeral, zk.WorldACL(zk.PermAll)) if err != nil { panic(err) } }
ログイン後にコピー

上記のコードでは、最初に DubboGo SDK を使用してサービスを登録し、次に Dubbo サービス URL を取得して、Dubbo サービス URL 情報を Zookeeper に登録します。まずzk.Connectメソッドを使用して Zookeeper サーバーに接続し、次にzk.Createメソッドを使用して「/dubbo/org.apache.dubbo.DemoService」という名前のサービス URL を作成します。 Zookeeper ノードの /providers/service URL"。ノード データは空で、ノード タイプはzk.FlagEphemeralで、これが一時ノードであることを示します。ノードが正常に作成されると、Dubbo サービスが Zookeeper に登録されます。

4. テスト

Beego フレームワークを使用して Zookeeper と Dubbo を統合した後、HTTP リクエストを通じて Dubbo サービスをテストし、サービス ガバナンス機能の実装を検証できます。 Postman などの HTTP ツールを使用して、Dubbo サービス URL を使用して HTTP 要求ヘッダーを構築し、メッセージ本文に要求パラメータを追加して Dubbo サービス呼び出しを開始できます。たとえば、Dubbo サービスの URL が次のとおりであるとします。

dubbo://127.0.0.1:20880/org.apache.dubbo.DemoService?anyhost=true&application=my-application&dubbo=2.0.2&generic=false&interface=org.apache.dubbo.DemoService&loadbalance=random&methods=SayHello&pid=1&side=provider&timeout=1000000
ログイン後にコピー

Postman を使用して Dubbo サービス呼び出しをシミュレートする場合、HTTP リクエスト本文に次のパラメーターを追加できます (Content-Type は application/json)。 ##

{ "methodName": "SayHello", "parameterTypes": [ "java.lang.String" ], "arguments": [ "Dubbo" ] }
ログイン後にコピー
HTTP リクエストを送信すると、サービスの呼び出し結果を取得できます。

要約

分散サービス ガバナンスは複雑かつ重要な問題です。Zookeeper と Dubbo を Beego フレームワークに統合することで、サービスの登録、検出、負荷分散、フェイルオーバーなどの機能を実現し、分散システムの信頼性と高可用性を向上させることができます。強力な保護を提供します。この記事で提供されているコード例を学習して使用し、分散サービス ガバナンスのコア テクノロジを習得し、実際のプロジェクトに適用することができます。

以上がZookeeper と Dubbo を使用して Beego に分散サービス ガバナンスを実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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