跳到主要内容

技术架构设计

1. 技术架构总览图

1.1 整体架构图

快速理解:上层用户/设备 → 中层服务端 → 下层基础设施与第三方,一图掌握全貌。

1.2 系统上下文图

1.3 容器图


2. 标准化技术栈与版本锁定

2.1 技术栈总览

层级技术选型版本用途
儿女端 AppUniApp + Vue3 + TypeScript^3.4iOS/Android 双端编译,包名 health.reflekt.app
老人端 App原生 Android(Java + Kotlin)Luma 智能音箱固件,包名 health.reflekt.luma
管理后台Vue3 + TypeScript + ElementPlus^3.5PC Web,最小宽度 1024px
后端框架Dromara RuoYi-Vue-Plus(Spring Boot 3)^5.5业务接口,包名 health.reflekt.api
Java 版本Amazon Corretto17LTS 版本,部署镜像 amazoncorretto:17
数据库Amazon RDS PostgreSQL14+主数据存储,Multi-AZ 部署
缓存Amazon ElastiCache Redis7.2+会话缓存、设备心跳、分布式锁
消息队列Amazon MQ(RabbitMQ)MQTT 协议,雷达设备接入
对象存储Amazon S3语音留言、雷达存档、TTS 音频
容器编排Amazon EKS1.29+托管 Kubernetes 集群
AI 能力OpenAI(GPT-4o + TTS + Whisper)Latest语音对话、TTS 合成
短信/语音TwilioSMS 告警、红色预警语音直拨
iOS 推送Apple APNsFamily App iOS 端推送
Android 推送Google FCMFamily App Android 端推送
监控日志Amazon CloudWatch + AWS X-Ray全链路可观测,TraceID 串联

2.2 后端核心框架特性(RuoYi-Vue-Plus)

特性说明
多租户租户数据隔离,以家庭为单位的独立数据空间
数据权限基于角色/部门的数据过滤,业务代码无感知
数据加密MyBatis 拦截器自动加解密,支持 AES-256
分布式缓存Redisson 实现分布式锁、限流、延迟队列
插件架构模块化插拔,便于按需扩展
代码生成BO/VO/Mapper/Service/Controller 全链路生成
WebSocket支持 Token 鉴权与分布式集群消息同步
对象存储统一 OSS 抽象层,底层使用 Amazon S3
API 认证Sa-Token,JWT Token,会话超时 2 小时

3. 服务模块划分

3.1 服务职责总览

服务服务名核心职责部署服务名调用协议
设备接入服务D1三大硬件统一接入,协议转换,设备心跳监控reflekt-health-device-accessMQTT/HTTP/WebSocket
家属端管理服务D2家庭CRUD、提醒关怀、语音留言、AI对话代理reflekt-health-family-apiREST API
运营管理服务D3设备监控、告警处理、审计日志、配置管理reflekt-health-admin-apiREST API
AI大脑服务D4跌倒判断、AI对话、TTS调度、主动问候reflekt-health-ai-brain内部调用
通知告警服务D5告警规则引擎、三级分发、升级链路、推送短信reflekt-health-notification内部调用

3.2 服务间依赖关系

调用方 \ 被调用方D1 设备接入D2 家属端D3 运营管理D4 AI大脑D5 通知告警
Family AppREST API
Luma AppHTTP/WebSocket
AdminREST API
D1 设备接入设备状态同步转发跌倒事件
D2 家属端转发提醒请求
D4 AI大脑触发告警
D5 通知告警
毫米波雷达MQTT
智能手表HTTP

3.3 服务部署架构


4. 设备接入架构

4.1 三设备接入方式

设备协议方向接入服务数据内容
Luma 智能音箱HTTP + WebSocket双向D1 设备接入服务状态上报、语音对话、指令接收
毫米波雷达MQTT(Amazon MQ)上行D1 设备接入服务跌倒事件、存在感数据
智能手表HTTP双向D1 设备接入服务心率/血氧/步数/睡眠;实时测量指令

4.2 MQTT 接入(雷达)

