インターネット アプリケーションの人気に伴い、マイクロサービス アーキテクチャが一般的なアーキテクチャ手法になりました。その中でも、マイクロサービス アーキテクチャの鍵となるのは、アプリケーションを異なるサービスに分割し、RPC で通信することで疎結合なサービス アーキテクチャを実現することです。この記事では、go-microを使ってマイクロサービスレコメンドシステムを構築する方法を実際の事例をもとに紹介します。
1. マイクロサービス レコメンデーション システムとは
マイクロサービス レコメンデーション システムは、マイクロサービス アーキテクチャに基づくレコメンデーション システムであり、システム内のさまざまなモジュール (特徴量エンジニアリング、分類器、ソーターなど) を推奨します。 、など)は異なるサービスに分割され、RPC を介して通信することで、効率的でスケーラブルで保守が容易なレコメンデーション システムを実現します。マイクロサービス レコメンド システムは、電子商取引、音楽、ビデオなど、さまざまな垂直分野のレコメンデーション シナリオに適用できます。
2. go-micro を使用してマイクロサービス推奨システムを実装する方法
go-micro は、Go 言語に基づいたマイクロサービス フレームワークであり、サービスの登録と検出、負荷分散、および RPC を提供します。 . 通信などの共通機能はマイクロサービスアーキテクチャの構築に非常に適しています。次に、go-microを使ってマイクロサービスレコメンデーションシステムを実装する方法を紹介します。
まず、go-micro フレームワークをローカルにインストールする必要があります。次のコマンドを使用してインストールできます:
go get github.com/micro/go-micro/v2
マイクロサービス アーキテクチャの考え方に従って、レコメンデーション システムのさまざまなモジュールをさまざまなサービスに分割する必要があります。ここでは、特徴エンジニアリング サービスを実装する例として特徴エンジニアリングを取り上げます。
まず、feature_engineering という名前の go モジュールをローカルに作成します。
mkdir -p feature_engineering cd feature_engineering go mod init feature_engineering
次に、特徴量エンジニアリング関連の関数を実装するサービスを作成します。ここでは、「ユーザーの履歴行動からの特徴抽出」を例として、次のコードを実装します:
package main import ( "context" "github.com/micro/go-micro/v2" pb "github.com/username/recommender/protos" "log" ) type FeatureEngineeringService struct{} func (s *FeatureEngineeringService) ExtractFeatures(ctx context.Context, req *pb.ExtractFeaturesRequest, rsp *pb.ExtractFeaturesResponse) error { log.Printf("Extracting features for user %d", req.UserId) rsp.Features = []float32{0.1, 0.2, 0.3} return nil } func main() { // Create service service := micro.NewService( micro.Name("go.micro.service.feature_engineering"), ) // Initialise service service.Init() // Register handler pb.RegisterFeatureEngineeringHandler(service.Server(), new(FeatureEngineeringService)) // Run the server if err := service.Run(); err != nil { log.Fatal(err) } }
このサービスでは、クライアントからデータを受信するために ExtractFunction という名前の RPC メソッドを実装します。指定されたユーザーの過去の行動特性を取得し、それをクライアントに返します。
さまざまなモジュールのサービスをさまざまなマシンに展開するには、サービスの登録と検出を実装する必要があります。 go-micro では、etcd や consul などの登録センターを使用して、サービスの登録と検出を実装できます。ここではレジストリとして etcd を使用します。
次のコマンドを使用して etcd を起動できます:
docker run -p 2379:2379 -p 2380:2380 --name etcd -v /tmp/etcd:/etcd-data etcd:latest /usr/local/bin/etcd --name my-etcd-1 --data-dir /etcd-data --advertise-client-urls http://0.0.0.0:2379 --listen-client-urls http://0.0.0.0:2379 --initial-advertise-peer-urls http://0.0.0.0:2380 --listen-peer-urls http://0.0.0.0:2380 --initial-cluster my-etcd-1=http://0.0.0.0:2380
起動後、http://localhost:2379/v2/keys/ にアクセスして etcd が正常に実行されているかどうかを確認できます。
次に、サービスに登録する必要があります。service.Init() の後に次のコードを追加できます:
import ( "github.com/micro/go-micro/v2/registry" "github.com/micro/go-plugins/registry/etcdv3/v2" ) // Create new registry etcdRegistry := etcdv3.NewRegistry( registry.Addrs("127.0.0.1:2379"), ) // Register service if err := etcdRegistry.Register(service.Options().Service); err != nil { log.Fatal(err) }
このコードは、etcd を登録センターとして使用し、サービスを登録します。 etcdの真ん中。
他のサービスでは、go-micro が提供するクライアントを使用して RPC 呼び出しを行うことができます。以下は、機能エンジニアリング サービスを呼び出すコード例です。
package main import ( "context" "fmt" "github.com/micro/go-micro/v2" "github.com/micro/go-micro/v2/registry" "github.com/micro/go-plugins/registry/etcdv3/v2" pb "github.com/username/recommender/protos" ) func main() { // Create new registry etcdRegistry := etcdv3.NewRegistry( registry.Addrs("127.0.0.1:2379"), ) // Create new service service := micro.NewService( micro.Registry(etcdRegistry), ) // Initialise service service.Init() // Call feature engineering service featureEngineeringClient := pb.NewFeatureEngineeringService("go.micro.service.feature_engineering", service.Client()) rsp, err := featureEngineeringClient.ExtractFeatures(context.TODO(), &pb.ExtractFeaturesRequest{UserId: 1}) if err != nil { fmt.Println(err) } fmt.Printf("Features: %v", rsp.Features) }
このコードは、登録センターとして etcd を使用し、go-micro によって提供されるクライアントを通じて機能エンジニアリング サービスのクライアントを作成します。次に、ExtractFeature メソッドを呼び出し、返された結果を出力します。渡された go.micro.service.feature_engineering パラメーターは機能エンジニアリング サービスの名前であり、 etcdctl get /micro/config コマンドを実行すると表示できることに注意してください。
最後に、さまざまなサービスをパッケージ化して、さまざまなマシンに展開する必要があります。 Docker を使用してパッケージ化し、Kubernetes 経由でデプロイすることも、各マシンでサービスを手動で開始することもできます。
3. 概要
この記事を通じて、マイクロサービス アーキテクチャの利点と、go-micro を使用して効率的でスケーラブルで保守が容易なマイクロサービス レコメンデーション システムを構築する方法を理解できます。 . .もちろん、go-micro は多くのマイクロサービス フレームワークの 1 つにすぎず、読者は自分のニーズに応じて開発に適切なフレームワークを選択できます。つまり、マイクロサービス アーキテクチャはインターネット アプリケーション開発の主流の手法となっており、今後さらに普及することは間違いありません。
以上が応用例:go-microを利用したマイクロサービスレコメンドシステムの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。