場景:數據存儲量大、計算量大、功能簡單(如報表聚合、日誌分析)。Web 層不宜直接承擔長耗時計算。
核心原則:計算下沉、異步解耦
- Web 層:只負責接收請求、下發任務、輪詢/推送結果、提供查詢介面。框架輕量即可(Spring Boot / Vert.x / Javalin)。
- 計算層:獨立進程/集群,技術棧按數據特性選:
- 關係型大表 → ClickHouse / Doris / StarRocks (OLAP 列式引擎),SQL 兼容好。
- 海量日誌/非結構化 → Flink / Spark Structured Streaming 流批一體。
- 圖計算/圖查詢 → GraphX / Neo4j。
- 輕量級定時批次 → Spring Batch / Quartz + JDBC。
- 協調層:任務調度用 XXL-Job / DolphinScheduler / Airflow,支援依賴、重試、告警。
框架選型建議
| 層級 | 推薦 | 理由 |
| Web 入口 | Spring Boot 3 + Spring WebFlux | 響應式非阻塞,少線程高併發 |
| 任務分發 | Redis Stream / RabbitMQ / Kafka | 削峰填谷,保證至少一次投遞 |
| 計算引擎 | ClickHouse (OLAP) / Flink (流式) | 列式壓縮、向量化執行、秒級聚合 |
| 調度 | XXL-Job | 輕量、Web 管理、分片廣播支援 |
避坑指南
- ❌ 在 Controller 里跑 `while(true)` 計算 → 線程池耗盡、Tomcat 僵死。
- ❌ 用 SSH/SSI (Struts2+Spring+Hibernate/iBatis) 等舊棧 → 維護成本高、無響應式支援。
- ✅ 計算結果落地 Redis/MySQL,Web 層只查緩存/結果表,毫秒級響應。