Home | 簡體中文 | 繁體中文 | 雜文 | 知乎專欄 | Github | OSChina 博客 | 雲社區 | 雲棲社區 | Facebook | Linkedin | 視頻教程 | 打賞(Donations) | About
知乎專欄多維度架構 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者”

部分 I. 多維度架構

Multi-dimension Architecture

目錄

1. 什麼是多維度架構
1.1. 架構與格局
1.2. 架構師的大局觀
1.3. Architecture Overview
1.4. CDN (Content Delivery Network)
1.5. 微服務
1.6. 日誌
1.7. 監控
1.8. Cluster Testing
2. 多維度架構之網站HTML
2.1. 網站的歷史演變
2.1.1. 常用軟硬件組成
2.1.2. 第一代純靜態網站
2.1.3. 第二代純文字檔案檔案採用分隔符做數據存儲網站
2.1.4. 第三代資料庫存儲網站
2.1.5. 第四代DNS負載均衡加反向代理
2.1.6. 第五代負載均衡集群
2.2. 集群(Cluster)
2.2.1. 負載均衡
2.2.1.1. DNS負載均衡
2.2.1.2. 軟件四層交換負載均衡
2.2.1.3. 應用層負載均衡
2.2.2. 高可用性集群
2.2.3. 負載均衡設備
2.2.4. 會話保持
2.2.5. 健康狀態檢查
2.3. 緩存技術
2.3.1. 瀏覽器緩存
2.3.1.1. Cache-Control
2.3.1.1.1. 在程序中靈活操作 Cache-Control
2.3.1.1.2. 非程序檔案緩存處理
2.3.1.2. Expires
2.3.1.3. If-Modified-Since / Last-Modified
2.3.1.4. ETag / If-None-Match
2.3.2. CDN (Content Delivery Network) 與反向代理緩存
2.3.2.1. CDN介面API
2.3.2.2. 方向代理頁面過期處理
2.3.2.3. 內容版本化
2.3.3. 負載均衡設備
2.3.4. WEB伺服器緩存
2.3.5. 應用程序緩存
2.3.6. 資料庫緩存
2.4. 網站靜態內容出版
2.4.1. 架構總覽
2.4.2. 靜態化實現手段有哪些?
2.4.2.1. 生成方式
2.4.2.2. 抓取方式
2.4.2.3. 偽靜態化
2.4.2.4. 混合方式
2.4.2.5. 靜態化中的動態內容
2.4.3. cdn
2.4.4. www 伺服器
2.4.5. cms 伺服器
2.4.6. img
2.4.7. Ajax 局部更新與緩存
2.5. 多媒體數據分離
2.5.1. 圖片伺服器分離
2.5.2. 目錄層次規劃
2.5.3. 多域名訪問
2.6. 圖片尺寸優化與自動裁剪
2.6.1. 背景
2.6.2. 實現思路
2.6.2.1. 尺寸動態變化
2.6.2.2. 實時裁剪並靜態化
2.6.3. web或代理伺服器插件實現方案
2.7. 壓縮數據傳輸
2.7.1. Minify JS
2.7.1.1. jsmin
2.7.1.2. yuicompressor
2.7.1.3. shrinksafe
2.8. SSL
2.9. 搜索引擎相關優化
2.9.1. 搜索結果靜態化
2.9.2. robots.txt
2.9.3. sitemaps
2.9.4. Sitemap in robots.txt
2.9.5. sitemap 靜態內容生成工具
2.10. 靜態網站繁簡轉換
3. 多維度架構之網絡損耗
3.1. 中國的大網絡環境
3.2. 架構設計需要考慮網絡損耗
3.2.1. 硬件造成的網絡損耗
3.2.2. 雲平台造成的網絡損耗
3.2.3. 容器中造成的網絡損耗
3.2.4. 微服務造成的網絡損耗
3.3. 總結
4. 多維度架構之超時時間
4.1. 無處不在的超時時間
4.2. 流量漏斗
4.3. 微服務的超時時間
4.4. 容器技術的超時時間
4.5. 最後總結
5. 多維度架構之會話數
5.1. 路由器和防火牆的會話數
5.2. 負載均衡設備的會話數
5.3. 伺服器的會話數
5.4. 應用程序的會話數
6. 多維度架構之日誌
6.1. 一次切割日誌引發的血案
6.1.1. 日誌是怎麼產生的
6.1.2. 讓我們看個究竟
6.1.2.1. 第一種情況,日誌檔案被重命名
6.1.2.2. 第二種情況,日誌檔案被刪除
6.1.2.3. 第三種情況,日誌沒有被刪除,也沒有被重命名,而是被其他程序做了修改
6.1.3. 經典案例分析
6.1.4. 怎樣監控日誌
6.1.5. 總結
6.2. 日誌歸檔與數據挖掘
6.2.1. 什麼日誌歸檔
6.2.2. 為什麼要做日誌歸檔
6.2.3. 何時做日誌歸檔
6.2.4. 歸檔日誌放在哪裡
6.2.5. 誰去做日誌歸檔
6.2.6. 怎樣做日誌歸檔
6.2.6.1. 系統日誌
6.2.6.2. 應用程序日誌
6.2.6.3. 日誌格式轉換
6.2.6.3.1. 將日誌放入資料庫
6.2.6.3.2. Apache Pipe
6.2.6.3.3. Log format
6.2.6.3.4. 日誌導入到 MongoDB
6.2.6.4. 日誌中心方案
6.2.6.4.1. 軟件安裝
6.2.6.4.2. 節點推送端
6.2.6.4.3. 日誌收集端
6.2.6.4.4. 日誌監控
7. 多維度架構之監控
7.1. 背景
7.2. 概述
7.3. 怎樣監控
7.3.1. 衛星監測
7.3.2. 逐級診斷
7.3.3. 模擬人工
7.3.4. 數據分析
7.3.5. 監控與開發
7.4. 總結
8. 分散式計劃任務
8.1. 什麼是分散式計劃任務
8.2. 為什麼採用分散式計劃任務
8.3. 何時使用分散式計劃任務
8.4. 分散式計劃任務的部署
8.5. 誰來寫分散式計劃任務
8.6. 怎麼實現分散式計劃任務
8.6.1. 分散式互斥鎖
8.6.2. 隊列
8.6.3. 其他
9. 多維度架構之安全
9.1. 植入式攻擊入侵檢測解決方案
9.1.1. 什麼是植入式攻擊?
9.1.2. 為什麼駭客會在你的系統裡面植入木馬?
9.1.3. 什麼時候被掛馬?
9.1.4. 在那裡掛馬的?
9.1.5. 誰會在你的系統裡掛馬?
9.1.6. 怎樣監控植入式攻擊
9.1.6.1. 程序與數據分離
9.1.6.2. 監控檔案變化
9.1.6.3. 安裝日誌收集程序
9.2. Shell 歷史記錄異地留痕審計與監控
9.2.1. 什麼是Shell歷史記錄異地留痕與監控
9.2.2. 什麼要將Shell歷史記錄異地留痕並監控
9.2.3. 何時做歷史記錄異地留痕
9.2.4. 在哪裡做歷史記錄異地留痕
9.2.5. 角色與權限
9.2.6. 怎麼實現歷史記錄異地留痕
9.2.6.1. 節點配置
9.2.6.2. 推送端
9.2.6.3. 收集端
9.3. 延伸閲讀
10. Shell 高級編程
10.1. 遞歸調用
10.2. 實現守護進程
10.3. 進程間通信
11. DevOps實施中你可能遇到的問題
11.1. 什麼是DevOps?
11.2. 為什麼會誕生DevOps?
11.3. DevOps 雖好,為什麼難以普及呢?
11.4. 軟件工程的歷史與進化
11.5. 為什麼很多企業為什麼實施 DevOps 以失敗告終?
11.6. CI 持續整合不是DevOps
11.7. CD 持續交付不是 DevOps
11.8. 自動化部署
11.9. 收集各部門問題
11.9.1. 自運維的需求
11.10. 收縮技術棧
11.10.1. 模組化思維
11.11. 被遺忘的資料庫
11.12. 建立中心倉庫
11.13. 緩存
11.14. 安全
12. Kubernetes & Docker 實施中你會遇到的問題
12.1. 鏡像會遇到的問題
12.1.1. 鏡像使用的OS發行版不統一
12.1.2. 安裝位置不統一
12.1.3. Linux 系統也存在BUG
12.2. 容器會遇到的問題
12.2.1. 程序啟動的區別
12.2.2. 存儲面臨的問題
12.2.3. 內部域名DNS
12.2.4. 容器與網絡
12.2.5. 容器的管理
12.2.6. 容器與安全
12.2.6.1. 網絡安全
12.2.6.2. 掛馬風險
12.2.6.3. 隔離安全
12.2.7. 容器與監控
12.2.8. 容器與CI/CD
12.2.9.
12.3. 人員的問題
12.4. 最後總結
13. 多維度架構之微服務
13.1. 微服務安全嗎?
13.1.1. 配置中心的隱患
13.1.2. 註冊中心的隱患
13.1.3. Eureka 客戶端
13.1.4. 最終總結
13.2. 熔斷器解決了什麼問題?
13.3. 微服務的性能
13.3.1. 微服務的開銷
13.4. 多維度架構之微服務拆分
13.4.1. 分散式事務之路
13.4.2. 微服務拆分法則
13.4.2.1. 基于工作流拆分服務
13.4.2.2. 服務池的概念
13.4.3. 最後總結
13.5. 介面安全
13.5.1. Restful 安全問提
13.5.2. 第一個階段採用 HTTP Basic Auth
13.5.3. 第二階段 HTTP Basic Auth + SSL
13.5.4. 第三階段 HTTP2 + HTTP Basic Auth + Oauth2
13.5.5. 第三階段,終極版誕生,HTTP2 + HTTP Basic Auth + Oauth2 + Jwt
14. 多維度架構之遠程異地災備
14.1. 背景
14.1.1. 建立容災系統需要考慮哪些因素
14.1.2. 目前容災系統的實現方式
14.1.3. 系統災難恢復等級劃分
14.1.4. 做災備你面臨最大的挑戰是什麼?
14.2. 災備整體解決方案
14.2.1. 雙活互備方案
14.2.2. 三機房互備方案
14.3. 數據中心網絡
14.3.1. 單機房高可用雙活互備解決方案
14.3.2. 雙機房互備異地災備方案
14.3.3. 三機房互備異地災備方案
14.4. 伺服器部署
14.4.1. 網站
14.4.2. 數據源
14.4.3. 資料庫
14.5. 軟件開發
14.5.1. 交易軟件分散式交易
14.5.1.1. 分散式交易解決方案一
14.5.1.2. 分散式交易解決方案一
14.5.1.3. 分散式交易解決方案一
14.5.2. 交易終端
14.5.2.1. 用戶分流
14.5.2.2. 會話保持
14.5.3. API 應用程序介面
14.5.4. 大數據的問題
14.5.4.1. 第一個階分區表
14.5.4.2. 第二個階分庫分表
14.5.5. 數據校對
14.6. 自動化運維
14.7. 災備培訓和演練
14.7.1. 培訓內容
14.7.1.1. 培訓對象
14.7.1.2. 操作流程
14.7.2. 演練環境設置
14.7.3. 演練級別與方式
14.7.4. 開始演練
14.7.4.1. 切換前操作
14.7.4.2. 切換操作
14.7.4.3. 切換後檢查
14.7.5. 演練結果檢查
14.7.6. 可能存在的風險
14.7.6.1. 主交易系統短期無法恢復
14.7.6.2. 切換災備系統後業務的影響
14.7.6.3. 數據不同步產生的影響
14.7.7. 災備系統備份
14.7.8. 系統運營維護
14.8. FAQ
14.8.1. 實現雙活最大的障礙是什麼?
14.8.2. 雙活怎麼解決數據衝突問題
15. 多維度架構之應用防火牆
15.1. 什麼是應用防火牆
15.2. 功能需求
15.2.1. 計數器
15.2.2. 訪問控制列表 ACL
15.2.3. 用戶認證
15.2.4. 協議
15.3. 簡單實現
15.3.1. 權限控制與實現
15.3.2. 演示
15.3.3. 增加7 Layer防火牆
16. 資料庫與應用程序間通信
16.1. 管道通信
16.1.1. 背景
16.1.2. 解決思路
16.1.3. Mysql plugin
16.1.4. plugin 的開發與使用
16.1.5. 插件如何使用
16.1.6. 部署相關問題
16.2. 消息隊列
16.2.1. 背景
16.2.2. 應用場景
16.2.3. Mysql plugin
16.2.4. plugin 的開發與使用
16.2.5. 插件如何使用
16.3. 資料庫與外界檔案
16.3.1. 背景
16.3.2. 解決思路
16.3.3. 解決方案
16.3.4. plugin 的開發與使用
16.3.5. 在事務中使用該插件
16.3.6. 通過觸發器調用圖片處理函數
16.4. Socket 方式
16.4.1. UDP
17. 多維度架構之消息隊列
17.1. 你是怎樣使用消息隊列的?
17.2. 你是否真正理解了消息隊列?
17.2.1. 消息隊列並不是實時的
17.2.2. 不能替代非同步執行
17.3. 使用的合理嗎?
17.4. 是否有必要使用消息隊列?
17.5. 最後總結
18. 多維度架構之分庫分表
18.1. 分表需要從業務角度考慮
18.2. 最後總結
19. 多維度架構之Socket連接數
19.1. 理解伺服器端與客戶端
19.2. 影響連接的因素有哪些?
19.3. 程序怎麼寫?
20. 多維度架構之壓力測試
20.1. 壓力測試中存在的問題
20.1.1. (What) 什麼是壓力測試
20.1.1.1. 壓力測試存在哪些問題
20.1.2. (Why) 為什麼做壓力測試
20.1.3. (Where) 在哪裡做壓力測試
20.1.4. (When) 什麼時間做壓力測試
20.1.5. (Who) 壓力測試過程參與人員
20.1.6. (How) 如何做壓力測試
20.2. 協議測試
20.2.1. What 什麼是協議測試
20.2.2. Why 為什麼要做協議測試
20.2.3. where 在哪兒測試
20.2.4. when 什麼時候測試
20.2.5. Who 誰來做,執行對象
20.2.6. How 怎樣做測試
20.2.7. 如何學習協議測試
20.2.8. 總結
20.3. 打破軟件自動化測試的格局
20.3.1. 自動化測試的誤區
20.3.2. 分層與部署帶來的問題
20.3.3. 壓力測試存在的問題
20.3.3.1. 壓力測試環境
20.3.3.2. 測試順序
20.3.3.3. 瓶頸分析
20.3.3.4. 指導開發
20.3.4. 持續整合形同虛設
20.3.5. 測試的終極目標