MQTT Topic 规范

  • 设备上报:/sys/{productKey}/{deviceName}/thing/event/property/post
  • 云端下发:/sys/{productKey}/{deviceName}/thing/service/property/set

消息格式

{
"deviceId": "radar_001",
"timestamp": 1713600000000,
"eventType": "fall_detected",
"data": {
"fallConfidence": 0.92,
"inRoom": true,
"distance": 1.8,
"angle": 30,
"height": 0.5
}
}

4.3 HTTP 接入(手表)

API 限流:埃微手表 API 限流 10 次/小时/设备。后端实现指数退避重试,超限后记录并降级。

4.4 WebSocket 接入(音箱)


5. 数据模型设计

5.1 核心实体

实体表名说明
FAMILYref_family家庭,租户隔离核心单位
ELDERref_elder被照护老人档案
CAREGIVERref_caregiver照护人(家属),含手机号(加密)
DEVICEref_device设备,含类型/luma/radar/watch
DEVICE_EVENTref_device_event设备事件(跌倒/心跳/健康/SOS)
ALERTref_alert告警,含级别/状态/证据包
ESCALATIONref_escalation升级链路记录
NOTIFICATIONref_notification通知下发记录
REMINDERref_reminder提醒计划
REMINDER_LOGref_reminder_log提醒执行日志
MEMORYref_memory情感陪聊记忆话题

5.2 数据库选型与配置

配置项
引擎Amazon RDS for PostgreSQL 14+
部署Multi-AZ(主备双活,自动故障切换)
字符集UTF-8
时区UTC
连接池HikariCP,最大 20 连接/服务实例
加密敏感字段 AES-256(MyBatis 拦截器自动加解密)
备份RDS 自动备份,保留 7 天 + 手动快照
只读副本1 个,用于 Admin 复杂查询

5.3 缓存策略

缓存KeyTTL说明
device:heartbeat:{deviceId}5 min设备最后心跳时间
family:status:{familyId}30s家庭当前六状态
session:{token}2h用户会话,JWT
alert:escalation:{alertId}90s升级链路状态锁

6. 依赖安装命令(Agent 可直接执行)

6.1 后端(API 服务)

# 克隆仓库
git clone https://git.yuyi.tech/chengyisoft/reflekt-health-api.git
cd reflekt-health-api

# 环境准备
sdk install java 17.0.10-tem # 或使用 amazoncorretto:17 Docker 镜像
sdk install maven 3.9.6

# 本地开发(IDE 导入)
# 导入方式:IDEA/Eclipse 导入 Maven 项目
# 运行:mvn spring-boot:run 或直接运行 Application 主类

# Docker 构建
mvn clean package -DskipTests
docker build -t reflekt-health-api:latest .
docker run -p 8080:8080 \
-e SPRING_PROFILES_ACTIVE=prod \
-e AMAZON_MQ_ENDPOINT=${AMAZON_MQ_ENDPOINT} \
-e AMAZON_MQ_USERNAME=${AMAZON_MQ_USERNAME} \
-e AMAZON_MQ_PASSWORD=${AMAZON_MQ_PASSWORD} \
-e TWILIO_ACCOUNT_SID=${TWILIO_ACCOUNT_SID} \
-e TWILIO_AUTH_TOKEN=${TWILIO_AUTH_TOKEN} \
-e TWILIO_PHONE_NUMBER=${TWILIO_PHONE_NUMBER} \
-e OPENAI_API_KEY=${OPENAI_API_KEY} \
-e AWS_S3_BUCKET=${AWS_S3_BUCKET} \
-e AWS_REGION=${AWS_REGION} \
-e AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} \
-e AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} \
reflekt-health-api:latest

6.2 儿女端(Family App)

# 克隆仓库
git clone https://git.yuyi.tech/chengyisoft/reflekt-health-app.git
cd reflekt-health-app

# 安装依赖(pnpm 优先,npm 次之)
pnpm install
# npm install

