インターネットの発展に伴い、マイクロサービス アーキテクチャがますます多くの企業で選択されるようになりました。マイクロサービス アーキテクチャでは、ゲートウェイは不可欠な部分です。マイクロサービス アーキテクチャの重要な部分として、ゲートウェイはリクエストのルーティングと負荷分散、セキュリティ制御、プロトコル変換を担当し、バックエンド サービスの統合管理とアクセス制御を効果的に実行できます。
現在、市場には、Kong、APISIX など、一般的に使用されているゲートウェイ製品が多数存在します。ただし、これらのゲートウェイ製品には、高い学習コストや複雑な構成などの問題があり、一部の単純なシナリオには適さない可能性があります。
シンプルで効率的なプログラミング言語である golang は、高い同時実行性と統合性の利点を最大限に発揮し、軽量のゲートウェイ システムの構築に使用できます。この記事では、次の側面について説明します。
一般に、ゲートウェイ システムは次の機能を実装する必要があります。
上記の機能を実装するには golang 言語を使用します。ゲートウェイ システムの効率とリソースの最大限の利用を確保します。
次の主要なテクノロジー スタックを使用します:
このゲートウェイ システムは「リバース プロキシ ETCD」を使用していますRedis」アーキテクチャ パターン。
3 層アーキテクチャ:
複数のサーバーと各サーバーには複数の API があり、同時アクセスを高めるには、 API ノードの動的な増減をサポートします。 API ノードの状態維持と検出には ETCD (高可用性キー/値ストア) を使用します。 API の protobuf データ キャッシュとして Redis を使用します。
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 を渡してインターフェイス認証を実現できます。
最後に、応答にログを挿入し、応答結果を返します。
この記事では、golang 言語を使用してシンプルなゲートウェイ システムを構築するプロセスを簡単に紹介します。このゲートウェイ システムは、GIN フレームワークを使用してリクエスト ルーティングとロード バランシングを実装し、ETCD を介して API ノードのステータス維持と検出を実装し、API の protobuf データ キャッシュとして Redis を使用し、インターフェイス認証に JWT を使用し、最後にログ機能を追加します。 golang を使用して構築されたゲートウェイ システムは軽量で効率的で、学習と展開が簡単で、軽量のシナリオに非常に適しています。
以上がGolang は軽量のゲートウェイ システムを構築しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。