Heim  >  Artikel  >  Backend-Entwicklung  >  Die Praxis von Go-Zero und Kubernetes: Aufbau einer containerisierten Microservice-Architektur mit hoher Verfügbarkeit, hoher Leistung und hoher Skalierbarkeit

Die Praxis von Go-Zero und Kubernetes: Aufbau einer containerisierten Microservice-Architektur mit hoher Verfügbarkeit, hoher Leistung und hoher Skalierbarkeit

王林
王林Original
2023-06-22 09:26:381538Durchsuche

Mit der kontinuierlichen Erweiterung des Internets und den steigenden Bedürfnissen der Benutzer erhalten die Vorteile der Microservice-Architektur immer mehr Aufmerksamkeit. In der Folge ist die Container-Microservice-Architektur besonders wichtig geworden, da sie die Anforderungen an hohe Verfügbarkeit, hohe Leistung, hohe Skalierbarkeit und andere Aspekte besser erfüllen kann. Im Zuge dieses Trends haben sich Go-Zero und Kubernetes zu den beliebtesten Container-Microservice-Frameworks entwickelt.

In diesem Artikel erfahren Sie, wie Sie mit dem Go-Zero-Framework und dem Kubernetes-Container-Orchestrierungstool eine hochverfügbare, leistungsstarke und hochskalierbare Container-Microservice-Architektur erstellen. Lassen Sie uns zunächst kurz die Grundkonzepte von Go-Zero und Kubernetes verstehen.

go-zero ist ein auf Golang basierendes Microservice-Framework, das die Vorteile von geringem Gewicht, hoher Leistung, Einfachheit und Benutzerfreundlichkeit bietet. Es bietet Unterstützung für die automatische Codegenerierung, die Integration mit einer Vielzahl von Komponentenbibliotheken und die schnelle Erstellung leistungsstarker Microservices.

Kubernetes ist ein portables, erweiterbares Open-Source-Container-Orchestrierungstool. Zu seinen Hauptfunktionen gehören die Verwaltung der Bereitstellung, Skalierung sowie der Betrieb und die Wartung von Containern. Es kann den Containerisierungsprozess von Anwendungen erheblich vereinfachen und die Effizienz von Anwendungen verbessern Effizienz.

Jetzt beginnen wir mit der Einführung, wie diese beiden Tools kombiniert werden können, um eine Container-Microservice-Architektur mit hoher Verfügbarkeit, hoher Leistung und hoher Skalierbarkeit aufzubauen.

Schritt eins: Entwerfen Sie eine Microservice-Anwendung

Bevor Sie Go-Zero und Kubernetes zum Erstellen einer Microservice-Anwendung verwenden, müssen Sie zunächst die Anwendung entwerfen. Da ein Merkmal des Go-Zero-Frameworks die Fähigkeit ist, automatisch Code basierend auf eingegebenen Designspezifikationen zu generieren, müssen die Designspezifikationen der Anwendung so klar wie möglich sein.

Beim Entwerfen einer Anwendung können Sie die folgenden Aspekte berücksichtigen:

  1. Aufteilung der Microservices: Teilen Sie die Anwendung basierend auf der Geschäftslogik der Anwendung in mehrere Microservices auf.
  2. Microservice-Verantwortlichkeiten: Bestimmen Sie die Funktionen und Verantwortlichkeiten jedes Microservices.
  3. Schnittstellendesign: Definieren Sie die Schnittstelle jedes Mikrodienstes, einschließlich Eingabe, Ausgabe usw.
  4. Datenbankdesign: Entwerfen Sie die für die Anwendung erforderliche Datenbanktabellenstruktur.

Schritt 2: Verwenden Sie das Go-Zero-Framework, um Microservice-Code zu generieren

Das Go-Zero-Framework unterstützt die automatische Generierung von gRPC-basiertem Microservice-Code basierend auf dem Domänenmodell, was den Zeit- und Arbeitsaufwand für das manuelle Schreiben von Code erheblich reduzieren kann.

Bei der Auswahl des Go-Zero-Frameworks für eine Anwendung müssen Sie sicherstellen, dass die Anwendung die folgenden Eigenschaften aufweist:

  1. Microservice-Kommunikation basierend auf gRPC: gRPC ist ein leistungsstarker, sprach- und plattformübergreifender RPC Framework, das effizient, sicher und zuverlässig ist und andere Eigenschaften aufweist.
  2. Unterstützt deklaratives API-Design: Definieren Sie API-Spezifikationen über Swagger2, generieren Sie API-Dokumentation und SDK.
  3. Automatische Codegenerierung: Generieren Sie automatisch gRPC-basierten Microservice-Code basierend auf dem Domänenmodell.

