Maison >développement back-end >Golang >Utiliser Zookeeper et Dubbo pour implémenter la gouvernance des services distribués dans Beego

Utiliser Zookeeper et Dubbo pour implémenter la gouvernance des services distribués dans Beego

王林
王林original
2023-06-22 08:43:501263parcourir

Avec le développement continu des activités Internet, un seul nœud de service ne peut plus répondre aux besoins de haute concurrence et de haute disponibilité. L’architecture distribuée est donc devenue une méthode de développement moderne et l’une des technologies qu’il faut maîtriser.

Dans une architecture distribuée, la gouvernance des services est une problématique complexe et importante. Afin de garantir la haute disponibilité, la qualité et les performances des services, la gouvernance des services doit mettre en œuvre plusieurs fonctions telles que l'enregistrement des services, la découverte, l'équilibrage de charge, le basculement et la surveillance. Zookeeper et Dubbo sont des leaders en matière de gouvernance de services distribués. Ils peuvent travailler ensemble pour réaliser l'ensemble du processus de gouvernance de services.

Cet article expliquera comment utiliser Zookeeper et Dubbo pour implémenter la gouvernance des services distribués dans le framework Beego.

1. Zookeeper

Zookeeper est un service de coordination distribué open source. Il a été initialement développé par Yahoo et est maintenant devenu un projet de haut niveau d'Apache. Il peut gérer un grand nombre de nœuds et les coordonner, les synchroniser et les surveiller pour obtenir des fonctions de haute disponibilité et de découverte de services.

  1. Installez et démarrez Zookeeper

Tout d'abord, vous devez télécharger la version stable de Zookeeper depuis le site officiel de Zookeeper https://zookeeper.apache.org/. Après décompression, configurez le fichier zoo.cfg. Pour démarrer Zookeeper en mode autonome, il vous suffit d'ajouter une ligne de configuration au fichier zoo.cfg :

server.1=localhost:2888:3888

Parmi eux, 1 représente le numéro dans le cluster Zookeeper, et localhost:2888:3888 représente l'IP, port et port d'élection que le nœud Zookeeper écoute.

Ensuite, exécutez la commande suivante pour démarrer Zookeeper :

./zkServer.sh start

Vous pouvez utiliser la commande suivante pour vérifier si Zookeeper a démarré avec succès :

echo ruok | nc localhost 2181

Si Zookeeper fonctionne normalement et que "imok" est renvoyé, cela signifie que le démarrage a réussi .

  1. Utilisez ZkGo pour les opérations Zookeeper

Il existe plusieurs bibliothèques Zookeeper parmi lesquelles choisir dans le langage Go, parmi lesquelles la plus populaire et la plus stable est ZkGo. En utilisant ZkGo, vous pouvez facilement vous connecter à Zookeeper, créer des nœuds, surveiller les modifications des nœuds, etc.

Pour utiliser ZkGo dans le framework Beego du langage Go, vous devez d'abord installer la dépendance ZkGo :

go get github.com/samuel/go-zookeeper/zk

Ensuite, vous pouvez faire fonctionner le nœud Zookeeper dans le code, par exemple :

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)
}

Dans l'exemple ci-dessus, passez d'abord zk. Connect pour vous connecter au serveur Zookeeper, puis utilisez la méthode zk.Create pour créer un nœud nommé "/test" et utilisez la chaîne "hello world" comme données de nœud. Utilisez ensuite la méthode zk.Get pour obtenir les données du nœud "/test", et utilisez la méthode zk.Delete pour supprimer le nœud. zk.Connect方法连接Zookeeper服务器,然后使用zk.Create方法创建名为“/test”的节点,并将“hello world”字符串作为节点数据。接着使用zk.Get方法获取“/test”节点的数据,并使用zk.Delete方法删除该节点。

二、Dubbo

Dubbo是一个高性能的分布式服务框架,是阿里巴巴开源项目之一。Dubbo提供了服务注册、发现、负载均衡、故障转移等多种功能,并支持多种RPC通信协议。

  1. 安装和启动Dubbo

首先,需要下载Dubbo框架,官方网站是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服务引用。

三、集成Zookeeper和Dubbo

在Beego框架中集成Zookeeper和Dubbo,需要先注册Dubbo服务,然后使用Dubbo提供的服务URL在Zookeeper注册Dubbo节点。可以以下代码实现:

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方法在Zookeeper创建名为“/dubbo/org.apache.dubbo.DemoService/providers/服务URL”的节点,其中,节点数据为空,节点类型为zk.FlagEphemeral

