第三代微服务架构:基于 Go 的博客微服务实战案例,支持分布式事务

这是一个可一键部署在 Kubernetes-Istio 集群中的,基于 Golang 的博客微服务 Demo,支持分布式事务。

项目地址:https://github.com/jxlwqq/blog-microservices ,欢迎 Star 和 PR。

架构

第三代微服务架构:基于 Go 的博客微服务实战案例,支持分布式事务

Kiali Console

第三代微服务架构:基于 Go 的博客微服务实战案例,支持分布式事务

目录结构

主要遵循 Standard Go Project Layout 推荐的目录分层。

使用的依赖:

gRPC 通信协议

GORM 数据库 ORM

DTM 分布式事务管理器

Jaeger 分布式追踪

Prometheus 监控系统

Grafana 数据可视化

Kiali 可观察性工具

Kubernetes 容器编排

Istio 服务网格

Makefile 简介 命令 说明
make init   安装各类 protoc-gen-* 、 wire 以及 migrate  
make protoc   基于 *.proto 文件,生成各类 *_pb.go  
make wire   基于 wire.go 文件,生成 wire_gen.go  
make test   测试  
make migrate-up   迁移数据库  
make migrate-down   回滚数据库  
make blog-server   启动 blog 服务(本地开发环境)  
make user-server   启动 user 服务(本地开发环境)  
make post-server   启动 post 服务(本地开发环境)  
make comment-server   启动 comment 服务(本地开发环境)  
make auth-server   启动 auth 服务(本地开发环境)  
make dtm-server   DTM 为外部依赖,启动本地服务,请浏览 官方文档  
make docker-build   构建 Docker 镜像  
make kube-deploy   在集群中部署 blog、user、post、comment、auth 以及 dtm 服务  
make kube-delete   在集群中删除上述服务  
make kube-redeploy   在集群中重新部署服务(⚠️ 数据库服务不会重新部署)  
本地环境搭建

docker-desktop >= 4.3.2

kubernetes >= 1.22.4

go >= 1.17

istioctl >= 1.12.1

protobuf >= 3.19.1

下载安装 Docker Desktop ,并启动内置的 Kubernetes 集群。

# 安装 Go brew install go # 安装 Protobuf brew install protobuf # 安装 Istio brew install istioctl kubectl config use-context docker-desktop istioctl install -y kubectl label namespace default istio-injection=enabled

ARM64 架构的用户安装 Istio,请查看 以获取更多信息。

一键部署到本地集群

数据库初始化,项目相关的配置已经在 deployments 目录中的 yaml 文件中设置好,直接一键部署即可。

部署的资源比较多,请尽可能地将 Docker Desktop 的 CPU、Memory 拉高,避免 Pod 无法完成调度,详见 这里。

make docker-build make kube-deploy

查看 Pod 资源:

kubectl get pods -A

返回:

NAMESPACE NAME READY STATUS RESTARTS AGE default auth-server-678f9d4b4-lhkf8 2/2 Running 0 101s default blog-server-6475d7bdd5-6t9jk 2/2 Running 0 101s default comment-db-59665d87f8-plswq 2/2 Running 0 101s default comment-server-857445775b-qkpm5 2/2 Running 3 (74s ago) 100s default dtm-db-cb8c45698-qms8q 2/2 Running 0 102s default dtm-server-c548d67cc-xcv2z 2/2 Running 0 102s default post-db-867f5f85db-zz64g 2/2 Running 0 101s default post-server-5448dc5b67-mdhcc 2/2 Running 4 (54s ago) 101s default user-db-fcfd47bf8-dh9kp 2/2 Running 0 101s default user-server-78688485b8-zf5tc 2/2 Running 3 (76s ago) 101s istio-system grafana-6ccd56f4b6-tp84j 1/1 Running 0 100s istio-system istio-egressgateway-67dc4b96cd-2gm6s 1/1 Running 5 13d istio-system istio-ingressgateway-68d897fbcd-thvt9 1/1 Running 5 13d istio-system istiod-66dc55cd96-r6cnv 1/1 Running 5 13d istio-system jaeger-9dd685668-wdzsz 1/1 Running 0 100s istio-system kiali-79b86ff5bc-jh6v8 1/1 Running 0 100s istio-system prometheus-64fd8ccd65-4c5nc 2/2 Running 0 99s kube-system coredns-558bd4d5db-5nlbz 1/1 Running 5 13d kube-system coredns-558bd4d5db-m46lb 1/1 Running 5 13d kube-system etcd-docker-desktop 1/1 Running 13 13d kube-system kube-apiserver-docker-desktop 1/1 Running 13 13d kube-system kube-controller-manager-docker-desktop 1/1 Running 13 13d kube-system kube-proxy-mj6x8 1/1 Running 5 13d kube-system kube-scheduler-docker-desktop 1/1 Running 13 13d kube-system storage-provisioner 1/1 Running 11 13d kube-system vpnkit-controller 1/1 Running 177 (2m56s ago) 13d

查看 Service 资源:

kubectl get services -A

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzfxs.html