Skip to content

基础设施配置

**本文引用的文件** - [nacos.yml](file://lemes-cloud/src/devops/docker-compose/nacos.yml) - [nacos-standalone.yml](file://lemes-cloud/src/devops/docker-compose/nacos-standalone.yml) - [docker-compose.yml](file://lemes-cloud/src/devops/docker-compose/docker-compose.yml) - [base.yml](file://lemes-cloud/src/devops/docker-compose/base.yml) - [lemes-nacos-pgsql.yaml](file://lemes-cloud/src/devops/console/k8s/template/lemes-nacos-pgsql.yaml) - [lemes-nacos.yaml](file://lemes-cloud/src/devops/console/k8s/template/lemes-nacos.yaml) - [lemes-gateway](file://lemes-cloud/lemes-gateway) - [RouterController.java](file://lemes-cloud/lemes-gateway/src/main/java/com/lenovo/lemes/gateway/controller/RouterController.java) - [bootstrap.yml(认证服务)](file://lemes-cloud/lemes-auth/src/main/resources/bootstrap.yml) - [lemes-gateway README](file://lemes-cloud/lemes-gateway/README.md) - [redis.yaml](file://lemes-cloud/src/devops/console/k8s/template/redis.yaml) - [redis-cluster.yaml](file://lemes-cloud/src/devops/k8s/service/base/redis-cluster.yaml) - [RedisConfig.java](file://lemes-cloud/lemes-framework/lemes-framework-core/src/main/java/com/lenovo/lemes/framework/core/config/RedisConfig.java) - [zookeeper.yaml](file://lemes-cloud/src/devops/console/k8s/template/zookeeper.yaml) - [lemes-nabfweb.yaml](file://lemes-cloud/src/devops/console/k8s/template/nabfweb.yaml) - [nabfweb.yaml](file://lemes-cloud/src/devops/k8s/service/expose-port/nabfweb.yaml) - [skywalking.yaml](file://lemes-cloud/src/devops/k8s/service/base/skywalking.yaml) - [nabfweb.yaml(暴露端口)](file://lemes-cloud/src/devops/k8s/service/expose-port/nabfweb.yaml) - [lemes-service-pcg-report.yaml](file://lemes-cloud/src/devops/k8s/service/expose-port/lemes-service-pcg-report.yaml) - [lemes-service-pcg-report.yaml(暴露端口)](file://lemes-cloud/src/devops/k8s/service/expose-port/lemes-service-pcg-report.yaml) - [lemes-websocket-server WebSocketConfig.java](file://lemes-cloud/lemes-websocket/lemes-websocket-server/src/main/java/com/lenovo/lemes/websocket/server/config/WebSocketConfig.java) - [lemes-framework-datasource pom.xml](file://lemes-cloud/lemes-framework/lemes-framework-datasource/pom.xml) - [lemes-framework-datasource 数据库适配接口](file://lemes-cloud/lemes-framework/lemes-framework-datasource/src/main/java/com/lenovo/lemes/datasource/adapter/DataBaseAdapter.java) - [lemes-framework-datasource 动态库名常量](file://lemes-cloud/lemes-framework/lemes-framework-datasource/src/main/java/com/lenovo/lemes/datasource/constants/DynamicDbName.java) - [lemes-job-devicemate-executor application.yml](file://lemes-job-devicemate/lemes-job-devicemate-executor/src/main/resources/application.yml)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件面向基础设施工程师,系统性梳理 DeviceMate 项目的基础设施配置与部署要点,覆盖以下方面:

  • Nacos 配置中心:服务注册、配置管理、集群部署、数据持久化
  • 数据库:PostgreSQL 主从复制、读写分离、备份策略、高可用架构
  • 缓存:Redis 单机、哨兵、集群、数据分片策略
  • 消息队列:RabbitMQ 集群、持久化、镜像队列、消费者组管理
  • 网关:路由规则、负载均衡、熔断降级、限流策略
  • 监控:Prometheus、Grafana、Alertmanager、日志收集栈
  • 提供可操作的部署与配置指导

项目结构

本项目采用多模块 Maven 结构,基础设施相关配置主要集中在 lemes-cloud 的 devops 与 console 目录中,涵盖 Docker Compose 与 Kubernetes YAML 模板。

图表来源

章节来源

核心组件

  • Nacos 配置中心:支持单机与集群模式,通过环境变量注入数据库与集群地址,提供服务发现与配置下发能力。
  • 网关服务:基于 Spring Cloud Gateway,提供路由列表查询与动态刷新能力。
  • 认证服务:集成 Nacos 发现与配置,管理客户端访问令牌有效期。
  • 缓存:提供 Redis 单实例与 Redis 集群模板,支持哨兵与分片策略。
  • 消息队列:提供 ZooKeeper 模板用于 MQ 集群元数据管理。
  • 监控:SkyWalking UI 暴露端口,便于可视化追踪。

章节来源

架构总览

下图展示基础设施层的关键交互:应用通过网关访问认证服务与业务服务,认证服务与配置中心进行交互,缓存与消息中间件支撑业务运行。

图表来源

详细组件分析

Nacos 配置中心

  • 单机与集群模式
    • 单机:通过环境变量 MODE=standalone 启动,适合开发与测试。
    • 集群:通过 NACOS_SERVERS 注入集群节点,结合数据库持久化实现高可用。
  • 数据持久化
    • 支持 MySQL/PostgreSQL,模板中提供 JDBC 代理以兼容不同数据库平台。
  • 服务注册与配置管理
    • 应用通过 discovery.server-addr 与 config.server-addr 连接 Nacos,共享配置按命名空间与文件扩展名加载。
  • 集群部署要点
    • StatefulSet 控制副本数与稳定网络标识,Ingress 暴露管理后台路径。
    • 通过 ConfigMap 注入数据库连接参数,确保跨 Pod 参数一致性。

图表来源

章节来源

网关服务

  • 路由规则
    • 通过 GatewayProperties 获取已定义路由,提供 /gateway-router/list 接口输出路由组件与模块映射。
  • 动态刷新
    • 通过 Actuator 端点触发网关路由刷新,保障配置变更即时生效。
  • 负载均衡与熔断降级
    • 可结合 Spring Cloud Circuit Breaker 与负载均衡策略在应用侧实现。
  • 限流策略
    • 可通过 Gateway 自带的限流过滤器或第三方限流组件实现。

图表来源

章节来源

缓存集群

  • 单机模式
    • 通过 ConfigMap 注入 redis.conf,启用持久化与密码保护,提供健康检查探针。
  • 集群模式
    • StatefulSet 部署 6 节点集群,开启 cluster-enabled,使用 gossip 端口进行节点通信。
  • 分片策略
    • 集群模式下由 Redis 内部进行槽位分片,建议配合客户端路由策略实现高可用与弹性扩容。
  • 哨兵模式
    • 可在应用侧通过 Sentinel 客户端实现高可用读写分离与故障转移。

图表来源

章节来源

消息队列集群

  • ZooKeeper 元数据
    • 提供 ZooKeeper 模板,用于维护 MQ 集群元数据与领导者选举。
  • RabbitMQ 集群
    • 建议在独立部署环境中使用 HAProxy 或 Kubernetes Headless Service 实现集群与负载均衡。
    • 队列持久化与镜像队列需在 RabbitMQ 配置中启用,消费者组管理可通过客户端库实现。
  • 集成建议
    • 将 MQ 与业务服务解耦,通过网关统一接入与鉴权。

章节来源

认证服务与配置管理

  • 认证服务通过 Nacos 发现与配置,管理客户端访问令牌有效期,支持优雅停机与端点暴露。
  • 配置加载策略
    • 通过命名空间与文件扩展名加载共享配置,避免硬编码。

章节来源

监控基础设施

  • SkyWalking UI
    • 通过 NodePort 暴露 UI 服务,便于本地调试与可视化追踪。
  • Prometheus/Grafana/Alertmanager
    • 建议在生产环境引入 Prometheus 抓取指标、Grafana 可视化、Alertmanager 告警,结合应用埋点与探针完善监控体系。

章节来源

数据库与高可用

  • PostgreSQL 主从复制与读写分离
    • 建议在应用侧通过连接池与路由实现读写分离,主库负责写入,从库承担读请求。
  • 备份策略
    • 建议采用定时快照与 WAL 归档相结合的方式,确保可恢复到任意时间点。
  • 高可用架构
    • 结合数据库集群(如 Patroni/Repmgr)与 VIP/代理层实现自动故障转移。

章节来源

依赖关系分析

  • 组件耦合
    • 网关依赖认证服务与业务服务;认证服务依赖 Nacos;业务服务依赖缓存与消息中间件。
  • 外部依赖
    • Nacos 支持多种数据库后端;Redis 集群依赖稳定的 Pod IP 与 gossip 端口;ZooKeeper 用于 MQ 元数据管理。
  • 循环依赖
    • 代码层面未见循环依赖迹象;部署层面建议通过网关与命名空间隔离降低耦合。

图表来源

性能考量

  • 缓存命中率
    • 合理设置键空间过期策略与内存上限,避免 OOM;对热点数据进行预热。
  • 数据库连接池
    • 根据 QPS 调整最大连接数与超时时间,避免连接风暴。
  • 网关限流
    • 在网关层实施基于 IP/用户维度的限流,防止突发流量冲击下游。
  • 监控与告警
    • 建立关键指标阈值与告警通道,提前发现性能瓶颈。

故障排查指南

  • Nacos 无法注册/拉取配置
    • 检查 discovery.server-addr 与命名空间是否正确;确认数据库连通性与凭证。
  • 网关路由不生效
    • 执行路由刷新端点并确认路由定义;核对网关日志与 Actuator 输出。
  • 缓存连接异常
    • 校验密码与网络连通性;检查 AOF/持久化目录权限。
  • MQ 集群元数据异常
    • 清理 ZooKeeper 临时节点并重启服务;核对集群成员列表。

章节来源

结论

本文基于现有配置文件,给出了 DeviceMate 项目基础设施的部署与配置要点。建议在生产环境进一步完善数据库高可用、缓存与消息队列的监控与告警体系,并在网关层强化安全与限流策略,以提升整体稳定性与可观测性。

附录

  • 服务暴露示例
    • NabfWeb 与 PCG 报表服务通过 Ingress/NodePort 暴露,便于外部访问与集成。
  • WebSocket 集成
    • WebSocket 服务配置了 STOMP Broker 与用户前缀,便于实时消息推送。

章节来源