インターネット ビジネスの継続的な発展に伴い、単一のサービス ノードではもはや高い同時実行性と高可用性のニーズを満たすことができなくなりました。したがって、分散アーキテクチャは現代の開発手法となり、習得しなければならないテクノロジーの 1 つとなっています。
分散アーキテクチャでは、サービス ガバナンスは複雑かつ重要な問題です。サービスの高可用性、品質、パフォーマンスを保証するために、サービス ガバナンスはサービスの登録、検出、負荷分散、フェイルオーバー、監視などの複数の機能を実装する必要があります。 Zookeeper と Dubbo は分散サービス ガバナンスのリーダーであり、連携してサービス ガバナンスのプロセス全体を実現できます。
この記事では、Zookeeper と Dubbo を使用して、Beego フレームワークに分散サービス ガバナンスを実装する方法を紹介します。
1. Zookeeper
Zookeeper はオープンソースの分散調整サービスで、元々は Yahoo によって開発され、現在では Apache のトップレベル プロジェクトとなっています。多数のノードを管理し、それらを調整、同期、監視して、高可用性とサービス検出機能を実現できます。
まず、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」が返されます。
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 通信プロトコルをサポートします。
まず、Dubbo フレームワークをダウンロードする必要があります。公式 Web サイトは https://github.com/apache/dubbo-go です。解凍後、 dubbo /go-server/demo ディレクトリに入り、次のコマンドを使用して Dubbo を起動します。
go run main.go
起動後、Dubbo の Web 管理コンソールを通じて 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" ] }
分散サービス ガバナンスは複雑かつ重要な問題です。Zookeeper と Dubbo を Beego フレームワークに統合することで、サービスの登録、検出、負荷分散、フェイルオーバーなどの機能を実現し、分散システムの信頼性と高可用性を向上させることができます。強力な保護を提供します。この記事で提供されているコード例を学習して使用し、分散サービス ガバナンスのコア テクノロジを習得し、実際のプロジェクトに適用することができます。
以上がZookeeper と Dubbo を使用して Beego に分散サービス ガバナンスを実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。