# 开发调试
pnpm dev:h5 # H5 预览
pnpm dev:ios # iOS 开发版(需 macOS + Xcode)
pnpm dev:android # Android 开发版

# 生产构建
pnpm build:app-ios # iOS .ipa
pnpm build:app-android # Android .apk / .aab

6.3 老人端(Luma App)

# 克隆仓库
git clone https://git.yuyi.tech/chengyisoft/reflekt-health-luma.git
cd reflekt-health-luma

# Android Studio 打开项目
# Gradle Sync → Build → 运行到音箱设备

# 固件构建(CI/CD)
./gradlew assembleRelease

6.4 管理后台(Admin)

# 克隆仓库
git clone https://git.yuyi.tech/chengyisoft/reflekt-health-admin.git
cd reflekt-health-admin

pnpm install

# 开发调试
pnpm dev

# 生产构建
pnpm build:admin
# 输出目录: dist/admin/

7. 环境变量清单

7.1 必需环境变量

变量名说明敏感示例
AMAZON_MQ_ENDPOINTAmazon MQ 接入点b-xxxx.mq.us-east-1.amazonaws.com:5672
AMAZON_MQ_USERNAMEAmazon MQ 用户名admin
AMAZON_MQ_PASSWORDAmazon MQ 密码********
TWILIO_ACCOUNT_SIDTwilio Account SIDACxxxxxxxx
TWILIO_AUTH_TOKENTwilio Auth Token********
TWILIO_PHONE_NUMBERTwilio 发号电话号码+1234567890
OPENAI_API_KEYOpenAI API Keysk-********
AWS_S3_BUCKETS3 Bucket 名称reflekt-health-assets
AWS_REGIONAWS Regionus-east-1
AWS_ACCESS_KEY_IDAWS AccessKeyAKIA********
AWS_SECRET_ACCESS_KEYAWS SecretKey********
APNS_KEY_IDAPNs Key IDXXXXXXXXXX
APNS_TEAM_IDAPNs Team IDYYYYYYYYYY
APNS_KEY_PATHAPNs .p8 证书路径/secrets/apns.p8
FCM_SERVER_KEYFirebase Cloud Messaging Server Key********
EWATRIS_API_ENDPOINT埃微手表 API 端点https://api.ewatris.com

7.2 服务发现与环境隔离

环境标识说明
开发环境dev本地 Docker Compose 启动
预发布环境stagingAWS EKS staging 集群
生产环境prodAWS EKS production 集群

8. 关键设计决策

决策点选择理由
多租户隔离以家庭为隔离单位家庭是 Reflekt 最小业务单元,跨家庭访问严格禁止
设备接入架构统一接入服务 D1,协议转换三种异构设备(MQTT/HTTP/WebSocket)统一封装为内部模型
AI 服务定位独立 D4 服务,不嵌入业务服务AI 对话/TTS/跌倒判断为计算密集型,独立扩缩容
消息队列选型Amazon MQ(RabbitMQ)雷达设备仅支持 MQTT 协议,Amazon MQ 原生支持 MQTT over TLS
缓存策略Redis 缓存心跳 + 会话,DB 存永久状态心跳高频写入不适合 DB,Redis 提供毫秒级读写
文件存储Amazon S3语音留言/TTS 音频/雷达存档,需持久化存储与 CDN 分发
移动推送APNs + FCM 双通道iOS/Android 双平台各选最优方案,互为备份
告警升级D5 独立服务,Redisson 分布式锁升级链路跨越多服务,需原子性和一致性保证
WebSocketSa-Token Token 鉴权,分布式集群同步Luma 设备需长连接,支持指令下发与事件上报
API 认证Sa-Token + JWT,2 小时会话超时成熟国产框架,与 RuoYi-Vue-Plus 深度集成
数据加密MyBatis 拦截器自动加解密联系方式/疾病史等字段零感知加密,业务代码无侵入
视频通话MVP 不做(改为音频通话)MVP 聚焦核心告警链路,WebRTC 复杂度高,延期至 v1.1

9. 全链路数据流


10. 非功能性需求摘要