Durch die Verwendung des Goctl-Tools zum Generieren von Microservice-Code kann die Entwicklungseffizienz erheblich verbessert werden. Angenommen, wir möchten einen Microservice mit dem Namen order entwickeln. Der generierte Codebefehl lautet wie folgt:

$ goctl api new -o order

Die generierte Dateistruktur lautet wie folgt:

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

Unter diesen definiert order.api die API-Spezifikation des Microservices und orderlogic.go implementiert die Geschäftslogik des Auftrags-Microservices, config.go definiert die Konfigurationsinformationen des Microservices.

Schritt 3: Containerisieren der Microservices

Die Containerisierung der Microservices ist ein notwendiger Prozess für die Bereitstellung von Go-Zero-Anwendungen in einem Kubernetes-Cluster. Containerisierte Anwendungen können flexibler, skalierbarer und effizienter bereitgestellt und verwaltet werden. Als Nächstes erstellen wir ein Container-Image für den Bestell-Microservice.

  1. Erstellen Sie eine Docker-Datei im Stammverzeichnis der Anwendung, um das Container-Image zu erstellen.
# 基于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. Erstellen Sie das Container-Image
$ docker build -t order:v1.0.0 .
  1. Führen Sie den Container aus
$ docker run -d -p 8080:8080 order:v1.0.0

Sie können den Curl-Befehl lokal verwenden, um zu testen, ob der Bestell-Microservice ordnungsgemäß ausgeführt wird.

Schritt 4: Verwenden Sie Kubernetes zum Bereitstellen von Microservices

Bevor Sie Kubernetes zum Bereitstellen von Container-Microservices verwenden, müssen Sie die Microservices in das Docker-Warehouse übertragen.

  1. Bild an Docker Hub übertragen
$ docker tag order:v1.0.0 <dockerhub-username>/order:v1.0.0
$ docker push <dockerhub-username>/order:v1.0.0
  1. Bereitstellung erstellen

Bereitstellung wird zum Verwalten des Replikatsatzes von Pods verwendet und kann die Anzahl der Pods, sichere Upgrades, Rollbacks usw. steuern.

Sie können über die unten stehende Bereitstellungs-YAML-Datei eine benannte Bereitstellungsreihenfolge erstellen.

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

Diese Datei definiert eine Bereitstellungsreihenfolge mit Namen, die die Anzahl der Kopien, den Containernamen, die Spiegeladresse und andere Informationen enthält.

  1. Dienst erstellen

Der Dienst wird verwendet, um externe Netzwerkanforderungen an den dem Pod entsprechenden Container weiterzuleiten und dem Pod eine statische IP und einen DNS-Namen für den Zugriff auf den Pod bereitzustellen.

Sie können über die folgende Service-YAML-Datei eine Service-Namensbestellung erstellen.

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

Diese Datei definiert eine Service-Namensreihenfolge, die den Servicenamen, die Porteinstellungen, das Zugriffsprotokoll und andere Informationen umfasst.

  1. Bereitstellen der Anwendung

Führen Sie den folgenden Befehl aus, um die Anwendung bereitzustellen.

$ kubectl apply -f order.yaml

Dieser Befehl liest die Bereitstellungs- und Dienstkonfigurationsinformationen aus der Datei order.yaml und erstellt die entsprechenden Bereitstellungs- und Dienstobjekte.

Dann verwenden Sie den folgenden Befehl, um den Status des Pods zu überprüfen.

$ kubectl get pod -l app=order

Dieser Befehl zeigt die Liste der ausgeführten Pods und deren Status an.

Schritt 5: Lastausgleich und automatische Skalierung implementieren

Um die Skalierbarkeit und Zuverlässigkeit von Microservices zu verbessern, müssen wir automatische Skalierung und Lastausgleich implementieren. In Kubernetes werden Horizontal Pod Autoscaler und Service verwendet, um diese beiden Funktionen zu implementieren.

  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部署、负载均衡和自动伸缩等步骤,并对应用进行调试和监控。通过这些步骤,可以构建出一个高度可靠、安全、高效的微服务应用程序。

Das obige ist der detaillierte Inhalt vonDie Praxis von Go-Zero und Kubernetes: Aufbau einer containerisierten Microservice-Architektur mit hoher Verfügbarkeit, hoher Leistung und hoher Skalierbarkeit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn