習(xí)筆記系列】04 - MES 技術(shù)架構(gòu)設(shè)計(jì))
目標(biāo)讀者系統(tǒng)架構(gòu)師、技術(shù)負(fù)責(zé)人、高級開發(fā)工程師閱讀時間約 30 分鐘前置知識微服務(wù)基本概念、Spring Boot 基礎(chǔ)一、架構(gòu)總覽1.1 分層架構(gòu)MES 系統(tǒng)采用典型的三層架構(gòu)兼顧傳統(tǒng)的水平分層和微服務(wù)時代垂直切割的靈活性1.2 關(guān)鍵設(shè)計(jì)原則原則說明高內(nèi)聚低耦合每個微服務(wù)只負(fù)責(zé)一個業(yè)務(wù)領(lǐng)域DDD 限界上下文無狀態(tài)設(shè)計(jì)應(yīng)用服務(wù)無狀態(tài)狀態(tài)存于 Redis/數(shù)據(jù)庫方便水平擴(kuò)展異步解耦非實(shí)時業(yè)務(wù)通過消息隊(duì)列異步處理獨(dú)立部署每個微服務(wù)可獨(dú)立構(gòu)建、部署、擴(kuò)縮容容錯設(shè)計(jì)熔斷Sentinel、降級、重試防止級聯(lián)故障二、云原生與微服務(wù)架構(gòu)2.1 微服務(wù)拆分策略基于 DDD領(lǐng)域驅(qū)動設(shè)計(jì)的限界上下文進(jìn)行服務(wù)拆分微服務(wù)限界上下文核心聚合根數(shù)據(jù)存儲mes-order工單管理WorkOrderMySQLmes-execution生產(chǎn)執(zhí)行ProductionRecordMySQLmes-quality質(zhì)量管理InspectionTaskMySQLmes-equipment設(shè)備管理Machine, MaintenanceMySQLmes-material物料管理MaterialLot, InventoryMySQLmes-schedule排程引擎SchedulePlanMySQLmes-collection數(shù)據(jù)采集DeviceDataPointInfluxDB/MySQLmes-report報(bào)表分析ReportTemplateMySQL 只讀副本mes-system系統(tǒng)管理User, Role, PermissionMySQLmes-gatewayAPI 網(wǎng)關(guān)——2.2 服務(wù)通信通信方式適用場景技術(shù)選型同步 REST查詢類、事務(wù)性操作Feign / OpenFeign異步消息事件通知、數(shù)據(jù)同步RocketMQ / RabbitMQgRPC高性能、流式調(diào)用Spring gRPC StarterWebSocket實(shí)時看板推送Spring WebSocket2.3 服務(wù)治理三、技術(shù)選型3.1 推薦技術(shù)棧主力方案Java層級技術(shù)版本選擇理由后端框架Spring Boot3.x生態(tài)完善、國內(nèi) MES 主流微服務(wù)治理Spring Cloud Alibaba2023.xNacos 注冊發(fā)現(xiàn) 配置、Sentinel 限流ORMMyBatis Plus3.5靈活 SQL、代碼生成消息隊(duì)列RocketMQ5.x延遲消息、事務(wù)消息、阿里系生態(tài)緩存Redis7.x高頻數(shù)據(jù)緩存、分布式鎖前端框架Vue 3 Element Plus3.4組件豐富、中文生態(tài)好關(guān)系數(shù)據(jù)庫MySQL / PostgreSQL8.0 / 15主數(shù)據(jù)存儲時序數(shù)據(jù)庫InfluxDB / TimescaleDB2.x / 2.x設(shè)備采集的時序數(shù)據(jù)對象存儲MinIO最新附件、eSOP 文件存儲容器化Docker K8s24 / 1.28編排、彈性伸縮CI/CDGitLab CI / Jenkins最新自動化構(gòu)建部署監(jiān)控Prometheus Grafana最新指標(biāo)采集與可視化日志ELK (Elasticsearch Logstash Kibana)8.x集中日志管理與檢索3.2 備選方案對比組件方案 A推薦方案 B適用場景后端語言Java Spring Boot.NET Core / Python.NET 適合 Windows 生態(tài)工廠Python 適合輕量項(xiàng)目消息隊(duì)列RocketMQRabbitMQ / KafkaRabbitMQ 適合中小規(guī)模Kafka 適合大數(shù)據(jù)量流處理前端Vue 3React Ant DesignReact 適合國際化團(tuán)隊(duì)數(shù)據(jù)庫MySQLPostgreSQL需要 JSONB 高級特性選 PG服務(wù)治理Spring CloudIstio K8s多語言微服務(wù)網(wǎng)格3.3 Java vs .NET Core 對比維度Java / Spring Boot.NET Core微服務(wù)生態(tài)Spring Cloud 全家桶成熟Steeltoe OcelotOPC UA 庫Eclipse MiloOPC UA .NET Standard部署環(huán)境Linux 為主Windows 兼容性更好國內(nèi)招聘崗位多傳統(tǒng)制造業(yè) .NET 崗位多選型建議新項(xiàng)目首選與微軟生態(tài)緊耦合的工廠四、系統(tǒng)集成方案4.1 集成全景圖4.2 ERP 集成接口方向數(shù)據(jù)內(nèi)容頻率生產(chǎn)計(jì)劃同步ERP → MES計(jì)劃單號、產(chǎn)品、數(shù)量、交期日/即時報(bào)工回傳MES → ERP良品數(shù)、不良品數(shù)、工時實(shí)時物料消耗回傳MES → ERP原材料消耗數(shù)量、批次工單完工時入庫通知MES → ERP成品完工入庫信息實(shí)時基礎(chǔ)數(shù)據(jù)同步ERP → MES物料主數(shù)據(jù)、BOM、客戶信息日4.3 WMS 集成接口方向說明送料指令MES → WMS工單開工時生成送料單發(fā)料確認(rèn)WMS → MESWMS 完成揀貨發(fā)料后通知 MES完工入庫MES → WMS成品完工請求入庫庫存查詢MES → WMS實(shí)時獲取物料可用量4.4 SCADA/PLC 集成協(xié)議適用場景MES 角色OPC UA主流設(shè)備、CNC 機(jī)床、PLC客戶端訂閱數(shù)據(jù) 調(diào)用方法Modbus TCP老舊設(shè)備、儀表客戶端讀保持寄存器MQTT邊緣傳感器、IoT 網(wǎng)關(guān)Broker接收數(shù)據(jù)MTConnectCNC 機(jī)床客戶端接收標(biāo)準(zhǔn)化數(shù)據(jù)五、接口設(shè)計(jì)5.1 RESTful API 規(guī)范URL 設(shè)計(jì)GET /api/v1/work-orders # 工單列表 GET /api/v1/work-orders/{id} # 工單詳情 POST /api/v1/work-orders # 創(chuàng)建工單 PUT /api/v1/work-orders/{id} # 更新工單 POST /api/v1/work-orders/{id}/start # 開工 POST /api/v1/work-orders/{id}/complete # 完工統(tǒng)一響應(yīng)格式j(luò)son{ code: 200, message: success, data: { orderId: WO-20260729-001, productName: 產(chǎn)品A, status: IN_PRODUCTION }, timestamp: 1753700000 }5.2 OPC UA 數(shù)據(jù)模型Root └── Objects └── Factory └── Line1 └── Machine-001 ├── Status (Variable: Running) ├── Temperature (Variable: 85.6) ├── Speed (Variable: 1200) ├── Alarm (Variable: false) └── Methods ├── Start() ├── Stop() └── SetSpeed(int rpm)5.3 MQTT Topic 設(shè)計(jì)Topic說明QoSmes/{factory}/{line}/device/status設(shè)備狀態(tài)上報(bào)1mes/{factory}/{line}/device/data工藝參數(shù)上報(bào)1mes/{factory}/{line}/device/alarm設(shè)備報(bào)警2mes/{factory}/{line}/cmd/recipe配方下發(fā)指令2mes/{factory}/{line}/cmd/adjust參數(shù)調(diào)整指令2六、安全架構(gòu)6.1 安全分層層面措施技術(shù)傳輸安全TLS 1.3 加密Nginx SSL 終結(jié)認(rèn)證JWT OAuth 2.0Spring Security授權(quán)RBAC 角色權(quán)限 數(shù)據(jù)權(quán)限自研權(quán)限中間件審計(jì)操作日志全量記錄AOP ELK數(shù)據(jù)安全敏感字段加密存儲AES-256 / SM4API 安全請求簽名 防重放時間戳 Nonce6.2 權(quán)限模型用戶 (User) │ ├── 角色 (Role): 生產(chǎn)經(jīng)理 / 操作員 / 質(zhì)檢員 / 設(shè)備工程師 │ │ │ └── 功能權(quán)限: 工單管理 / 質(zhì)量檢驗(yàn) / 設(shè)備管理 ... │ └── 數(shù)據(jù)權(quán)限: 只能看到所屬產(chǎn)線 / 車間的數(shù)據(jù)七、高可用與災(zāi)備設(shè)計(jì)能力方案應(yīng)用高可用多副本 K8s 自動重啟 HPA 自動擴(kuò)縮數(shù)據(jù)庫高可用MySQL 主從復(fù)制 讀寫分離消息隊(duì)列高可用RocketMQ Dledger 主備緩存高可用Redis 哨兵 / Cluster異地災(zāi)備數(shù)據(jù)庫異地同步、每日備份灰度發(fā)布K8s Ingress 按權(quán)重引流