ホームページ バックエンド開発 Golang Zookeeper と Dubbo を使用して Beego に分散サービス ガバナンスを実装する

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

Jun 22, 2023 am 08:43 AM
dubbo zookeeper beego

インターネット ビジネスの継続的な発展に伴い、単一のサービス ノードではもはや高い同時実行性と高可用性のニーズを満たすことができなくなりました。したがって、分散アーキテクチャは現代の開発手法となり、習得しなければならないテクノロジーの 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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Prometheus と Grafana を使用して Beego で監視と警報を実装する Prometheus と Grafana を使用して Beego で監視と警報を実装する Jun 22, 2023 am 09:06 AM

クラウド コンピューティングとマイクロサービスの台頭により、アプリケーションの複雑さは増大しています。したがって、監視と診断は重要な開発タスクの 1 つになります。この点に関して、Prometheus と Grafana は、開発者がアプリケーションをより適切に監視および分析できるようにする 2 つの人気のあるオープンソース監視および視覚化ツールです。この記事では、Prometheus と Grafana を使用して、Beego フレームワークに監視と警報を実装する方法を説明します。 1. はじめに Beego は、オープンソースの高速開発 Web アプリケーションです。

Google Analytics を使用して Beego の Web サイトデータをカウントする Google Analytics を使用して Beego の Web サイトデータをカウントする Jun 22, 2023 am 09:19 AM

インターネットの急速な発展に伴い、Web アプリケーションの使用がますます一般的になり、Web アプリケーションの使用状況をどのように監視および分析するかが開発者や Web サイト運営者の焦点になっています。 Google Analytics は、Web サイト訪問者の行動を追跡および分析できる強力な Web サイト分析ツールです。この記事では、Beego で Google Analytics を使用して Web サイトのデータを収集する方法を紹介します。 1. Google Analytics アカウントを登録するには、まず次のことを行う必要があります。

SpringBoot+Dubbo+Nacos開発実践チュートリアル SpringBoot+Dubbo+Nacos開発実践チュートリアル Aug 15, 2023 pm 04:49 PM

この記事では、dubbo+nacos+Spring Boot の実際の開発について詳しく説明する例を書きます。この記事では理論的な知識はあまり取り上げませんが、dubbo を nacos と統合して開発環境を迅速に構築する方法を説明する最も簡単な例を書きます。

テクノロジーの世界を探索できる、厳選された 5 つの Go 言語オープンソース プロジェクト テクノロジーの世界を探索できる、厳選された 5 つの Go 言語オープンソース プロジェクト Jan 30, 2024 am 09:08 AM

今日の急速な技術発展の時代では、雨後の筍のようにプログラミング言語が出現しています。多くの注目を集めている言語の 1 つは Go 言語です。Go 言語は、そのシンプルさ、効率性、同時実行の安全性などの機能により多くの開発者に愛されています。 Go 言語は、多くの優れたオープンソース プロジェクトがある強力なエコシステムで知られています。この記事では、厳選された 5 つの Go 言語オープンソース プロジェクトを紹介し、読者を Go 言語オープンソース プロジェクトの世界へ導きます。 KubernetesKubernetes は、自動化されたオープンソースのコンテナ オーケストレーション エンジンです。

Beego でのエラー処理 - アプリケーションのクラッシュを防ぐ Beego でのエラー処理 - アプリケーションのクラッシュを防ぐ Jun 22, 2023 am 11:50 AM

Beego フレームワークでは、エラー処理は非常に重要な部分です。アプリケーションに正しく完全なエラー処理メカニズムが備わっていないと、アプリケーションがクラッシュしたり、正しく実行されなくなる可能性があり、これはプロジェクトとユーザーの両方にとって重要です。非常に深刻な問題。 Beego フレームワークは、これらの問題を回避し、コードをより堅牢で保守しやすくするのに役立つ一連のメカニズムを提供します。この記事では、Beego フレームワークのエラー処理メカニズムを紹介し、それらがエラーの回避にどのように役立つかについて説明します。

Beego での分散調整と管理のための ZooKeeper と Curator の使用 Beego での分散調整と管理のための ZooKeeper と Curator の使用 Jun 22, 2023 pm 09:27 PM

インターネットの急速な発展に伴い、分散システムは多くの企業や組織のインフラストラクチャの 1 つになりました。分散システムが適切に機能するには、調整して管理する必要があります。この点で、ZooKeeper と Curator は使用する価値のある 2 つのツールです。 ZooKeeper は、クラスター内のノード間のステータスとデータを調整するのに役立つ、非常に人気のある分散調整サービスです。 Curator は ZooKeeper のカプセル化です

Beego の Docker と Kubernetes を使用した本番環境のデプロイと管理 Beego の Docker と Kubernetes を使用した本番環境のデプロイと管理 Jun 23, 2023 am 08:58 AM

インターネットの急速な発展に伴い、ますます多くの企業がアプリケーションをクラウド プラットフォームに移行し始めています。 Docker と Kubernetes は、クラウド プラットフォームでのアプリケーションの展開と管理のための 2 つの非常に人気のある強力なツールになりました。 BeegoはGolangで開発されたWebフレームワークで、HTTPルーティング、MVC階層化、ロギング、構成管理、セッション管理などの豊富な機能を提供します。この記事では、Docker と Kub の使用方法について説明します。

Go 言語開発の要点: 5 つの人気のあるフレームワークの推奨事項 Go 言語開発の要点: 5 つの人気のあるフレームワークの推奨事項 Mar 24, 2024 pm 01:15 PM

「Go 言語開発の要点: 5 つの人気フレームワークの推奨事項」 高速で効率的なプログラミング言語として、Go 言語はますます多くの開発者に好まれています。開発効率を向上させ、コード構造を最適化するために、多くの開発者はフレームワークを使用してアプリケーションを迅速に構築することを選択します。 Go 言語の世界には、選択できる優れたフレームワークが数多くあります。この記事では、5 つの人気のある Go 言語フレームワークを紹介し、読者がこれらのフレームワークをよりよく理解して使用できるように、具体的なコード例を示します。 1.GinGin は高速な軽量 Web フレームワークです。

See all articles