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.
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 .
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通信协议。
首先,需要下载Dubbo框架,官方网站是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服务引用。
三、集成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
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
{ "methodName": "SayHello", "parameterTypes": [ "java.lang.String" ], "arguments": [ "Dubbo" ] }
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!