1. 程式人生 > >《億級流量網站架構核心技術》目錄一覽

《億級流量網站架構核心技術》目錄一覽

在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配置

測試

優化

作者:張開濤

文章出處:開濤的部落格(訂閱號ID: kaitao-1234567)