ホームページ >バックエンド開発 >Golang >go-zero と Kubernetes の実践: 高可用性、高パフォーマンス、高スケーラビリティを備えたコンテナ化されたマイクロサービス アーキテクチャの構築

go-zero と Kubernetes の実践: 高可用性、高パフォーマンス、高スケーラビリティを備えたコンテナ化されたマイクロサービス アーキテクチャの構築

王林
王林オリジナル
2023-06-22 09:26:381591ブラウズ

インターネットの規模が継続的に拡大し、ユーザーのニーズが高まるにつれ、マイクロサービス アーキテクチャの利点がますます注目されるようになりました。その後、高可用性、高パフォーマンス、高スケーラビリティなどのニーズをより適切に満たすことができる、コンテナ化されたマイクロサービス アーキテクチャが特に重要になってきました。この傾向の下、go-zero と Kubernetes が最も人気のあるコンテナ化されたマイクロサービス フレームワークになりました。

この記事では、go-zero フレームワークと Kubernetes コンテナ オーケストレーション ツールを使用して、高可用性、高パフォーマンス、高スケーラビリティのコンテナ化されたマイクロサービス アーキテクチャを構築する方法を紹介します。まず、go-zero と Kubernetes の基本概念を簡単に理解しましょう。

go-zero は Golang をベースに開発されたマイクロサービス フレームワークで、軽量、高パフォーマンス、シンプルで使いやすいという利点があります。自動コード生成のサポート、幅広いコンポーネント ライブラリとの統合、高パフォーマンスのマイクロサービスの迅速な構築が特徴です。

Kubernetes は、ポータブルで拡張可能なオープンソースのコンテナ オーケストレーション ツールです。その主な機能には、コンテナのデプロイメント、スケーリング、運用とメンテナンスの管理が含まれており、これにより、アプリケーションのコンテナ化プロセスが大幅に簡素化されます。アプリケーションの管理とメンテナンスの向上効率。

ここからは、これら 2 つのツールを組み合わせて、高可用性、高パフォーマンス、高スケーラビリティのコンテナ化されたマイクロサービス アーキテクチャを構築する方法を紹介します。

ステップ 1: マイクロサービス アプリケーションを設計する

go-zero と Kubernetes を使用してマイクロサービス アプリケーションを構築する前に、まずアプリケーションを設計する必要があります。 go-zero フレームワークの特徴は、入力された設計仕様に基づいてコードを自動的に生成する機能であるため、アプリケーションの設計仕様は可能な限り明確である必要があります。

アプリケーションを設計するときは、次の側面を考慮できます。

  1. マイクロサービスの分割: アプリケーションのビジネス ロジックに基づいて、アプリケーションを複数のマイクロサービスに分割します。
  2. マイクロサービスの責任: 各マイクロサービスの機能と責任を決定します。
  3. インターフェイス設計: 入力、出力などを含む、各マイクロサービスのインターフェイスを定義します。
  4. データベース設計: アプリケーションに必要なデータベース テーブル構造を設計します。

ステップ 2: go-zero フレームワークを使用してマイクロサービス コードを生成する

go-zero フレームワークは、ドメイン モデルに基づいた gRPC ベースのマイクロサービス コードの自動生成をサポートしています。手作業の削減 コードの作成にかかる時間と労力。

アプリケーションの go-zero フレームワークを選択する場合は、アプリケーションが次の特性を備えていることを確認する必要があります。

  1. gRPC に基づくマイクロサービス通信: gRPC は高性能です。 、クロス言語、クロスプラットフォーム プラットフォームの RPC フレームワークは効率的で、安全で、信頼性があります。
  2. 宣言型 API 設計のサポート: Swagger2 を通じて API 仕様を定義し、API ドキュメントと SDK を生成します。
  3. 自動コード生成: ドメイン モデルに従って、gRPC ベースのマイクロサービス コードを自動的に生成します。

goctl ツールを使用してマイクロサービス コードを生成すると、開発効率が大幅に向上します。 order という名前のマイクロサービスを開発するとします。生成されるコード コマンドは次のとおりです:

$ goctl api new -o order

生成されるファイル構造は次のとおりです:

order
├── api
│   └── order.api
├── etc
└── internal
    ├── config
    │   └── config.go
    └── logic
        ├── orderlogic.go
        └── orderlogic_test.go

このうち、order.api は API 仕様を定義します。 orderlogic.go は order マイクロサービスのビジネス ロジックを実装し、config.go はマイクロサービスの構成情報を定義します。

ステップ 3: マイクロサービスのコンテナ化

マイクロサービスのコンテナ化は、Go-zero アプリケーションを Kubernetes クラスターにデプロイするために必要なプロセスです。コンテナ化されたアプリケーションは、より柔軟、スケーラブルかつ効率的にデプロイおよび管理できます。次に、注文マイクロサービスのコンテナー イメージを作成します。

  1. コンテナ イメージを構築するための Dockerfile ファイルをアプリケーションのルート ディレクトリに作成します。
# 基于golang的官方镜像构建
FROM golang:1.13.8-alpine

# 在容器中创建一个工作目录
RUN mkdir -p /go/src/order
WORKDIR /go/src/order

# 将当前目录下的所有文件复制到容器中的 /go/src/order 目录下
COPY . /go/src/order

