关于

使用NestJs开发并部署在Kubernetes上的微服务应用程序

先决条件和工具

  • Nestjs
  • Flutter
  • Azure账户
  • Kubernetes
  • Terraform
  • Helm
  • Prometheus
  • Grafana
  • ArgoCD
  • OpenTelemetry

概述(开发)

Koultime是一款移动应用程序,可以帮助您找到最喜欢的食物并在线订购。

前端

  • 使用Flutter开发的移动应用程序

后端

  • 使用Nest.js开发的微服务应用程序

选择微服务架构的原因是:

  • 添加新服务的灵活性
  • 当订单需求量大时,能够独立扩展订单服务的能力

服务

  • 订单微服务

    • 创建订单
    • 获取订单列表
  • 产品微服务

    • 获取产品列表
    • 创建新产品
  • 微服务通过API网关进行通信

架构

概述(运维)

部署

  • 客户端只能与API网关通信:我们应该公开公共IP。

  • 对于微服务,我们应该只允许来自API网关的流量。

  • 不同的应用程序隔离在自己的命名空间中(这使我们能够拥有多环境)

  • 数据库连接是通过连接字符串(由MongoDB Atlas提供)建立的,并存储在Secret中。

  • 我使用ConfigMap来存储API网关用于向微服务发送请求的服务名称。

工作负载健康跟踪

/health路由负责返回Pod的健康状况,该功能使用terminus包实现。

在部署定义中添加了livenessprobe,以便根据/health的响应来跟踪健康状况。

Helm

我为每个微服务创建了带有values文件的Helm图表。

在此处查看图表 此处

我使用了Prometheus和Grafana的图表进行监控。

自动化

集群的配置由第一个Terraform堆栈完成。ArgoCD的Helm发布配置由第二个Terraform堆栈完成。

部署通过ArgoCD自动化。

API网关的网络可视化

API网关的树状结构

订单微服务的树状结构

监控

指标

  • 不同的指标使用Prometheus进行设置。

    • CPU使用率、内存使用率、请求数量等。
  • 一个业务指标称为orders,负责计算请求的订单数量。

我们可以使用Grafana可视化不同的指标。

日志

使用Nest.js的logger收集日志。

测试项目

    Make sure that you have  all the tools installed
  • 克隆项目
  • script文件夹下,您会找到脚本。
    • 执行init_tf.bash
    • 连接到集群
    • 执行init_helm.bash

GitHub

查看 Github