Casha | 1. 基於 Spring Cloud 的 F&B 微服務專案
Casha POS 是一套專為餐飲業 (F&B) 打造的系統,採用 Spring Boot 3.4.8 與 Spring Cloud 2024 建構後端微服務,前端則以 Vue 3 + 組合式 API 搭配 Element Plus 開發。系統涵蓋後台管理、POS 點餐、KDS 廚房顯示與消費者自助點餐,並整合多種中介軟體與觀測工具,支援高併發交易與全鏈路監控。
目前把更多 好懶得整理 還在整理的筆記都放在 Github 中, 若對這個專案有興趣可以參考 ~~

這一次寫這個專案也要驗證工作用到的技巧, 作為專案特色如下:
- 前後端分離 + BFF 模式:Admin、POS、KDS、Order App 各有專屬入口,降低耦合。
- 高併發交易處理:Redis + RabbitMQ 確保訂單高效能與可擴展。
- 全鏈路可觀測性:監控、日誌、追蹤工具整合,便於快速定位問題。
- 模組化設計:Auth、Store、Order、Analytic 各自獨立,支援服務擴展與水平擴容。
- 雲原生友好:服務與中介軟體均容器化,未來可支援 Kubernetes 部署。
- 完整 Pipeline & SDLC : On-Premise devops 環境, 全權控管 Github Action runner, Harbor, SonarQube 規範, 定期 OWASP Top 10 檢測與修正, Jmeter 壓力測試與測報。
Applications
1. 客戶端應用 (Client Apps)
- Admin Web:後台管理系統,用於帳號、權限與餐廳配置。
- POS (尚未開放):櫃台點餐端,處理訂單建立與結帳。
- KDS (Kitchen Display System, 尚未開放):廚房顯示端,接收訂單並支援出餐流程。
- Order App (Web):顧客使用的自助點餐 Web 應用,支援掃描 QRCode 下單。
2. 後端微服務 (Microservices)
- Spring Cloud Gateway:所有流量的入口,負責路由轉發、JWT 驗證、服務發現與 API 管控。
- Admin-Portal:BFF,對接前端 Admin Web,負責與 Auth-Service、Store-Service 溝通。
- Cis-Portal:BFF,服務 POS, Web App 與自助點餐應用,負責與 Order-Service 互動。
- KDS-Portal:BFF,專為廚房顯示端設計,串接 Order-Service。
- Auth-Service:身分驗證與權限管理,包含帳號、角色、權限控制。
- Store-Service:餐廳與分店管理,包含菜單、座位、商品與 QRCode 設定,支援 MinIO 圖片檔案存取。
- Order-Service:核心訂單服務,處理點餐、狀態流轉,並透過 RabbitMQ 進行訂單事件傳遞。
- Analytic-Service:數據分析與報表,聚合交易與使用行為數據。
3. 中介軟體與基礎設施 (Middleware)
- Redis:快取服務,支援 session、token 與高頻查詢快取。
- RabbitMQ:消息佇列,處理訂單事件與跨服務異步通信。
- MinIO:S3 相容物件存儲,主要用於圖片、檔案上傳與存取。
4. 監控與可觀測性 (Observability/Monitoring)
- Jaeger:分散式追蹤,追蹤跨服務的請求鏈路。
- Prometheus:指標收集,抓取 Spring Boot Actuator metrics。
- Grafana:監控大盤,統一可視化。
- ElasticSearch + Kibana:集中式日誌管理與查詢。
- FluentBit:日誌收集與轉發。
On-Premise InfraStructure
這一次的 DevOps 還是用當年的 Dell 7040m 架設 Harbor & Github private runner 和 SonarQube, 而部署的機器就是自架的 Am4 平台(之前的 X99 實在太耗電…)。DevOps 和 Production 機器都在同一個網路環境內, 也方便部署。
Production 的伺服器是一台 windows server, 裡面藉由 vmware 搭建數台 vm 分離環境, 並由 nginx 作為 reverse proxy, 最外部則是使用我的網域 williamrightone.com 設定 CDN 與 cloudflare tunnel 做 https, C4-Model 如下:

系統互動流程
外部使用者 透過 Nginx 存取應用,請求由 Cloudflare 轉經 Nginx 代理至 Spring Cloud Gateway。
Gateway 與後端服務互動,連接 MySQL、Redis、RabbitMQ、Consul、ElasticSearch、MinIO 等中間件,實現完整業務流程。
Prometheus 定期抓取 Gateway 指標,Grafana 與 Jaeger 提供可視化監控與追蹤。
管理員透過 DBeaver、RedisInsight、Browser 等工具完成日常維運與監控工作。
Pipeline 在 main branch 下 tag 的時候觸發構建, 整個 SDLC 基本上和我之前的 Colorly 專案一致。
第一篇快速介紹了整個專案的架構, 下一篇則以 menu, order api 介紹核心的操作與下單流程, 並講解 redis 和 mq 從中扮演的角色與功用。