# 安装go-zero框架和依赖项
RUN cd /go/src/order && 
    go get -u github.com/tal-tech/go-zero && 
    go mod download

# 构建容器镜像
RUN cd /go/src/order && 
    CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo

# 启动容器时运行的命令
CMD ["/go/src/order/order"]
  1. コンテナ イメージを構築します
$ docker build -t order:v1.0.0 .
  1. コンテナを実行します
$ docker run -d -p 8080:8080 order:v1.0.0

次の方法で注文マイクロをテストできます。ローカルでのcurlコマンド サービスが正しく実行されているかどうか。

ステップ 4: Kubernetes を使用してマイクロサービスをデプロイする

Kubernetes を使用してコンテナ化されたマイクロサービスをデプロイする前に、マイクロサービスを Docker ウェアハウスにプッシュする必要があります。

  1. イメージを Docker Hub にプッシュします
$ docker tag order:v1.0.0 <dockerhub-username>/order:v1.0.0
$ docker push <dockerhub-username>/order:v1.0.0
  1. デプロイメントの作成

デプロイメントは、ポッドのレプリカ セットを管理するために使用されますポッドの数、セキュリティのアップグレード、ロールバックなどを制御できます。

次のデプロイメント YAML ファイルを使用して、order という名前のデプロイメントを作成できます。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: order
spec:
  replicas: 2
  selector:
    matchLabels:
      app: order
  template:
    metadata:
      labels:
        app: order
    spec:
      containers:
      - name: order
        image: <dockerhub-username>/order:v1.0.0
        imagePullPolicy: Always
        ports:
        - containerPort: 8080

このファイルは、order という名前のデプロイメントを定義します。これには、コピー数、コンテナー名、ミラー アドレス、その他の情報が含まれます。

  1. サービスの作成

サービスは、外部ネットワーク リクエストをポッドに対応するコンテナにルーティングするために使用され、ポッドがコンテナにアクセスするための静的 IP と DNS 名を提供します。ポッド。

次のサービス YAML ファイルを使用して、order という名前のサービスを作成できます。

apiVersion: v1
kind: Service
metadata:
  name: order
spec:
  selector:
    app: order
  ports:
  - name: http
    port: 8080
    protocol: TCP
    targetPort: 8080
  type: ClusterIP

このファイルは、サービス名、ポート設定、アクセス プロトコル、その他の情報を含む、order という名前のサービスを定義します。

  1. アプリケーションのデプロイ

次のコマンドを実行してアプリケーションをデプロイします。

$ kubectl apply -f order.yaml

このコマンドは、order.yaml ファイルからデプロイメントおよびサービスの構成情報を読み取り、対応するデプロイメントおよびサービスのオブジェクトを作成します。

次に、次のコマンドを使用してポッドのステータスを確認します。

$ kubectl get pod -l app=order

このコマンドは、実行中のポッドのリストとステータスを表示します。

ステップ 5: 負荷分散と自動スケーリングを実装する

マイクロサービスのスケーラビリティと信頼性を向上させるには、自動スケーリングと負荷分散を実装する必要があります。 Kubernetes では、これら 2 つの機能を実装するために、水平ポッド オートスケーラーとサービスが使用されます。

  1. 实现负载均衡

在使用Kubernetes部署微服务时,Service用于将外部网络请求路由到Pod对应的容器中,可以提供均衡负载的功能。可以使用loadBalancer配置实现负载均衡。

可以通过下面的Service YAML文件的loadBalancer配置实现负载均衡。

apiVersion: v1
kind: Service
metadata:
  name: order
spec:
  selector:
    app: order
  ports:
  - name: http
    port: 8080
    protocol: TCP
    targetPort: 8080
  type: LoadBalancer
  1. 实现自动伸缩

在Kubernetes中,使用Horizontal Pod Autoscaler(HPA)可以实现自动伸缩。HPA使用指标来监控Pod的CPU利用率和其他资源使用情况,并根据阈值进行自动扩展或缩小。

可以通过下面的HPA YAML文件来实现自动伸缩。

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: order
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: order
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 60

该文件定义了一个名为order的HPA,其中包括目标Deployment、最少Pod副本数、最多Pod副本数、监控指标等信息。

第六步:应用调试和监控

在微服务应用部署后,需要对应用进行调试和监控。这可以帮助检测和解决应用中出现的问题,并对应用进行优化调整。

对于go-zero框架,可以使用goctl工具生成API文档和Swagger接口文档。由于Swagger定义了API规范,因此可以使用Swagger UI来可视化展示API接口。

对于Kubernetes,可以使用Prometheus、Grafana和ELK等工具进行集群监控和日志分析。Kubernetes还支持Ingress对象来管理HTTP/HTTPS路由,可以用Ingress-Nginx实现日志收集和代理。

结论

go-zero与Kubernetes是构建容器化微服务架构的最佳组合之一,能够提供高可用性、高性能、高扩展性等优势。在实践中,需要进行应用设计、go-zero代码生成、容器化、Kubernetes部署、负载均衡和自动伸缩等步骤,并对应用进行调试和监控。通过这些步骤,可以构建出一个高度可靠、安全、高效的微服务应用程序。

以上がgo-zero と Kubernetes の実践: 高可用性、高パフォーマンス、高スケーラビリティを備えたコンテナ化されたマイクロサービス アーキテクチャの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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