项目简介

基于 Spring Boot 开发一个 REST 应用,并结合云原生技术栈(Docker、 Kubernetes、Jenkins、Prometheus、Grafana)完成限流控制、持续集成部署、指标采集与扩容 验证的全流程实践。

功能开发

实现REST接口

实现一个简单的 REST API 接口(如 /hello),返回固定 JSON 数据:

{"msg": "hello"} 

实现限流控制

要求接口支持限流功能:当请求频率超过每秒 100 次时,返回 HTTP 状态码 429 Too Many Requests

限流实现方式不限,可选择:

  • 本地限流库(如:Guava RateLimiter、Bucket4j);
  • 使用 Spring Cloud Gateway 限流插件;
  • 自定义拦截器 + 原子计数器等。

暴露访问指标给 Prometheus

应用需暴露接口访问频率(QPS)等指标,供 Prometheus 采集。Actuator + Micrometer 已自动 统计 HTTP 请求,指标为:

# 某接口请求次数(已分状态码、方法等标签) 
http_server_requests_seconds_count 
# 某接口响应时间总和(单位为秒) 
http_server_requests_seconds_sum 

统一限流机制

当服务部署多个副本(Pod)时,实现全局统一限流功能:当服务以多个副本(Pod)部署在 Kubernetes 中时,所有实例共享同一个限流策略,而不是每个实例独立计算。可以使用 Bucket4j + Redis 方案。

DevOps 流水线构建与部署

编写 Dockerfile 构建镜像

编写项目的 Dockerfile,构建出可运行的 Spring Boot 镜像,建议使用多阶段构建。

编写 Kubernetes YAML 文件

准备以下资源对象的 YAML 文件:

  • Deployment(包含多个副本);
  • Service(暴露服务);
  • ServiceMonitor 配置。

要求支持 imagePullPolicy、资源限制等规范配置项。

持续集成流水线

编写 Jenkins CI 流水线脚本(Jenkinsfile),实现以下功能:

  • 拉取代码;
  • 构建项目(例如使用 Maven/Gradle);
  • 运行至少一个单元测试;
  • 构建并推送 Docker 镜像到镜像仓库。

代码提交自动触发流水线

配置 Git 仓库 Webhook,实现持续集成部署流水线的自动触发

监控与弹性扩展实践

采集 Prometheus 指标

通过配置 ServiceMonitor,实现 Prometheus 对部署在 Kubernetes 中的 Spring Boot 应用的 /actuator/prometheus 指标采集。

配置 Grafana 监控面板

在 Grafana 中创建自定义 Dashboard,包括:

  • CPU 使用率;
  • 内存使用率;
  • JVM 指标(堆内存、线程数、GC 次数);
  • 请求QPS、请求平均响应时间。

压测验证监控效果

使用压测工具(或者自己写程序)对接口进行压测;

在 Grafana 面板中观察指标变化,并撰写简要说明(截图或指标分析)

配置自动扩容

通过配置 Kubernetes 的 HPA(Horizontal Pod Autoscaler),基于负载指标(如请求 QPS)实现应用实例的自动扩缩容。同时,结合压测工具和 Grafana 可视化展示扩容效果及系统响应过程。

日志