ホームページ >バックエンド開発 >Golang >go-zero に基づいて効率的なマイクロサービス API ゲートウェイを構築する

go-zero に基づいて効率的なマイクロサービス API ゲートウェイを構築する

WBOY
WBOYオリジナル
2023-06-23 10:13:401683ブラウズ

近年、サービスを分離することでアプリケーションを独立した機能モジュールに分割し、アプリケーションの信頼性と拡張性を向上させる、サービス中心のマイクロサービスアーキテクチャの適用がますます広がっています。ただし、マイクロサービス アーキテクチャでは、サービスの数が多いため、サービス間の通信が必然的に複雑になります。この時点で、API ゲートウェイは必須のコンポーネントになります。この記事では、効率的なマイクロサービス API ゲートウェイを構築する go-zero の方法を紹介します。

API ゲートウェイとは

API ゲートウェイは、イングレス トラフィックを処理し、リクエストと応答を転送するサーバーであり、クライアントとサーバーの間の中間層です。マイクロサービス アーキテクチャでは、API ゲートウェイは主に次の 2 つの役割を果たします。

  • 外部への統一インターフェイスを提供
  • リクエスト ルーティングとインターフェイス プロキシを内部で実行

アーキテクチャ モデルとして、API ゲートウェイには次の特性もあります。

  • 外部からの受信リクエストを内部サービスに転送する責任を負います
  • さまざまな条件に従ってリクエストを実行しますルーティング、フィルタリング
  • #認証、セキュリティ、電流制限などのサービスを提供します
go-zero フレームワーク

go-zero はマイクロサービスです。アーキテクチャは、高い同時実行処理機能とシンプルで使いやすいプログラミング インターフェイスを提供することに注力しています。 Golang 標準ライブラリに基づいて構築されており、Go 言語の同時実行機能とメモリ管理の利点に基づいて効率的なネットワーク要求処理を実現できます。

go-zero フレームワークは、Web フレームワーク、RPC フレームワーク、マイクロサービス フレームワーク、および一連の周辺ツールを提供します。最も重要なコンポーネントは go-zero マイクロサービス フレームワークです。このフレームワークは非常に柔軟で、特定のビジネス ニーズに応じてカスタマイズでき、次の利点もあります:

    高パフォーマンス: Golang の高い同時実行性と低メモリ消費機能に基づいて、go-zero は高パフォーマンスを実現します。パフォーマンスのネットワーク処理とリソース使用率。
  • スケーラビリティ: go-zero は階層化された開発をサポートし、高負荷のサービスを独立したレイヤーに分離して安定性と拡張性を確保できます。
  • 高信頼性: go-zero は包括的なテスト方法を使用してシステム機能の正確性を確認し、リトライ、ヒューズ、電流制限などの高可用性設計を統合してシステムの信頼性を向上させます。
  • 豊富なツール チェーン: go-zero は、サービスの迅速な開発と展開に役立つ多くのツールを提供します。
go-zero が API ゲートウェイを構築する

次に、go-zero が API ゲートウェイを構築する手順を紹介します:

ステップ 1: インターフェイスを定義する

最初に、いくつかの API インターフェイスを定義する必要があります。3 つのインターフェイスを定義するとします:

GET /api/user/{id}
POST /api/user
DELETE /api/user/{id}

ステップ 2: マイクロサービスを作成する

次に、これらのインターフェイスを処理するマイクロサービスを作成する必要があります。仕える。 go-zero では、

Handlers を定義することでマイクロサービスを実装できます。これらの Handlers はフレームワークによって自動的に生成され、API ゲートウェイによって呼び出されるサービスに統合されます。

サンプル コードは次のとおりです。

package service

import "github.com/tal-tech/go-zero/rest"

type Request struct {
    Id int `json:"id"`
}
type Response struct {
    Data string `json:"data"`
}

type Service interface {
    GetUser(*Request) (*Response, error)
    AddUser(*Request) (*Response, error)
    DeleteUser(*Request) (*Response, error)
}

type UserService struct {
}

func NewUserService() *UserService {
    return &UserService{}
}

func (s *UserService) GetUser(req *Request) (*Response, error) {
    return &Response{
        Data: "get user success",
    }, nil
}

func (s *UserService) AddUser(req *Request) (*Response, error) {
    return &Response{
        Data: "add user success",
    }, nil
}

func (s *UserService) DeleteUser(req *Request) (*Response, error) {
    return &Response{
        Data: "delete user success",
    }, nil
}

func (s *UserService) HttpHandlers() []rest.Handler {
    return []rest.Handler{
        rest.Get("/api/user/:id", s.GetUser),
        rest.Post("/api/user", s.AddUser),
        rest.Delete("/api/user/:id", s.DeleteUser),
    }
}

