前言
生產環境事故多源於開發階段的疏忽。本文匯總 13 類高頻生產級避坑點,涵蓋配置、測試、安全、文檔、運維、架構等全生命週期,作為代碼評審與上線清單的核心參考。
#1 配置未外部化
現象:線程池大小、連接池參數、URL、端口硬編碼在代碼中。
後果:環境切換需重新打包部署,DEV/UAT/PROD 差異導致故障(如生產多線程 OOM)。
對策:
- 所有可變參數放入配置中心 / 配置文件 / 環境變量
- Spring `@Value` / `@ConfigurationProperties` 綁定
- 關鍵參數支持熱更新(Nacos/Apollo/Consul)
#2 測試數據集不具代表性
現象:功能測試用 3 條數據,性能測試用 100 條,生產 100 萬+。
後果:索引缺失、鎖競爭、內存溢出、分頁查詢超時在生產才暴露。
對策:
- 性能測試**必須**使用全量脫敏生產數據或等比例構造
- 建立數據基線:行數、唯一值分佈、NULL 比例、大字段分佈
- CI/CD 管道強制門檻:性能基準不達標阻斷發布
#3 盲目信任下游服務可用性
現象:無超時、無重試、無熔斷、無降級直接調用下游。
後果:下游慢導致上游線程堆積、雪崩、整鏈路不可用。
對策:
- **強制**設置連接/讀取超時(連接 2s、讀取 3-10s)
- 引入 Resilience4j / Sentinel:熔斷、限流、隔離
- 冪等設計 + 重試策略(指數退避 + 抖動)
- 降級預案:緩存兜底、靜態默認值、友好錯誤頁
- 混沌工程:定期演練下游故障注入
#4 安全基線缺失
現象:無 HTTPS、無輸入驗證、SQL 拼接、敏感信息明文、未做滲透測試。
後果:數據洩露、注入攻擊、合規罰款、品牌聲譽受損。
對策:
- 全鏈路 TLS 1.2+,證書自動續期
- 參數化查詢 / ORM 防注入
- 輸入驗證:白名單、長度、格式、編碼
- 敏感數據加密存儲(字段級)、傳輸加密
- 定期掃描:OWASP ZAP、SonarQube、依賴漏洞檢查
#5 跨瀏覽器/設備相容性未驗證
現象:僅在 Chrome 最新版測試,Safari/Edge/移動端崩潰。
對策:
- CI 集成 BrowserStack / Sauce Labs 自動化跨瀏覽器測試
- CSS 使用 PostCSS autoprefixer,JS 用 Babel + core-js
- 響應式設計斷點驗證,PWA 離線能力測試
#6 業務規則硬編碼
現象:稅率、費率、審批閾值、狀態機流轉寫死在 if/else 中。
後果:政策變更需重新發布,上線窗口長、風險大。
對策:
- 規則引擎:Drools / Easy Rules / 自製 DSL
- 配置化:數據庫/配置中心存儲規則,熱加載
- 版本化:規則歷史可審計、可回滾
#7 文檔缺失
必備文檔清單:
- 單元測試報告(覆蓋率 ≥ 80%,核心路徑 100%)
- 集成測試方案與報告
- 變更清單:新增/修改類、腳本、配置、SQL
- 架構圖:組件、交互、數據流、部署拓撲
- 開發環境搭建指南:一鍵啟動腳本、Mock 服務、測試數據
#8 缺乏災難恢復與監控
現象:無備份策略、無恢復演練、無監控告警、日誌分散無法檢索。
對策:
- RPO/RTO 明確:核心業務 RPO < 5min, RTO < 30min
- 自動化備份 + 定期恢複演練(至少季度一次)
- 全鏈路監控:指標、日誌、鏈路追蹤(Prometheus/Grafana/ELK/SkyWalking)
- 關鍵業務大盤 + 多級告警(頁面/電話/微信)
#9 數據庫表缺乏審計字段
標準審計欄位:
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
created_by BIGINT,
updated_by BIGINT,
version INT DEFAULT 1, -- 樂觀鎖
deleted CHAR(1) DEFAULT 'N', -- 軟刪除
trace_id VARCHAR(64) -- 鏈路追蹤
禁止物理刪除,所有變更留痕。
#10 無回滾預案
回滾清單:
- 應用版本回滾腳本(蓝綠/滾動/金絲雀部署支持快速切換)
- 數據庫遷移腳本可逆(Flyway/Liquibase down migration)
- 配置中心版本回滾
- 全鏈路驗證腳本(煙霧測試)
- 回滾決策機制:誰授權、誰執行、誰驗證、溝通渠道
#11 容量規劃缺失
必須量化的資源指標:
- OS/JVM 確定版本、堆/棧/元空間大小
- CPU 核心數、負載預估峰值
- 負載均衡器模式(Active/Active vs Active/Passive)、節點數
- 存儲:日誌保留期、報表歸檔、臨時文件、備份空間
- 網絡:帶延遲、跨可用區流量成本
#12 技術選型動機不純
反模式:為學習新技術引入 NoSQL、微服務、Service Mesh、Rust 重寫核心...
原則:技術服務業務,**穩定性 > 新穎性**。選型標準:
- 團隊掌握度、社區活躍度、長期維護承諾(3-5 年)
- 生產級參考案例、故障排查工具鏈
- 遷移成本、回滾成本、學習曲線
#13 核心技術棧知識盲區
必須精通的 3 大領域(面試/架構/排障核心):
- 併發問題:死鎖、活鎖、線程饑餓、CAS、AQS、JMM、線程池調優
- 事務問題:隔離級別、傳播行為、分佈式事務(TCC/Saga/Seata)、長事務危害
- 性能問題:JVM 調優、GC 分析、SQL 優化、緩存策略、序列化選型、異步化
總結:上線前自查清單
[ ] 所有配置外部化,環境差異零代碼
[ ] 全量數據性能測試通過基準線
[ ] 下游調用:超時/重試/熔斷/降級全配齊
[ ] 安全掃描零高危,敏感數據加密
[ ] 多端相容性驗證通過
[ ] 業務規則配置化,支持熱更新
[ ] 文檔齊全,新人可一日上手
[ ] 監控告警覆蓋核心鏈路,有演練記錄
[ ] 表結構含審計字段,軟刪除、樂觀鎖
[ ] 回滾腳本就緒,5 分鐘內可完成
[ ] 容量規劃文檔化,壓測驗證
[ ] 技術選型有決策記錄,非興趣驅動
[ ] 團隊核心三板斧(併發/事務/性能)有人兜底