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:
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:
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.
# 基于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
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.
$ docker tag order:v1.0.0 <dockerhub-username>/order:v1.0.0 $ docker push <dockerhub-username>/order:v1.0.0
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.
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.
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.
在使用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部署、负载均衡和自动伸缩等步骤,并对应用进行调试和监控。通过这些步骤,可以构建出一个高度可靠、安全、高效的微服务应用程序。
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!