#網站的架構演進









#優化
##優化兩大核心原則-前端緩存
* 瀏覽器地址緩存,DNS Cache(TTL)
* 瀏覽器中文件的緩存(Cache-Control)
* cdn 中的緩存,cdn的原理(刷新的問題)
* 文件分發路徑上的緩存(內部Squid,varnish,nginx cache)
##優化兩大核心原則-后端緩存
**數據庫緩存**
* 打開就一定好嗎?
* 如何保持?
* 數據庫連接池
**Memcached**
* 內存緩存,無持久化,高性能
**Redis**
* 可持久化,數據結構豐富
**MongoDB**
* 不算是緩存,是數據庫
* 坑比較多,長于描述類文件存儲
##優化兩大核心原則-多級緩存
**頁面內緩存**
* 進程內緩存
* 頁面內緩存
**OpCode Cache緩存(PHP)**
* Java本身就支持
**本機緩存**
* Opcode 加速器提供
**業務中間件緩存**
* 商品信息中間件
* 用戶信息中間件
* 好友關系中間件


##優化兩大核心原則-分離之分
**動靜分離**
1. 動靜分離不僅僅是體現在前端資源上
2. 數據庫上也有動靜分離
**讀寫分離**
1. 主從承壓分離
**特征分離**
1. 根據字段大小不同,實現設計上的分離
**業務分離**
1. 數據庫在業務分離,叫水平切分
2. 不同的業務使用不同的機器集群
3. 服務化
##優化兩大核心原則-分層之分
**前端代碼分層**
1. base層
2. 公用層
3. page層
**后端業務代碼分層**
1. MVC分層
**架構部署分層**
1. 業務邏輯程序,中間件,后端數據存儲
**發布上線分層**
1. 重點業務,灰度發布
##優化兩大核心原則-分布之分
**分布式數據庫**
* 關系型數據庫
* NoSQL數據庫
**分布式緩存**
* 內存緩存
* 可持久化緩存
* 文件緩存
**分布式存儲**
* 分布式文件存儲
* 分布式日志數據存儲
**分布式計算**
* 數據統計分析
* 全文檢索
##優化兩大核心原則-分工之分
**多線程**
* 多線程處理同一件事情
**職責分工**
* 插件,擴展,模塊
* usb
* Liunx內核
**Map-Reduce**
* 將任務拆分,最后講結果合并
**異步之分**
* 異步讓效率更高
* 系統更穩定
* 用戶體驗更好
##架構與優化的保障 --工具化
1. 使用成熟的工具監控,Nagios,Mrtg,Cacti
2. 監控端口,請求,狀態碼,日志,Crontab
3. 自行編寫合適自己的工具,比如分析Haproxy 的流量計算所有的實時請求數,實現數據的備份自動和擴容的半自動化,實現小文件備份自動化,灰度發布系統
4. 終極目標:拋開繁瑣的運維步驟,拋開checklist,做到真正的自動化
##架構與優化的保障 -- 成本
1. 上線前對業務的合理且充分的預估,根據業務的不同而不同
2. 一方面要用夠機器的資源。一方面要敢于做擴容的決斷
3. 檢測業務的使用效率,做不同的對待,有回收,有擴容
4. 意外事件的保障,災備
5. 降級,保障核心運轉,保障讀,差異服務,灰度服務



- SWOOLE及php網絡編程
- LNMP架構與Socket,http協議
- 如何高效學習
- 開發工具箱
- 編寫高效的js
- js閉包編寫全功能的購物車
- JSON和JSONP
- 多級分類的開發與應用
- 設計安全的登錄注冊流程
- 前端性能優化
- 前端架構優化
- 使用第三方云服務加速產品開發
- 移動互聯網之API開發
- php分層
- 全文檢索的實踐與部署
- webIM的原理及前后端實現
- 如何配置高效的數據庫以及MySQL的代碼及插件開發
- NoSql.隊列,任務隊列
- 構建本機緩存,構建分布式緩存池
- 數據庫分庫分表的設計
- Nginx原理及模塊開發初步
- 無限擴充的數據庫架構
- php構建分庫分表分布式數據庫連接池
- 靜態文件上傳、分布式存儲與分發
- MySQL Cluster,Proxy分析與實踐
- 架構解密