维度指标目标值
性能API 查询响应时间 P95< 200ms
性能API 写入响应时间 P95< 500ms
性能红色预警端到端延迟< 5 分钟
性能设备心跳上报成功率≥ 99.5%
性能峰值吞吐量≥ 100 TPS
可用性系统 SLA99.9%
可用性故障恢复时间 RTO< 30 分钟
可用性数据恢复点 RPO< 5 分钟
安全传输加密TLS 1.2+(HTTPS/WSS)
安全敏感字段加密AES-256
安全认证机制JWT Token,2 小时超时
安全数据隔离以家庭为单位的租户隔离
合规HIPAA 合规100% 满足
合规日志保留期≥ 12 个月
适老化Luma App 字号最小值≥ 18pt
适老化Family App 字号最小值≥ 16pt
适老化核心操作步骤≤ 3 步

11. 风险与已知约束

风险ID风险描述影响缓解措施
RISK-01Amazon MQ 单连接心跳 60s,低于雷达心跳设计设备频繁标记离线设备端本地离线缓存,断连补发
RISK-02埃微 API 限流 10 次/小时/设备心率数据实时性受限后端下发实时测量指令触发主动上报
RISK-03Twilio SMS 限流 10 条/日/手机号红色预警无法 100% 送达推送 + 直拨双通道降级,直拨优先穿透
RISK-04OpenAI 配额 GPT-4o + TTS 共用高并发场景相互挤压优先级调度,配额监控预警
RISK-05APNs / FCM 证书/API Key 过期移动端通知失效证书到期预警,短信通道兜底
RISK-06红色预警端到端 < 5 分钟任一环节延迟累积即超时全链路延迟监控,SLA 告警

12. 项目目录结构

reflekt-health-api/ # 后端 API 服务
├── reflekt-api/ # RuoYi-Vue-Plus 主模块
│ ├── reflekt-system/ # 系统模块(用户/角色/菜单)
│ ├── reflekt-generator/ # 代码生成模块
│ └── ...
├── src/main/java/health/reflekt/
│ ├── controller/ # REST Controller 层
│ ├── service/ # 业务逻辑层
│ │ ├── device/ # 设备接入(D1)
│ │ ├── family/ # 家属端服务(D2)
│ │ ├── admin/ # 运营管理服务(D3)
│ │ ├── ai/ # AI 大脑服务(D4)
│ │ └── notification/ # 通知告警服务(D5)
│ ├── mq/ # MQ 消费者
│ │ └── radar/ # 雷达 MQTT 消费者
│ ├── domain/ # 实体类
│ ├── mapper/ # MyBatis Mapper
│ └── common/ # 通用工具类
├── pom.xml
└── Dockerfile

reflekt-health-app/ # Family App 儿女端(UniApp)
├── src/
│ ├── pages/ # 页面
│ │ ├── auth/ # 认证模块
│ │ ├── home/ # 首页 Hub
│ │ ├── devices/ # 设备管理
│ │ ├── messages/ # 消息中心
│ │ └── profile/ # 个人设置
│ ├── static/ui/fap/ # UI 预览文件
│ ├── services/ # API 封装
│ ├── store/ # 状态管理(Pinia)
│ └── utils/ # 工具函数
├── manifest.json
└── package.json

reflekt-health-luma/ # Luma App 老人端(原生 Android)
├── app/src/main/
│ ├── java/health/reflekt/luma/
│ │ ├── service/ # Android Service
│ │ ├── receiver/ # 广播接收器
│ │ └── ui/ # Activity / Fragment
│ └── res/
│ ├── layout/ # 布局文件
│ ├── values/ # 资源值
│ └── raw/ # 音频资源
└── build.gradle

reflekt-health-admin/ # Admin 管理后台
├── src/
│ ├── views/ # 页面视图
│ ├── api/ # API 调用封装
│ ├── store/ # 状态管理
│ └── router/ # 路由配置
├── package.json
└── vite.config.ts

本文档由 Reflekt Health 产品团队维护,最后更新于 2026-04-21。