單元化,set集裝箱,意思都差不多,一個set或單元服務(wù)一定量用戶,根據(jù)用戶位置轉(zhuǎn)向就近機房為其服務(wù),每個set或單元都有在其他機房的備份便于容災(zāi)
-
一個請求可能經(jīng)歷的路徑(目前使用手機的情況居多,以app為例)
- 1.請求一個域名(httpDNS or GSLB獲取就近服務(wù)器機房VIP-通過用戶IP信息)
- 2.lvs-fullnat負載均衡到一個real server(一般是nginx)
- 3.nginx再負載均衡到backend server(一般是tomcat or jetty)
-
httpDNS or GSLB
- 根據(jù)服務(wù)器域名 和 用戶信息 獲取 就近的機房VIP
-
機房
- 一般至少都有2-3個異地機房(如:北京,廣州,華中等地)
-
DB
假設(shè)機房a,b,c
- 機房a: mysql master, mysql slave
- 機房b: mysql slave
- 機房c: mysql slave
-
讀寫分離組件
一般我們都使用Druid數(shù)據(jù)庫連接池
- 可以基于druid寫一個讀寫分離的數(shù)據(jù)庫組件,以jar包的形式,可以看成mysql-connector-j的plus版本
- 讀的時候再支持負載均衡
-
服務(wù)化
- 抽出核心的業(yè)務(wù)服務(wù)化,獨立出來
- 現(xiàn)有的rpc框架實現(xiàn)其服務(wù)化, dubbo(不跨語言,僅java)
-
容災(zāi)
- mysql 存儲: 一主多從-多機房
- 服務(wù)多機房部署
- nginx-backend server
- openresty(lua) 檢測backend出問題時返回靜態(tài)文件如json數(shù)據(jù)
- 此json數(shù)據(jù)可以是task定時請求接口獲取
-
服務(wù)降級-保證核心業(yè)務(wù)正常使用
- 自動降級
- 非核心業(yè)務(wù)統(tǒng)計qps,達到閾值,斷掉調(diào)用核心業(yè)務(wù)接口,避免核心業(yè)務(wù)受影響
- 手動降級
- 降級開關(guān)
- 服務(wù)a調(diào)用存儲api,打開降級開關(guān),此調(diào)用被切斷直接返回值
- 降級開關(guān)
- 自動降級
-
降低mysql讀壓力
- 這里可以添加一層redis,請求到redis獲取數(shù)據(jù),task刷數(shù)據(jù)到redis。調(diào)用很頻繁的可以再加一層local cache,本機緩存,避免redis壓力過大,也可以減少網(wǎng)絡(luò)流量。
-
限流
- nginx限流
- backend限流
- 常見算法:令牌桶 漏桶
監(jiān)控及報警
機器信息(cpu使用率,負載,內(nèi)存使用,網(wǎng)絡(luò)流量等)監(jiān)控
服務(wù)器監(jiān)控nginx, tomcat or jetty, rpc server, mq
服務(wù)調(diào)用次數(shù):失敗,成功,異常
線上錯誤日志異常統(tǒng)計報警
常見問題解決方案
-
cpu過高 top
- 一般是jvm進程問題 dump線程堆??纯淳€程都在干什么
- 有可能是共享了一臺物理機,受到其他業(yè)務(wù)的影響
-
內(nèi)存泄漏
- dump內(nèi)存 IBM memory analyzer分析 可疑泄漏點