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