作者背景
曾任職 Cernet 撥號接入平台、Yahoo 3721 搜索前端、貓撲大雜燴社區架構升級,長期實踐於千萬級 DAU 系統,本文提煉低成本、高性能、高擴展的核心模式。
一、HTML 靜態化——最高 ROI 的性能杠桿
- 原理:純靜態 HTML 直出,零代碼執行、零 DB 查詢、零模板渲染,Web 服務器僅做靜態文件發送,吞吐量達動態頁 100 倍+
- 落地:CMS 發布時自動生成;社區帖子/文章發布/更新觸發增量重建
- 適用邊界:內容更新頻率 低於 讀取頻率 1:100 以上的場景(新聞、論壇帖文、商品詳情、幫助文檔)
- 進階:片段靜態化(ESI/SSI)、Nginx
fastcgi_cache/proxy_cache 做微緩存,兼顧動態個性化區塊
二、圖片/靜態資源服務器分離
- 圖片佔流量 80%+,佔連接數 90%+,混部會擠佔動態應用連接池
- 獨立圖片集群:輕量 HTTP 服務器(Nginx/Tengine/OpenResty),
LoadModule 極簡,僅保留靜態、壓縮、緩存、防盜鏈模組
- 多域名/子域名並行下載突破瀏覽器並發限制(如 img1~4.domain.com)
- CDN 回源直掛圖片集群,源站零壓力
三、數據庫集群與庫表散列(分庫分表)
1. 數據庫原生集群
- Oracle RAC、MySQL MHA/Group Replication、PostgreSQL Patroni
- 優點:透明、強一致;缺點:擴展上限受架構限制、硬件成本高
2. 應用層庫表散列——低成本無上限擴展
- 垂直拆庫:用戶、訂單、商品、日誌分庫,業務解耦
- 水平分表:
user_id % 1024 路由至 1024 張表,或按時間範圍分表
- 配置中心化:路由規則外置至 ZooKeeper/Etcd/Consul,上線新分片僅增配置,代碼零變更
- 案例:搜狐論壇按板塊分庫、用戶 ID 分表,單表 ≤ 500 萬行,查詢穩定 < 10ms
四、多級緩存體系
| 層級 | 技術 | 場景 | 特點 |
| 瀏覽器 | Cache-Control/ETag/Service Worker | 靜態資源、API GET | 零網絡延遲 |
| CDN/邊緣 | Nginx proxy_cache / 商業 CDN | 全站靜態、熱門 API | 就近訪問,屏蔽源站 |
| Web 服務器 | Nginx fastcgi_cache / Varnish | 動態頁片段、匿名頁 | 微秒級響應 |
| 應用進程 | MemoryCache / Caffeine / Guava Cache | 熱點配置、字典表、權限集 | 進程內,無序列化開銷 |
| 分布式 | Redis Cluster / Memcached / KeyDB | Session、購物車、排行榜、計數器 | 跨實例共享,高可用 |
五、架構演進路線圖
單體單庫 → 讀寫分離 → 垂直拆服務/拆庫 → 水平分表 → 服務化治理 → Service Mesh
│ │ │ │ │ │
靜態化 主從同步 API網關 路由中間件 熔斷/限流/追蹤 可觀測/治理
六、避坑十條
- 靜態化不做增量 → 發布耗時數小時
- 分庫分表無全局唯一 ID 生成器 → 雪花算法/號段模式必備
- 緩存無穿透/擊穿/雪崩防護 → 布隆過濾器、互斥鎖重建、隨機 TTL
- Session 存單機內存 → 換 Redis 集群前先外置
- 業務邏輯寫存儲過程 → 版本控制困難、調試痛苦、綁定廠商
- 無熔斷降級 → 下游抖動拖垮全鏈路
- 日誌不結構化 → 排查耗時指數級
- 配置硬編碼 → 發布單點故障
- 無壓測基線 → 上線即事故
- 忽略災備演練 → 故障時 RTO/RPO 不可控
結語
大型網站架構無銀彈,核心是**識別瓶頸、分層解耦、數據局部化、緩存前置、無狀態水平擴展**。以業務增長曲線為引導,按需演進,才是低成本高可用的正道。