上記のコードでは、前に定義した 3 つのインターフェイスに対応する 3 つのメソッドを含む Service インターフェイスを定義します。同時に、HttpHandlers インターフェイスを実装する必要があります。HttpHandlers インターフェイスは、rest.Handler インターフェイスを実装することで、対応する処理関数にリクエストを直接ルーティングできます。

ステップ 3: API ゲートウェイの構成

次に、ルーティング、電流制限ポリシー、サービス検出などの関連情報を API ゲートウェイで構成する必要があります。 go-zero は、マイクロサービスと API ゲートウェイを迅速に作成および管理できる goctl と呼ばれるツールを提供します。

  1. goctl ツールのインストール:

    goctl ツールのインストールは非常に簡単で、次の名前を付けてインストールするだけです:

    $ curl -sSL https://git.io/godev | bash

  2. API ゲートウェイの作成:

    次のコマンドを使用して API ゲートウェイを作成できます:

    $ goctl api new gateway

    このコマンドを実行すると、goctl は、 APIゲートウェイ。

  3. ルーティングの構成:

    api インターフェイスを定義した後、関連するルーティング構成を追加する必要があります。 go-zero では、ルーティング設定に GroupProxy を使用できます。また、WithJwtAuthWithCircuitBreaker などのメソッドも使用できます。 、など ルートのフィルタリングと制御。

    サンプル コードは次のとおりです。

    package api
    
    import (
       "github.com/tal-tech/go-zero/rest"
       "github.com/tal-tech/go-zero/zrpc"
       "gateway/internal/service"
    )
    
    type Api struct {
       rest.RestHandler
    }
    
    func NewApi() (*Api, error) {
       userService := service.NewUserService()
       cli := zrpc.MustNewClient(zrpc.RpcClientConf{
          ServiceConf: zrpc.ServiceConf{
             Name: "gateway",
             Etcd: zrpc.EtcdConf{
                Endpoints: []string{"localhost:2379"},
                Key:       "rpc",
                Timeout:   5000,
             },
             Middleware: []zrpc.Middleware{
                zrpc.NewClientMiddleware(),
             },
          },
       })
       handler := rest.NewGroupRouter("/api").
          GET("/user/:id", rest.WithNoti(func(ctx *rest.RestContext) error {
                response, err := userService.GetUser(&service.Request{Id: ctx.Request.Params["id"]})
                if err != nil {
                   return nil
                }
                ctx.SendJson(response)
                return nil
             })).
          POST("/user", rest.WithNoti(func(ctx *rest.RestContext) error {
                response, err := userService.AddUser(&service.Request{})
                if err != nil {
                   return nil
                }
                ctx.SendJson(response)
                return nil
             })).
          DELETE("/user/:id", rest.WithNoti(func(ctx *rest.RestContext) error {
                response, err := userService.DeleteUser(&service.Request{Id: ctx.Request.Params["id"]})
                if err != nil {
                   return nil
                }
                ctx.SendJson(response)
                return nil
             })).
          Proxy(func(ctx *rest.RestContext) error {
                err := zrpc.Invoke(ctx, cli, "gateway", ctx.Request.Method, ctx.Request.URL.Path, ctx.Request.Params, &ctx.Output.Body)
                if err != nil {
                   return err
                }
                return nil
             })
       return &Api{
          RestHandler: handler,
       }, nil
    }

上記のコードでは、

api のリクエストが ## にルーティングされることがわかります。 #userService定義された処理関数。Proxy を使用して、他の未定義のリクエストを指定されたサービスに転送します。 API を定義した後、API ゲートウェイ サービスを開始できます。

$ go run main.go -f etc/gateway-api.yaml 

起動に成功すると、API ゲートウェイが提供するインターフェイスにアクセスできます。

概要

go-zero に基づいて効率的なマイクロサービス API ゲートウェイを構築する手順は次のとおりです。

API インターフェイスの定義
  • 書き込みmicroservice
  • API Gateway の構成
  • API Gateway サービスの開始
  • go-zero は、非常に柔軟、高性能、スケーラブルなマイクロサービス フレームワークです。は、Web フレームワーク、RPC フレームワーク、マイクロサービス フレームワークを提供し、効率的なマイクロサービス アプリケーションを迅速に構築するのに役立つ一連の周辺ツールも提供します。

上記の手順により、効率的で強力なマイクロサービス API ゲートウェイを簡単に構築できるため、アプリケーションに拡張性とパフォーマンスの高いアーキテクチャ基盤が提供されます。

以上がgo-zero に基づいて効率的なマイクロサービス API ゲートウェイを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。