ホームページ  >  記事  >  バックエンド開発  >  Golang は軽量のゲートウェイ システムを構築します

Golang は軽量のゲートウェイ システムを構築します

PHPz
PHPzオリジナル
2023-03-31 10:25:481478ブラウズ

インターネットの発展に伴い、マイクロサービス アーキテクチャがますます多くの企業で選択されるようになりました。マイクロサービス アーキテクチャでは、ゲートウェイは不可欠な部分です。マイクロサービス アーキテクチャの重要な部分として、ゲートウェイはリクエストのルーティングと負荷分散、セキュリティ制御、プロトコル変換を担当し、バックエンド サービスの統合管理とアクセス制御を効果的に実行できます。

現在、市場には、Kong、APISIX など、一般的に使用されているゲートウェイ製品が多数存在します。ただし、これらのゲートウェイ製品には、高い学習コストや複雑な構成などの問題があり、一部の単純なシナリオには適さない可能性があります。

シンプルで効率的なプログラミング言語である golang は、高い同時実行性と統合性の利点を最大限に発揮し、軽量のゲートウェイ システムの構築に使用できます。この記事では、次の側面について説明します。

  • 要件分析
  • 技術的選択
  • アーキテクチャ設計
  • 実装手順
  1. 要件分析

一般に、ゲートウェイ システムは次の機能を実装する必要があります。

  • #リクエスト ルーティングと負荷分散
  • セキュリティ制御 (インターフェース認証やアクセス制御など)
  • ログ記録
  • インターフェース転送と再試行

上記の機能を実装するには golang 言語を使用します。ゲートウェイ システムの効率とリソースの最大限の利用を確保します。

  1. テクノロジーの選択

次の主要なテクノロジー スタックを使用します:

  • golang
  • Gin フレームワーク
  • Etcd
  • Redis
  • JWT
  1. アーキテクチャ設計

このゲートウェイ システムは「リバース プロキシ ETCD」を使用していますRedis」アーキテクチャ パターン。

3 層アーキテクチャ:

  • ブラウザ、クライアント、その他のリクエスト層。
  • API レイヤー (バックエンド サービスなど)
  • ゲートウェイ レイヤー

複数のサーバーと各サーバーには複数の API があり、同時アクセスを高めるには、 API ノードの動的な増減をサポートします。 API ノードの状態維持と検出には ETCD (高可用性キー/値ストア) を使用します。 API の protobuf データ キャッシュとして Redis を使用します。

  1. 実装手順

4.1 golang、Gin、および関連する依存関係をインストールする

インストールが完了したら、govendor で使用する必要がある依存関係を追加します。 .yaml ファイル。以下に示すように:

dependencies:
  - github.com/gin-gonic/gin
  - github.com/coreos/etcd/clientv3
  - github.com/go-redis/redis
  - github.com/dgrijalva/jwt-go

次のコマンドを実行するには go コマンドを使用します:

go get -u github.com/kardianos/govendor
govendor init
govendor add +external
govendor add github.com/gin-gonic/gin@v1.3.0

4.2 gin の基本的な使用法

HTTP フレームワークを簡単に構築できます以下に示すように、gin を使用します。

package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default()

    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })

    r.Run() // listen and serve on 0.0.0.0:8080
}

4.3 ETCD と Redis の使用

ETCD は、サービスの検出と構成の共有に使用できる可用性の高い Key-Value ストアです。 golangではetcdを動作させるために公式に提供されているclientv3ライブラリを利用します。

Redis は高性能のキーと値のデータベースです。golang で Redis を使用するには go-redis ライブラリを使用します。

4.4 JWTの使用

インターフェースのセキュリティを確保するために、インターフェース認証にJWTを使用します。 JWT (JSON Web Token) は、ID 認証および認可情報を送信する Web 標準の方法であり、主な使用シナリオはマシン間インターフェースの認可および認証です。

4.5 ゲートウェイの実装

ゲートウェイ自体の主な機能には、リクエストのルーティングと負荷分散、セキュリティ制御とログが含まれます。

リクエストのルーティングと負荷分散については、Gin フレームワークの ReverseProxy を使用して実現できます。 API のステータス検出と登録は ETCD を通じて実装する必要があります。

私たちのゲートウェイ システムは、複数のバックエンド API ノードをサポートし、負荷分散を実行する必要があります。負荷分散アルゴリズムにはポーリング方式、ランダム方式などが利用できます。ここではノード選択にポーリング方式(RoundRobin)を使用します。

セキュリティ制御の観点から、リクエスト ヘッダーで JWT を渡してインターフェイス認証を実現できます。

最後に、応答にログを挿入し、応答結果を返します。

  1. 結論

この記事では、golang 言語を使用してシンプルなゲートウェイ システムを構築するプロセスを簡単に紹介します。このゲートウェイ システムは、GIN フレームワークを使用してリクエスト ルーティングとロード バランシングを実装し、ETCD を介して API ノードのステータス維持と検出を実装し、API の protobuf データ キャッシュとして Redis を使用し、インターフェイス認証に JWT を使用し、最後にログ機能を追加します。 golang を使用して構築されたゲートウェイ システムは軽量で効率的で、学習と展開が簡単で、軽量のシナリオに非常に適しています。

以上がGolang は軽量のゲートウェイ システムを構築しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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