> 백엔드 개발 > Golang > 적용 사례: go-micro를 사용하여 마이크로서비스 추천 시스템 구축

적용 사례: go-micro를 사용하여 마이크로서비스 추천 시스템 구축

王林
풀어 주다: 2023-06-18 12:43:41
원래의
1833명이 탐색했습니다.

인터넷 애플리케이션의 인기로 인해 마이크로서비스 아키텍처는 인기 있는 아키텍처 방법이 되었습니다. 그 중 마이크로서비스 아키텍처의 핵심은 애플리케이션을 여러 서비스로 분할하고 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. Create a service

마이크로서비스 아이디어에 따라 아키텍처를 개선하려면 추천 시스템을 전환해야 합니다. 그 안에 있는 다양한 모듈은 다양한 서비스로 분할됩니다. 여기서는 특성 엔지니어링 서비스를 구현하기 위한 예로 특성 엔지니어링을 사용합니다.

먼저 로컬에서 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)
    }
}
로그인 후 복사

이 서비스에서는 ExtractFeatures라는 RPC 메서드를 구현하여 클라이언트로부터 요청을 수신하고 지정된 사용자의 행동 특성을 추출합니다. 클라이언트에게 반환되었습니다.

  1. 등록 서비스

다양한 시스템에 다양한 모듈의 서비스를 배포하려면 서비스 등록 및 검색을 구현해야 합니다. go-micro에서는 etcd나 consal과 같은 등록 센터를 이용하여 서비스 등록 및 검색을 구현할 수 있습니다. 여기서는 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에서 제공하는 클라이언트를 통해 기능 엔지니어링 서비스를 위한 클라이언트를 생성합니다. 그런 다음 ExtractFeatures 메서드를 호출하고 반환 결과를 인쇄합니다. 전달된 go.micro.service.feature_engineering 매개변수는 기능 엔지니어링 서비스의 이름이며, etcdctl get /micro/config 명령을 실행하여 볼 수 있습니다.

  1. 패키징 및 배포

마지막으로 다양한 서비스를 패키징하여 다양한 시스템에 배포해야 합니다. Docker를 사용하여 Kubernetes를 통해 패키징 및 배포하거나 각 시스템에서 서비스를 수동으로 시작할 수 있습니다.

3. 요약

이 기사를 통해 마이크로서비스 아키텍처의 장점과 go-micro를 사용하여 효율적이고 확장 가능하며 유지 관리가 쉬운 마이크로서비스 추천 시스템을 구축하는 방법을 이해할 수 있습니다. 물론 go-micro는 수많은 마이크로서비스 프레임워크 중 하나일 뿐이며 독자는 자신의 필요에 따라 개발에 적합한 프레임워크를 선택할 수 있습니다. 간단히 말해서, 마이크로서비스 아키텍처는 인터넷 애플리케이션 개발의 주류 방법이 되었으며 의심할 여지 없이 앞으로 더욱 대중화될 것입니다.

위 내용은 적용 사례: go-micro를 사용하여 마이크로서비스 추천 시스템 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