2. Dubbo

Dubbo est un framework de services distribués hautes performances et l'un des projets open source d'Alibaba. Dubbo fournit plusieurs fonctions telles que l'enregistrement de services, la découverte, l'équilibrage de charge, le basculement, etc., et prend en charge plusieurs protocoles de communication RPC.

Installez et démarrez Dubbo

Tout d'abord, vous devez télécharger le framework Dubbo. Le site officiel est https://github.com/apache/dubbo-go. Après la décompression, entrez dans le fichier dubbo/go-server/demo. répertoire et utilisez la commande suivante pour démarrer Dubbo :

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

Après le démarrage, vous pouvez vérifier l'état d'exécution de Dubbo via la console de gestion Web de Dubbo. 🎜🎜🎜Utilisez Dubbo pour vous inscrire et appeler les services🎜🎜🎜L'intégration du framework Beego et Dubbo nécessite l'utilisation du SDK DubboGo, qui peut être installé via la commande suivante : 🎜
{
    "methodName": "SayHello",
    "parameterTypes": [
        "java.lang.String"
    ],
    "arguments": [
        "Dubbo"
    ]
}
🎜L'utilisation du SDK DubboGo peut facilement accéder aux services RPC fournis par Dubo. Dans le framework Beego, vous pouvez vous inscrire et appeler les services fournis par Dubbo via le code suivant : 🎜rrreee🎜 Dans le code ci-dessus, utilisez d'abord le SDK DubboGo pour enregistrer le service, puis utilisez le SDK DubboGo pour appeler le service. Lors de l'enregistrement d'un service, vous devez d'abord configurer le centre d'enregistrement du service Dubbo, puis définir le nom de l'interface, le protocole, l'adresse IP, le port, la configuration de la méthode et d'autres informations du service. Lorsque vous appelez un service, vous devez configurer le centre de découverte du service Dubbo et créer une référence de service Dubbo à l'aide de l'URL du service et du nom de l'interface fournis par Dubbo. 🎜🎜3. Intégrer Zookeeper et Dubbo🎜🎜Pour intégrer Zookeeper et Dubbo dans le framework Beego, vous devez d'abord enregistrer le service Dubbo, puis utiliser l'URL du service fournie par Dubbo pour enregistrer le nœud Dubbo dans Zookeeper. Cela peut être réalisé avec le code suivant : 🎜rrreee🎜Dans le code ci-dessus, utilisez d'abord le SDK DubboGo pour enregistrer le service, puis obtenez l'URL du service Dubbo et enregistrez les informations de l'URL du service Dubbo auprès de Zookeeper. Connectez-vous d'abord au serveur Zookeeper via la méthode zk.Connect, puis utilisez la méthode zk.Create pour créer un service nommé "/dubbo/org.apache.dubbo. DemoService/providers/ in Zookeeper URL", dans lequel les données du nœud sont vides et le type de nœud est zk.FlagEphemeral, indiquant qu'il s'agit d'un nœud temporaire. Une fois le nœud créé avec succès, le service Dubbo sera enregistré sur Zookeeper. 🎜🎜4. Tests🎜🎜Après avoir utilisé le framework Beego pour intégrer Zookeeper et Dubbo, vous pouvez tester le service Dubbo via des requêtes HTTP pour vérifier la mise en œuvre de la fonction de gouvernance du service. Vous pouvez utiliser des outils HTTP tels que Postman pour créer l'en-tête de requête HTTP à l'aide de l'URL du service Dubbo, puis ajouter les paramètres de requête dans le corps du message pour lancer un appel de service Dubbo. Par exemple, supposons que l'URL du service Dubbo soit : 🎜rrreee🎜Lorsque vous utilisez Postman pour simuler un appel de service Dubbo, vous pouvez ajouter les paramètres suivants dans le corps de la requête HTTP (le type de contenu est application/json) : 🎜rrreee🎜Après l'envoi la requête HTTP, vous pouvez obtenir le résultat de l'appel de ce service. 🎜🎜Résumé🎜

La gouvernance des services distribués est une question complexe et importante. L'intégration de Zookeeper et Dubbo dans le framework Beego peut réaliser plusieurs fonctions telles que l'enregistrement des services, la découverte, l'équilibrage de charge, le basculement, etc., et fournir un support solide pour la fiabilité et la haute disponibilité des services distribués. systèmes. Nous pouvons apprendre et utiliser les exemples de code fournis dans cet article, maîtriser la technologie de base de la gouvernance des services distribués et l'appliquer dans des projets réels.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn