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

Golangは迅速な発展と同時プログラミングに適していますが、Cは極端なパフォーマンスと基礎となる制御を必要とするプロジェクトにより適しています。 1)Golangの並行性モデルは、GoroutineとChannelを介した同時性プログラミングを簡素化します。 2)Cのテンプレートプログラミングは、一般的なコードとパフォーマンスの最適化を提供します。 3)Golangのごみ収集は便利ですが、パフォーマンスに影響を与える可能性があります。 Cのメモリ管理は複雑ですが、コントロールは問題ありません。

speed、効率、およびシンプル性をspeedsped.1)speed:gocompilesquilesquicklyandrunseffictient、理想的なlargeprojects.2)効率:等系dribribraryreducesexexternaldedenciess、開発効果を高める3)シンプルさ:

Cは、ハードウェアリソースと高性能の最適化が必要なシナリオにより適していますが、Golangは迅速な開発と高い並行性処理が必要なシナリオにより適しています。 1.Cの利点は、ハードウェア特性と高い最適化機能に近いものにあります。これは、ゲーム開発などの高性能ニーズに適しています。 2.Golangの利点は、その簡潔な構文と自然な並行性サポートにあり、これは高い並行性サービス開発に適しています。

Golangは実際のアプリケーションに優れており、そのシンプルさ、効率性、並行性で知られています。 1)同時プログラミングはゴルチンとチャネルを通じて実装されます。2)柔軟なコードは、インターフェイスと多型を使用して記述されます。3)ネット/HTTPパッケージを使用したネットワークプログラミングを簡素化、4)効率的な同時クローラーを構築する、5)ツールと最高の実践を通じてデバッグと最適化。

GOのコア機能には、ガベージコレクション、静的リンク、並行性サポートが含まれます。 1. GO言語の並行性モデルは、GoroutineとChannelを通じて効率的な同時プログラミングを実現します。 2.インターフェイスと多型は、インターフェイスメソッドを介して実装されているため、異なるタイプを統一された方法で処理できます。 3.基本的な使用法は、関数定義と呼び出しの効率を示しています。 4。高度な使用法では、スライスは動的なサイズ変更の強力な機能を提供します。 5.人種条件などの一般的なエラーは、Getest Raceを通じて検出および解決できます。 6.パフォーマンス最適化Sync.Poolを通じてオブジェクトを再利用して、ゴミ収集圧力を軽減します。

GO言語は、効率的でスケーラブルなシステムの構築においてうまく機能します。その利点には次のものがあります。1。高性能:マシンコードにコンパイルされ、速度速度が速い。 2。同時プログラミング:ゴルチンとチャネルを介してマルチタスクを簡素化します。 3。シンプルさ:簡潔な構文、学習コストとメンテナンスコストの削減。 4。クロスプラットフォーム:クロスプラットフォームのコンパイル、簡単な展開をサポートします。

SQLクエリの結果の並べ替えについて混乱しています。 SQLを学習する過程で、しばしば混乱する問題に遭遇します。最近、著者は「Mick-SQL Basics」を読んでいます...

テクノロジースタックの収束とテクノロジーの選択の関係ソフトウェア開発におけるテクノロジーの選択、テクノロジースタックの選択と管理は非常に重要な問題です。最近、一部の読者が提案しています...


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

Dreamweaver Mac版
ビジュアル Web 開発ツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール
