インターネットの規模が継続的に拡大し、ユーザーのニーズが高まるにつれ、マイクロサービス アーキテクチャの利点がますます注目されるようになりました。その後、高可用性、高パフォーマンス、高スケーラビリティなどのニーズをより適切に満たすことができる、コンテナ化されたマイクロサービス アーキテクチャが特に重要になってきました。この傾向の下、go-zero と Kubernetes が最も人気のあるコンテナ化されたマイクロサービス フレームワークになりました。
この記事では、go-zero フレームワークと Kubernetes コンテナ オーケストレーション ツールを使用して、高可用性、高パフォーマンス、高スケーラビリティのコンテナ化されたマイクロサービス アーキテクチャを構築する方法を紹介します。まず、go-zero と Kubernetes の基本概念を簡単に理解しましょう。
go-zero は Golang をベースに開発されたマイクロサービス フレームワークで、軽量、高パフォーマンス、シンプルで使いやすいという利点があります。自動コード生成のサポート、幅広いコンポーネント ライブラリとの統合、高パフォーマンスのマイクロサービスの迅速な構築が特徴です。
Kubernetes は、ポータブルで拡張可能なオープンソースのコンテナ オーケストレーション ツールです。その主な機能には、コンテナのデプロイメント、スケーリング、運用とメンテナンスの管理が含まれており、これにより、アプリケーションのコンテナ化プロセスが大幅に簡素化されます。アプリケーションの管理とメンテナンスの向上効率。
ここからは、これら 2 つのツールを組み合わせて、高可用性、高パフォーマンス、高スケーラビリティのコンテナ化されたマイクロサービス アーキテクチャを構築する方法を紹介します。
ステップ 1: マイクロサービス アプリケーションを設計する
go-zero と Kubernetes を使用してマイクロサービス アプリケーションを構築する前に、まずアプリケーションを設計する必要があります。 go-zero フレームワークの特徴は、入力された設計仕様に基づいてコードを自動的に生成する機能であるため、アプリケーションの設計仕様は可能な限り明確である必要があります。
アプリケーションを設計するときは、次の側面を考慮できます。
ステップ 2: go-zero フレームワークを使用してマイクロサービス コードを生成する
go-zero フレームワークは、ドメイン モデルに基づいた gRPC ベースのマイクロサービス コードの自動生成をサポートしています。手作業の削減 コードの作成にかかる時間と労力。
アプリケーションの go-zero フレームワークを選択する場合は、アプリケーションが次の特性を備えていることを確認する必要があります。
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 クラスターにデプロイするために必要なプロセスです。コンテナ化されたアプリケーションは、より柔軟、スケーラブルかつ効率的にデプロイおよび管理できます。次に、注文マイクロサービスのコンテナー イメージを作成します。
# 基于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"]
$ docker build -t order:v1.0.0 .
$ docker run -d -p 8080:8080 order:v1.0.0
次の方法で注文マイクロをテストできます。ローカルでのcurlコマンド サービスが正しく実行されているかどうか。
ステップ 4: Kubernetes を使用してマイクロサービスをデプロイする
Kubernetes を使用してコンテナ化されたマイクロサービスをデプロイする前に、マイクロサービスを Docker ウェアハウスにプッシュする必要があります。
$ docker tag order:v1.0.0 <dockerhub-username>/order:v1.0.0 $ docker push <dockerhub-username>/order:v1.0.0
デプロイメントは、ポッドのレプリカ セットを管理するために使用されますポッドの数、セキュリティのアップグレード、ロールバックなどを制御できます。
次のデプロイメント 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 という名前のデプロイメントを定義します。これには、コピー数、コンテナー名、ミラー アドレス、その他の情報が含まれます。
サービスは、外部ネットワーク リクエストをポッドに対応するコンテナにルーティングするために使用され、ポッドがコンテナにアクセスするための静的 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 という名前のサービスを定義します。
次のコマンドを実行してアプリケーションをデプロイします。
$ kubectl apply -f order.yaml
このコマンドは、order.yaml ファイルからデプロイメントおよびサービスの構成情報を読み取り、対応するデプロイメントおよびサービスのオブジェクトを作成します。
次に、次のコマンドを使用してポッドのステータスを確認します。
$ kubectl get pod -l app=order
このコマンドは、実行中のポッドのリストとステータスを表示します。
ステップ 5: 負荷分散と自動スケーリングを実装する
マイクロサービスのスケーラビリティと信頼性を向上させるには、自動スケーリングと負荷分散を実装する必要があります。 Kubernetes では、これら 2 つの機能を実装するために、水平ポッド オートスケーラーとサービスが使用されます。
在使用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
在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 サイトの他の関連記事を参照してください。