在2011年年底的時候筆者就曾規劃寫一本Spring的書,但是因爲是Spring入門類型的書,框架的內容更新太快,覺得還是寫博客好一些,因此就把寫完的書稿放到了博客(jinnianshilongnian.iteye.com,因爲是龍年開的博客,所以很多網友喊我龍年兄),並持續更新,到現在已經不多五年了。大家再網上找資源時會發現很多內容不成體系,不能系統的學習,這也是我的痛點,因此我寫博客的一個特色就是堅持寫系列文章,想學習某種技術只要我博客有的不需要去其他地方再找了,到現在已經寫過《跟我學Spring》、《Spring雜談》、《跟我學Spring MVC》、《跟我學Shiro》、《跟我學Nginx+Lua》等系列,累計訪問量已超過1000萬。我寫博客還有一個私心:帶新人,當時我們系統架構使用了OpenResty,而我們團隊都是Java程序員,所以就寫了《跟我學Nginx+Lua》,新人跟着教程學一遍就能上手幹活了。
2015年開始筆者在個人公衆號“開濤的博客”寫《聊聊高併發系統》系列文章,陸續發表了聊聊高併發系統之限流特技、聊聊高併發系統之降級特技、聊聊高併發系統之隊列術、構建需求響應式億級商品詳情頁等文章。這些內容都是筆者在一線使用過的一些,而這些技能是一線程序員或架構師應該掌握的必備技能。而且這一系列也得到了很多讀者反饋和認可,幫助他們解決了系統的一些問題。公衆號發表的有些內容偏理論,很多人不知道怎麼去用,因此就有了豐富理論和實戰內容並出版本書的想法,想學習高可用和高併發系統技能看本書就夠了,並且可以作爲案頭工具書。
本書暫定名稱爲《億級流量網站架構核心技術——跟開濤學搭建高可用高併發系統》,如有好的書名建議歡迎留言,必當重謝。內容已交由出版社編輯,相信很快就會和大家見面。主要內容結構和目錄如下所示:
第一部分概述
高併發原則
無狀態
拆分
服務化
消息隊列
數據異構
緩存銀彈
併發化
高可用原則
降級
限流
切流量
可回滾
業務設計原則
防重設計
冪等設計
流程可定義
狀態與狀態機
後臺系統操作可反饋.
後臺系統審批化.
文檔&註釋
備份
第二部分 高可用負載均衡與反向代理
upstream配置
負載均衡算法
失敗重試
健康檢查
tcp心跳檢查
http心跳檢查
其他配置
域名上游服務器
備份上游服務器
不可用上游服務器
長連接
HTTP反向代理示例
HTTP動態負載均衡
Consul+Consul-template
Consul+OpenResty
TCP四層負載均衡
靜態負載均衡
動態負載均衡
隔離術
線程隔離
進程隔離
集羣隔離
機房隔離
讀寫隔離
動靜隔離
爬蟲隔離
熱點隔離
資源隔離
使用Hystrix實現隔離
Hystrix簡介
隔離示例
基於Servlet3實現請求隔離
請求解析和業務處理線程池分離
業務線程池隔離
業務線程池監控/運維/降級
如何使用Servlet3異步化
限流詳解
限流算法
令牌桶算法
漏桶算法
應用級限流
限流總併發/連接/請求數
限流總資源數
限流某個接口的總併發/請求數
限流某個接口的時間窗請求數
平滑限流某個接口的請求數
分佈式限流
redis+lua實現
Nginx+Lua實現
接入層限流
ngx_http_limit_conn_module
ngx_http_limit_req_module
lua-resty-limit-traffic
降級特技
降級預案
自動開關降級
超時降級
統計失敗次數降級
故障降級
限流降級
人工開關降級
讀服務降級
寫服務降級
多級降級
配置中心
應用層API封裝
配置文件實現開關配置
配置中心實現開關配置
使用Hystrix實現降級
使用Hystrix實現熔斷
熔斷機制實現
配置示例
採樣統計
超時與重試機制
簡介
代理層超時與重試
Web容器超時
中間件客戶端超時與重試
數據庫客戶端超時
NoSQL客戶端超時
業務超時
前端Ajax超時
回滾機制
事務回滾
代碼庫回滾
部署版本回滾
數據版本回滾
靜態資源版本回滾
壓測與預案
系統壓測
線下壓測
線上壓測
系統優化和容災
應急預案
第三部分 高併發
應用級緩存
緩存簡介
緩存命中率
緩存回收策略
基於空間
基於容量
基於時間
基於Java對象引用
回收策略
Java緩存類型
堆緩存
堆外緩存
磁盤緩存
分佈式緩存
多級緩存
應用級緩存示例
多級緩存API封裝
NULL Cache
強制獲取最新數據
失敗統計
延遲報警
緩存使用模式實踐
Cache-Aside
Cache-As-SoR
Copy Pattern
性能測試
HTTP緩存
簡介
HTTP緩存
Last-Modified
ETag
HttpClient客戶端緩存
主流程
清除無效緩存
查找緩存
緩存未命中
緩存命中
緩存內容陳舊需重新驗證
緩存內容無效需重新執行請求
緩存響應
緩存頭總結
Nginx HTTP緩存設置
expires
if-modified-since
nginx proxy expires
Nginx代理層緩存
Nginx代理層緩存配置
清理緩存
一些經驗
多級緩存
多級緩存介紹
如何緩存數據
過期與不過期
維度化緩存與增量緩存
分佈式緩存與應用負載均衡
緩存分佈式
應用負載均衡
熱點數據與更新緩存
單機全量緩存+主從
分佈式緩存+應用本地熱點
更新緩存與原子性
緩存崩潰與快速修復
取模
一致性哈希
快速恢復
連接池線程池詳解
數據庫連接池
DBCP連接池配置
DBCP配置建議
HttpClient連接池
HttpClient4.5.2配置
HttpClient連接池源碼分析
HttpClient4.2.3配置
問題示例
線程池
Java線程池
Tomcat線程池配置
異步併發實戰
同步阻塞調用
異步Future
異步Callback
異步編排CompletableFuture
異步Web服務實現
請求緩存
CompletableFuture實現批量查詢
請求合併
如何擴容
單體應用垂直擴容
單體應用水平擴容
應用拆分
數據庫拆分
數據庫分庫分表示例
應用層還是中間件層
分庫分表策略
使用sharding-jdbc分庫分表
使用sharding-jdbc讀寫分離
數據異構
查詢維度異構
聚合數據異構
任務系統擴容
簡單任務
分佈式任務
Elastic-Job簡介
Elastic-Job-Lite功能與架構
Elastic-Job-Lite示例
隊列術
應用場景
緩衝隊列
任務隊列
消息隊列
請求隊列
數據總線隊列
混合隊列
其他隊列
Disruptor+Redis隊列
簡介
XML配置
EventWorker
EventPublishThread
EventHandler
EventQueue
下單系統水平可擴展架構
下單服務
同步Worker
基於Canal實現數據異構
mysql主從複製
Canal簡介
Canal示例
第四部分 案例
構建需求響應式億級商品詳情頁
商品詳情頁是什麼
商品詳情頁前端結構
我們的性能數據
單品頁流量特點
單品頁技術架構發展
架構1.0
架構2.0
架構3.0
詳情頁架構設計原則
數據閉環
數據維度化
拆分系統
Worker無狀態化+任務化
異步化+併發化
多級緩存化
動態化
彈性化
降級開關
多機房多活
多種壓測方案
遇到的一些坑和問題
SSD性能差
鍵值存儲選型壓測
數據量大時JIMDB同步不動
切換主從
分片配置
模板元數據存儲HTML
庫存接口訪問量600w/分鐘
微信接口調用量暴增
開啓Nginx Proxy Cache性能不升反降
配送至讀服務因依賴太多,響應時間偏慢
網絡抖動時,返回502錯誤
機器流量太大
總結
京東商品詳情頁服務閉環實踐
爲什麼需要統一服務
整體架構
一些架構思路和總結
兩種讀服務架構模式
本地緩存
多級緩存
統一入口/服務閉環
引入Nginx接入層
數據校驗/過濾邏輯前置
緩存前置
業務邏輯前置
降級開關前置
AB測試
灰度發佈/流量切換
監控服務質量
限流
前端業務邏輯後置
前端接口服務端聚合
服務隔離
使用OpenResty開發高性能Web應用
OpenResty簡介
Nginx優點
Lua的優點
什麼是ngx_lua
開發環境
OpenResty生態
場景
基於OpenResty的常用架構模式
負載均衡
單機閉環
分佈式閉環
接入網關
核心接入Nginx功能
業務Nginx功能
Web應用
如何使用OpenResty開發Web應用
項目搭建
啓停腳本
配置文件
nginx.conf配置文件
nginx.conf項目配置文件
業務代碼
模板
公共Lua庫
功能開發
基於OpenResty的常用功能總結
一些問題
應用數據靜態化架構高性能單頁Web應用
整體架構
CMS系統
前端展示系統
控制系統
數據和模板動態化
多版本機制
異常問題
使用OpenResty開發Web服務
架構
單DB架構
DB+Cache/數據庫讀寫分離架構
OpenResty+Local Redis+Mysql集羣架構
OpenResty+Redis集羣+Mysql集羣架構
實現
後臺邏輯
前臺邏輯
項目搭建
Redis+Twemproxy配置
Mysql+Atlas配置
Java+Tomcat安裝
Java+Tomcat邏輯開發
Nginx+Lua邏輯開發
使用OpenResty開發商品詳情頁
技術選型
核心流程
項目搭建
數據存儲實現
商品基本信息SSDB集羣配置
商品介紹SSDB集羣配置
其他信息Redis配置
集羣測試
Twemproxy配置
動態服務實現
項目搭建
項目依賴
核心代碼
基本信息服務
商品介紹服務
其他信息服務
輔助工具
web.xml配置
打WAR包
配置Tomcat
測試
nginx配置
綁定hosts測試
前端展示實現
基礎組件
商品介紹
nginx配置
前端展示
核心代碼
初始化模塊
模板html片段
nginx配置
測試
優化