인터넷 애플리케이션의 인기로 인해 마이크로서비스 아키텍처는 인기 있는 아키텍처 방법이 되었습니다. 그 중 마이크로서비스 아키텍처의 핵심은 애플리케이션을 여러 서비스로 분할하고 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) } }
이 서비스에서는 ExtractFeatures라는 RPC 메서드를 구현하여 클라이언트로부터 요청을 수신하고 지정된 사용자의 행동 특성을 추출합니다. 클라이언트에게 반환되었습니다.
다양한 시스템에 다양한 모듈의 서비스를 배포하려면 서비스 등록 및 검색을 구현해야 합니다. 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에 등록합니다.
다른 서비스에서는 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 명령을 실행하여 볼 수 있습니다.
마지막으로 다양한 서비스를 패키징하여 다양한 시스템에 배포해야 합니다. Docker를 사용하여 Kubernetes를 통해 패키징 및 배포하거나 각 시스템에서 서비스를 수동으로 시작할 수 있습니다.
3. 요약
이 기사를 통해 마이크로서비스 아키텍처의 장점과 go-micro를 사용하여 효율적이고 확장 가능하며 유지 관리가 쉬운 마이크로서비스 추천 시스템을 구축하는 방법을 이해할 수 있습니다. 물론 go-micro는 수많은 마이크로서비스 프레임워크 중 하나일 뿐이며 독자는 자신의 필요에 따라 개발에 적합한 프레임워크를 선택할 수 있습니다. 간단히 말해서, 마이크로서비스 아키텍처는 인터넷 애플리케이션 개발의 주류 방법이 되었으며 의심할 여지 없이 앞으로 더욱 대중화될 것입니다.
위 내용은 적용 사례: go-micro를 사용하여 마이크로서비스 추천 시스템 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!