Go実践マイクロサービス--サービス発見
サービスの登録発見はマイクロサービスにとって非常に重要な一環であり、単一アーキテクチャアプリケーションではサービス間の相互呼び出しは、固定されたhostとportによってRESTまたはRPCを開始することによって呼び出されるが、マイクロサービスアーキテクチャでは、各サービスは動的に変化することが多い.したがって、クライアントの要求を動的サービスインスタンスに送信するために、サービス発見メカニズムが必要である.
go microを利用してサービス発見を実現するのは便利で、microではデフォルトでConsulを使用してサービス発見をサポートしています.もちろん、プラグインメカニズム(go-plugins)を使用してEtcd、Gossip、NATSなどの他のサードパーティサービス登録発見ツールもサポートしています.各サービスが起動するたびにregistryに自分を登録し、終了時にも自動的に登録を解除します.具体的にはgo-micro/serviceを見てみましょう.goの関連コードクリップ:
Consulの使用については「Consul概要とクイック入門」を参照してください.以下では、主にホテルの予約の例を利用して、Go MicroがConsulのクラスタをどのように使用してサービス発見を行うかを見てみましょう.
例では、Microコンポーネント内のマイクロサービスAPIゲートウェイの実装であるMicro API APIが使用され、APIゲートウェイモードは、サービスに適切なバックエンドサービスに動的にルーティングされたエントリを提供し、それを利用してサービス発見、負荷バランス、符号化、RPCベースの通信を行うことができる.
Micro APIが提供するHTTP APIは以下の通りである.
例では、go-microクライアントが要求主体をRPC要求に転送するデフォルトのハンドラの代わりに、Micro APIを使用したRPC Handlerを使用します.具体的なMicro APIの使用とRESTマッピング規則は、ドキュメントを表示することができます.https://micro.mu/docs/api.html
このホテルの予約サービスは公式micro/examplesのbooking例を利用して書き換えられ、具体的なコード=>https://github.com/yuansir/go...
docker-compose.yml
consulは、データセンターごとに少なくとも1台のserverを有する必要があり、1つのクラスタに3つまたは5つのserverがあることを推奨する.単一のサーバを配備すると、失敗した場合にデータの損失が避けられない.
転載は明記してください:Ryanから転載して菜鳥です
もしこの文章があなたにとって非常に有益だと思ったら,何か賞をあげましょうか.
本明細書のリンクアドレス:Go実践マイクロサービス--サービス発見
go microを利用してサービス発見を実現するのは便利で、microではデフォルトでConsulを使用してサービス発見をサポートしています.もちろん、プラグインメカニズム(go-plugins)を使用してEtcd、Gossip、NATSなどの他のサードパーティサービス登録発見ツールもサポートしています.各サービスが起動するたびにregistryに自分を登録し、終了時にも自動的に登録を解除します.具体的にはgo-micro/serviceを見てみましょう.goの関連コードクリップ:
......
func (s *service) run(exit chan bool) {
if s.opts.RegisterInterval <= time.Duration(0) {
return
}
//
t := time.NewTicker(s.opts.RegisterInterval)
for {
select {
case
Consulの使用については「Consul概要とクイック入門」を参照してください.以下では、主にホテルの予約の例を利用して、Go MicroがConsulのクラスタをどのように使用してサービス発見を行うかを見てみましょう.
例では、Microコンポーネント内のマイクロサービスAPIゲートウェイの実装であるMicro API APIが使用され、APIゲートウェイモードは、サービスに適切なバックエンドサービスに動的にルーティングされたエントリを提供し、それを利用してサービス発見、負荷バランス、符号化、RPCベースの通信を行うことができる.
Micro APIが提供するHTTP APIは以下の通りである.
- /[service]/[method] # HTTP services
- /rpc # service
例では、go-microクライアントが要求主体をRPC要求に転送するデフォルトのハンドラの代わりに、Micro APIを使用したRPC Handlerを使用します.具体的なMicro APIの使用とRESTマッピング規則は、ドキュメントを表示することができます.https://micro.mu/docs/api.html
このホテルの予約サービスは公式micro/examplesのbooking例を利用して書き換えられ、具体的なコード=>https://github.com/yuansir/go...
.
├── README.md
├── api
│ └── hotel # booking service
├── data # data
│ ├── bindata.go
│ ├── customers.json
│ ├── locations.json
│ ├── profiles.json
│ └── rates.json
├── docker-compose.yml # docker compose file
└── srv # services
├── auth # auth token servce
├── geo # geo service
├── profile # profile service
└── rate # rate service
docker-compose.yml
version: '3'
services:
consul-agent-1: &consul-agent
image: consul:latest
networks:
- consul-cluster
command: "agent -retry-join consul-server-bootstrap -client 0.0.0.0"
consul-agent-2:
<<: consul-agent-3:="" consul-server-1:="" command:="" consul-server-bootstrap="" consul-server-2:="" consul-server-bootstrap:="" ports:="" auth:="" build:="" .="" networks:="" consul-cluster="" links:="" geo:="" profile:="" rate:="" api:="" auth="" geo="" profile="" rate="" micro:="" api="" image:="" microhq="" consul-cluster:=""/>
consulは、データセンターごとに少なくとも1台のserverを有する必要があり、1つのクラスタに3つまたは5つのserverがあることを推奨する.単一のサーバを配備すると、失敗した場合にデータの損失が避けられない.
-bootstrap-expect
オプションは、Consulが追加することを期待しているserverノードの数を示します.各サービスの--registry_address
は、登録されたサービス発見レジストリアドレスを設定することである.docker-compose up
以降はconsulのweb uiでServiceの状態を確認できます.転載は明記してください:Ryanから転載して菜鳥です
もしこの文章があなたにとって非常に有益だと思ったら,何か賞をあげましょうか.
本明細書のリンクアドレス:Go実践マイクロサービス--サービス発見