応用例:go-microを利用したマイクロサービスレコメンドシステムの構築

王林
リリース: 2023-06-18 12:43:41
オリジナル
1768 人が閲覧しました

インターネット アプリケーションの人気に伴い、マイクロサービス アーキテクチャが一般的なアーキテクチャ手法になりました。その中でも、マイクロサービス アーキテクチャの鍵となるのは、アプリケーションを異なるサービスに分割し、RPC で通信することで疎結合なサービス アーキテクチャを実現することです。この記事では、go-microを使ってマイクロサービスレコメンドシステムを構築する方法を実際の事例をもとに紹介します。

1. マイクロサービス レコメンデーション システムとは

マイクロサービス レコメンデーション システムは、マイクロサービス アーキテクチャに基づくレコメンデーション システムであり、システム内のさまざまなモジュール (特徴量エンジニアリング、分類器、ソーターなど) を推奨します。 、など)は異なるサービスに分割され、RPC を介して通信することで、効率的でスケーラブルで保守が容易なレコメンデーション システムを実現します。マイクロサービス レコメンド システムは、電子商取引、音楽、ビデオなど、さまざまな垂直分野のレコメンデーション シナリオに適用できます。

2. go-micro を使用してマイクロサービス推奨システムを実装する方法

go-micro は、Go 言語に基づいたマイクロサービス フレームワークであり、サービスの登録と検出、負荷分散、および RPC を提供します。 . 通信などの共通機能はマイクロサービスアーキテクチャの構築に非常に適しています。次に、go-microを使ってマイクロサービスレコメンデーションシステムを実装する方法を紹介します。

  1. go-micro のインストール

まず、go-micro フレームワークをローカルにインストールする必要があります。次のコマンドを使用してインストールできます:

go get github.com/micro/go-micro/v2
ログイン後にコピー
  1. サービスの作成

マイクロサービス アーキテクチャの考え方に従って、レコメンデーション システムのさまざまなモジュールをさまざまなサービスに分割する必要があります。ここでは、特徴エンジニアリング サービスを実装する例として特徴エンジニアリングを取り上げます。

まず、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 メソッドを実装します。指定されたユーザーの過去の行動特性を取得し、それをクライアントに返します。

  1. 登録サービス

さまざまなモジュールのサービスをさまざまなマシンに展開するには、サービスの登録と検出を実装する必要があります。 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の真ん中。

  1. 呼び出しサービス

他のサービスでは、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 コマンドを実行すると表示できることに注意してください。

  1. パッケージ化と展開

最後に、さまざまなサービスをパッケージ化して、さまざまなマシンに展開する必要があります。 Docker を使用してパッケージ化し、Kubernetes 経由でデプロイすることも、各マシンでサービスを手動で開始することもできます。

3. 概要

この記事を通じて、マイクロサービス アーキテクチャの利点と、go-micro を使用して効率的でスケーラブルで保守が容易なマイクロサービス レコメンデーション システムを構築する方法を理解できます。 . .もちろん、go-micro は多くのマイクロサービス フレームワークの 1 つにすぎず、読者は自分のニーズに応じて開発に適切なフレームワークを選択できます。つまり、マイクロサービス アーキテクチャはインターネット アプリケーション開発の主流の手法となっており、今後さらに普及することは間違いありません。

以上が応用例:go-microを利用したマイクロサービスレコメンドシステムの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!