云原生技术开发-简单REST应用开发日志
项目简介
基于 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 可视化展示扩容效果及系统响应过程。