架構師訓練營第 1 期 - 第 11 周總結
安全架構
Web 攻擊與防護
XSS 跨站點腳本攻擊 (Cross-Site Scripting)
攻擊一
用戶登錄到一個正常的服務器,在登錄狀態中
惡意者推送一個惡意的腳本
通過瀏覽其他頁面,此頁面包含攻擊腳本
通過郵件注入攻擊腳本
用戶在自己的瀏覽器執行攻擊腳本
以用戶登入的帳號執行
執行後將惡意腳本擴散出去
攻擊二
攻擊者直接攻擊目標服務器
攻擊者直接發布含有惡意腳本的請求
惡意腳本存除在網站的數據庫
其他用戶瀏覽相關信息時,在自身的瀏覽器不經意執行惡意腳本
防禦手段
消毒處理:對某些 HTML 危險字符進行轉義
">" --> >
"<" --> <
避免對不必要的內容進行轉義造成錯誤,需要先進行文本匹配後再轉義
3 < 5 中的 "<"
"<" 有 "<img src=" 上下文時,才進行轉義
原理
顯示時,還是會顯示 "<",">" 符號,但無法在瀏覽器中執行
XSS 攻擊一般都是通過在請求中嵌入惡意腳本
這些腳本是一般用戶輸入中不使用的
進行過濾和消毒,就可以防止大部分攻擊
消毒是所有網站最必備的XSS 防攻擊手段
SQL 注入攻擊
攻擊
攻擊者提交的請求字符串裡面,包含 SQL 命令內容
在服務器端執行這些非法的 SQL 命令
攻擊者必須知道數據庫的表結構
攻擊者獲取數據表結構信息的手段
開源
網站使用開源軟件搭建 (如 Discuz),數據庫結構是公開的
錯誤回應
網站開啟錯誤回顯
攻擊者故意製造非法參數
服務端異常訊息輸出到瀏覽器端
攻擊者根據回顯訊息,猜測數據庫表結構
盲注
網站關閉錯誤回顯
攻擊者根據頁面變化,猜測判斷SQL語句執行情形
據此猜測數據表結構
防禦手段
請求參數消毒處理:
通過正則匹配,過濾請求數據中可能注入的 SQL 文
如 : drop table”、“\b(?:update\b.*?\bset|delete\b\W*?\bfrom)\b”等
插入 & (空白),顯示時會顯示空白,但已非正常SQL命令
是比較簡單粗暴又有效的手段
SQL 預編譯參數綁定
攻擊者的惡意 SQL 會被當作 SQL 的參數,而不是 SQL 命令被執行
是最好的防 SQL 注入方法
CSRF 跨站請求偽造攻擊
攻擊
用戶登錄到一個正常的服務器,在登錄狀態中
用戶又訪問攻擊者的服務器
用戶收到攻擊者服務器的請求返回響應
用戶端執行返回響應,此響應中包含一個新的請求至正常服務器
在用戶端不知情的情況下,向正常服務器發請求
與XSS相異的地方
XSS 透過腳本攻擊
CSRF 透過釣魚網站,誘導用戶去訪問
更有針對性的對用戶攻擊
防禦手段
表單 Token
在頁面表單應加一個隨機數 Token
每次請求的 Token 都不相同
請求提交後檢查 Token 的值是否正確,以確定請求提交者是否合法
有些會根據裝置的指紋,用戶的資訊,透過簽名產生 Token
原理
CSRF 是一個偽造用戶請求的操作,需要構造用戶請求的所有參數
表單 Token 就是阻止攻擊者獲得所有請求參數的可能
驗證碼
請求提交時,需要用戶輸入驗證碼
手機驗證碼
圖形驗證碼
原理
避免用戶在不知情的情況下被攻擊者偽造
優點
簡單有效
也可以防爬蟲、機器人操作
缺點
是一個糟糕的用戶體驗,在必要時才使用
如支付交易
Referer Check
在 HTTP 請求頭的 referer 域中記錄請求來源
通過檢查請求來源,驗證是否合法
缺點
有一定的侷限性
referer 並不依定總是能得到
其他需要關注的攻擊和漏洞
Error Code 錯誤回顯
許多 Web 服務器默認是打開異常信息輸出
將未處理的異常堆棧信息直接輸出到用戶端瀏覽器
當成 Debug 信息
攻擊者故意製造非法輸入,獲得異常信息,尋找系統漏洞進行攻擊
防禦手段
在生產環境的應用,最好關閉錯誤回顯
配置 Web 服務器參數,跳轉 500 頁面到專門的錯誤頁面即可
HTTP 響應碼 500,表示服務器內部錯誤
各個功能,Web 常用的 MVC 框架也可以做到
HTML 注釋
使用 HTML 注釋語法對程序進行注釋
HTML 注釋會顯示在客戶端瀏覽器,給攻擊者造成便利
防禦手段
最終發布前須進行代碼 review
自動掃描,避免 HTML 注釋漏洞
文件上傳
攻擊者利用網站上傳文件功能,上傳可執行程序
通過該程序獲得服務器端命令執行能力
攻擊者也可以此為跳板攻擊集群環境的其他機器
防禦手段
設置上傳文件白名單
只允許上傳可靠的文件類型
修改上傳文件名
使用專門的存儲
路徑遍歷
攻擊者在請求的 URL 中使用相對路徑,遍歷系統未開放的目錄和文件
防禦手段
將 Javascript、CSS 等資源文件,使用獨立服務器、獨立域名
其他文件不使用靜態 URL 訪問
動態參數不包含文件路徑信息
利用文件ID,代替路徑
通用的防禦
Web 應用防火牆
利用應用防火牆統一攔截、過濾用戶請求
識別攻擊內容,並進行消毒、過濾處理
ModSecurity
開源的 Web 應用防火牆
可以嵌入到 Web 應用服務器中,也可以以獨立程序啟動
支援多種語言版本
採處理邏輯與規則集合分離的架構模式
處理邏輯
負責請求和響應的攔截過濾,規則加載執行
規則集合
對具體攻擊的規則定義、模式識別、防禦策略訂定
網站安全漏洞掃描
根據內置規則,模擬攻擊者行文
用以發現網站安全漏洞
可以自行開發,也有商用網站安全漏洞掃描平台
加密與解密
攻擊者主要目的: 獲得用戶敏感訊息
防禦
第一道門檻: Web 防護
第二道門檻: 將敏感信息加密處理
信息加密技術
單向散列加密
加密是單向的
從明文加密成密文
不能從密文反算或解密出明文
加入 salt 原因
算法不多且公開
如果有明文-密文映射表,可以得知明文
故加入特別的信息與明文一起加密
特別的字符串
或用戶的其他資訊
攻擊者無法猜測映射出來的哪一部分屬於明文,哪一部分屬於 salt
針對不需要知道明文的應用
如用戶的密碼
不存儲明文,只存儲密文
Example
註冊
用戶註冊
系統將密碼利用單向散列加密成密文
存儲密文至數據庫
驗證
用戶利用密碼登入
將密碼利用單向散列加密成密文
將密文與數據庫中的密碼密文比對
對稱加密
可以由密文反解出明文
加解密演算法使用相同的密鑰
加密
明文 + 密鑰 ---(加密演算法) ---> 密文
解密
密文 + 密鑰 ---(解密演算法) ---> 明文
非對稱加密
可以由密文反解出明文
加解密演算法使用不同的密鑰
得知加密密鑰不能推算解密密鑰
反之亦然
加密
明文 + 加密密鑰 ---(加密演算法) ---> 密文
加密密鑰 --> 公鑰
解密
密文 + 解密密鑰 ---(解密演算法) ---> 明文
解密密鑰 --> 私鑰
應用
HTTPS 加密: 加密密鑰公開給所有用戶
數位簽章
用私鑰進行加密
私鑰只有個人知道
用公鑰進行解密
公鑰大家都知道
如果成功,代表此訊息真的是由私鑰擁有人發出
密鑰安全管理
對密鑰進行分片存儲
對外部攻擊者
外部攻擊者無法得到所有密鑰
對內部員工
每個員工不知道所有密鑰分片
分擔密鑰管理責任
單一員工無法洩漏所有密鑰
加密技術要能成功防止攻擊者取得敏感信息,密鑰的保護是一個關鍵
演算法是公開的
只有密鑰是私密的
密鑰安全管理及加解密服務系統
密鑰安全存儲服務
加解密服務
應用程序不用知道密鑰及加解密算法
只需透過服務接口進行加解密
反垃圾與風控
反垃圾郵件
手段
訓練分類算法
將一批量郵件區分垃圾郵件與正常郵件
進行分類模型訓練
得到正常及垃圾郵件的特徵
識別
將待處理郵件輸入分類算法
分類算法利用分類模型進行分類
分出正常及垃圾郵件
輸出是正常或垃圾郵件的概率值
貝葉斯分類算法
後驗概率
一號箱子放有紅色、白色球各20個,二號箱子放有白色球10個、紅色球30個,隨機挑選一個箱子,取出一個球的顏色是紅色,請問這個球來自一號箱子的概率是多少
正常郵件有若干特徵值及其概率,垃圾郵件有若干特徵值及其概率,現在隨便給一份文件,從裡面取出來的特徵值有若干,請問此特徵屬於正常郵件或垃圾郵件的概率是多少
公式
P(B | A) = P( A | B) * P(B) / P(A)
A 發生的條件下,B的概率是多少
P(B | A) : 球是紅色(A)的情況下,是一號箱(B)的概率
P(A | B) : 在一號箱內,紅色球的概率
P(B) : 選擇一號箱的概率
P(A) : 紅色球會出現的概率
ex
P( B | A) : 包含 "茶葉" 這個特徵值的情況下,是垃圾郵件的概率是多少
P( A | B) : 在垃圾郵件中,"茶葉" 這個特徵值的機率
P(B) : 垃圾郵件出現的機率
P(A) : "茶葉" 這個特徵出現的機率
執行過程
分模型訓練及樣本分類兩階段
布隆過濾器
用較少的空間,存儲大量的信息
如垃圾郵件來源 E-mail address 黑名單
標註黑名單
準備 16 G bit 空間
將每一個在黑名單中的 email ,通過 8 個函數計算出8 個值
每一個值介於 0 ~ 16G - 1
將 8 個值 mapping 至這 16 G bit 的位置,將此位置 set to 1
辨識黑名單
將 email 透過相同 8 個函數計算出 8 個值
如果每個值在16G中對應位置的值均為 1 -->黑名單
只要有一個位置不是 1 --> 不是黑名單
布隆過濾器
只會出現錯判的情況
錯判: 不是黑名單,卻判成是黑名單
不會出現漏判的情況
漏判: 是黑名單,卻沒有判斷出來
電子商務風險控制
電子商務網站
代理購物交易
有 B2B、B2C、C2C多種形式
買賣商方信息不對等,交易本來就存在風險
交易安全是電子商務網站的底線
風險分類
帳戶風險
帳戶盜用
惡意註冊帳戶
買家風險
買家惡意下單,占用庫存
黃牛利用促銷,搶購低價商品
良品拒收,詐欺退款
B2B交易中虛假詢盤
賣家風險
不量賣家進行惡意詐欺
貨不對板
虛假發貨
炒作信用
發布違禁、侵權商品
交易風險
信用卡盜刷
支付欺詐
洗錢套現
風險控管
大型電商網站都配備有專門的風控團隊
風控手段
機器自動辨識高風險交易
高風險交易由風控審核人員進行人工審核
機器自動風控技術手段
規則引擎
當交易的某些指標滿足一定條件,會被認為是有高風險詐欺的可能性
用戶來自詐欺高發地區
交易金額超過某個數值
登陸地址距離差距過大
用戶登陸地與收貨地不符
用戶第一次交易
等等
網站在運營過程中,結合業界最新發現,會總結出數以千計的高風險交易規則
將這些規則通過編程代碼實現這些規則
缺點
不斷發現新的交易風險類型
不斷調整規則
不斷修改代碼
出現規則衝突
規則越多,性能越差
機器學習
利用數據採集,收集資料
對資料進行加工處理
處理後訓練分類模型
由分類算法加上分類模型進行風險分值
高可用
可用性度量
可用性指標
一個客觀指標來衡量系統的可用性
定量的可用性測試結果
通常以 "年" 為時間單位來進行度量
網站年度可用性指標
( 1 - 網站不可用時間 / 年度總時間) * 100%
網站不可用時間 (故障時間)
故障修復時間點 - 故障發現 (報告) 時間點
修復時間
系統 bug 解決,重新上線的時間
發現(報告)時間
客服報告時間
系統報警時間
可用性的定性描述
基本可用 : 兩個 9 (99%)
年度停機時間小於 88 小時
較高可用 : 3 各 9 (99.9%)
年度停機時間小於 9 小時
具有自動恢復能力的高可用 : 4 個 9 (99.99%)
年度停機時間小於 53 分鐘
極高可用性 : 5 個 9 (99.999%)
年度停機時間小於 5 分鐘
通常一般互聯網應用通常是 4 個 9
再高: 挑戰和難度更大、投入成本更高
再低: 不可用的用戶體驗會變差
但也根據應用的不同有不同的需求
對金融業應用需要更高些,如 99.995~99.997%
對信息發布類容忍度會更高,可以低一些
要看系統的目標是甚麼
在投入成本和帶來回報之間權衡
在用戶可以接受的範圍之內,投入成本最小即可
故障分管理
系統可用性必須和個人職責考核連結
這樣才有動力去提升可用性
代碼質量、開發責任心才會提高,架構設計才會更完善
遇到系統問題,才會積極參與修復問題
讓每個部門、團隊、個人對系統的高可用負責
故障分
根據故障的等級進行等級分類
人為定義
定義每個等級的權重
人為定義
可以根據事故等級及權重算出一個故障分數
將故障分具體核算給每個團隊或個人
管理流程
年初時訂定可用性等級即故障總分數
將故障總分數分配給每個部門
每個部門再將分配到的分數,分配給每一個小組
每個小組再分配給每個個人
故障發生時,根據故障等級權重及故障時間計算出一個故障分數
權重 * 故障時間
將故障分數依故障責任百分比分配給引發故障的團隊或個人
由年初分配分數中扣除
年終結算時,計算剩下的分數
若為負分,則影響 KPI 的達成
故障處理流程及考核
重要是最後覆盤
決定故障等級及權重
通常由業務部門依對公司產生的影響程度決定
故障責任的界定
決定責任百分比
引起故障的原因
硬件故障
軟件 bug
系統發布
並發壓力
網路攻擊
外部災害
提升系統可用性的架構方案
解耦
高內聚、低耦合的組件設計原則
面向對象基本設計原則
面向對象設計模式
領域驅動設計建模
隔離
業務與子系統隔離
買家子系統
賣家子系統
前提是業務解耦合
微服務與中台架構
將系統的服務拆分,部署在不同的服務器上
服務的故障,不會影響到整體系統
生產者消費者隔離
利用消息對列隔離
虛擬機與容器隔離
不同服務部署在不同虛擬機或容器內
異步
多線程編程
反應式編程
異步通信網路編程
事件驅動異步架構
備份
集群設計
將服務部署在多台服務器上
再利用負載均衡分配用戶請求
多台服務器互為備份
數據庫複製
CAP原理
主從複製
主主複製
失效轉移 (Failover)
備份後,遇到失效,轉移至其他服務器
數據庫主主失效轉移
負載均衡失效轉移
設計無狀態的服務
冪等
與失效轉移相關,調用服務失敗後,重新發送請求給其他服務器
服務重複調用有時候無法避免
比如服務處理成功,但應用沒有收到響應,導致應用重新提交請求
必須保證服務重複調用和調用一次產生的結果相同
通過交易編號信息進行服務調用有效性校驗
有效的操作才繼續執行
事務補償
傳統事務 ACID
分布式事務 BASE
分布式的環境中比較難保證事務的一致姓
可能是不同程序對數據庫發出同一事務中的請求
也可能對不同數據庫發出同一事務中的請求
通過執行業務邏輯逆操作,使事務回滾到事務前狀態
重試
通過重試的方式修復單次調用故障
注意上游調用者超時時間要大於下游調用者超時時間總和
熔斷
當某個服務出現故障、響應延遲或失敗率增加,繼續調用這個服務會出現服務級聯失效
因為請求阻塞、資源消耗增加
級聯失效:因服務失效造成系統失效的連鎖反應
緩存失效--> 資料庫調用失效 --> 系統崩潰
使用斷路器阻斷對故障服務的調用
監控服務的響應失敗率或延遲率
動態決定斷路器的關閉、打開、半開的狀態
限流
對進入系統的用戶請求進行流量限制
超過系統最大處理能力,則丟棄一部分的用戶請求,保證整個系統可用
限流算法
計數器算法 (固定窗口、滑動窗口)
固定窗口
方法
使用計數器,在週期內累加訪問次數
當達到設定的限流值時,觸發限流策略
下一個周期開始,計數器清成零,重新記數
臨界點問題
當訪問請求集中在前一個週期後半及這一周期的前半時
請求沒有超過每一個周期的限制量
但請求仍然會超過系統最大處理能力
滑動窗口
將時間周期分成N個小周期,分別記錄每個小周期內的方問次數
並根據時間滑動,刪除過期小周期次數
根據窗口內各小周期次數總和決定是否觸發限流策略
令牌統算法
以固定速度向令牌桶增加令牌,直到令牌桶滿
請求到達時向令牌桶請求令牌
取到令牌,請求通過
否則觸發限流策略
漏桶算法
將訪問請求到達時,放入漏桶
漏桶以固定速率進行訪問請求釋放
依系統最大可處理的速率
如果當前漏桶容量已滿則觸發限流策略
自適應限流
使流量跟系統能力自動的匹配
對系統實時處理能力進行監控採集
實時自動評估 QPS (Queries per second)
將採集結果反饋給 PID 控制演算法進行決策
業務流量的不確定性與技術方案的自適應性天生一對
降級
系統高並發的時候,將非核心的功能關閉,提高核心功能的處理能力
某些非核心功能會給系統產生非常大的壓力
如確認收貨,對數據庫產生很大的壓力
更改訂單狀態
完成支付確認
進行評價
非核心功能通常不需要即時處理
異地多活
將數據中心分布在多個不同地點的機房
每個機房都可以對外提供完整的系統服務
用戶可以連接任何一個機房進行訪問
是高可用的最高顯示,投入成本也最多,部署難度最大
異地多活的難點在保持數據的一致性及同步
架構運維方案
發布
發不需要在服務器上關閉原有的應用、重新部署、再啟動新的應用
整個過程要求不影響用戶的使用
網站的發布過程與服務器當機效果相當
設計高可用架構需考慮服務器的當機概率為每周一兩次
考慮新應用的發布
服務器分批發布流程
同一時間中,有新、老的應用服務代碼同時存在
自動化測試
即使是系統功能小幅度的增加,仍然需要對整個網站功能進行
全面性的回歸測試
各種瀏覽器的兼容性測試
保證系統沒有引入未預料的 bug
在發布頻繁的網站應用中使用人工進行測試,成本和時間都難以承受
人工測試也無法保證測試的結果和質量
採用Web 自動化測試技術,使用自動測試工具及腳本完成測試
如 ThoughtWorks開發的 Selenium
運行在瀏覽器中,模擬用戶操作
同時完成 Web 功能及瀏覽器兼容測試
手工測試與自動化測試的成本比較
手工測試
網站剛開始發布時,功能少,成本比較小
每次開發新功能,除了新功能外,舊功能也需要測試
隨著軟件規模的增長,測試需要越來越多時間
每次發布的測試成本會比前一次發布來的更高
自動測試
需要一切前置投資,成本比較高
安裝自動化測試工具
部署持續集成服務器
準備測試腳本及測試內容、預期的結果等
後續投入相對便宜,只需要為新功能創建新測試即可
最後會達到一個平衡點,然後自動化測試總體成本會低於手工測試成本
自動化測試與單元測試
自動化測試
測試工程師的測試
保證整個系統的功能完整性
保證線上系統的正確性
單元測試
開發工程師的測試
測試具體程序內部的方法
保證自己開發的代碼正確性
自動化部署
手工
開發工程師開發代碼提交
測試工程師完成系統測試
運維工程師打包發布
自動化
開發工程師提交代碼,觸發自動測試
測試結果通過,觸發自動發布
加快代碼上線的過程
用自動化的手段,管理全部的發布過程
持續部署
三步驟
持續集成
允許工程師隨時向公共分支提交代碼
立即對系統進行自動化測試
持續交付
跑單元測試
軟件打包
將軟件部屬到各種測試環境中
持續部署
代碼在沒有人工干預的情況下被測試、構建、部署並推送到生產環境
沒有廣泛實行的原因
對大公司而言,開發工程師多,可能會產生一些不可控的因素
各團隊開發時間不一致
還是要控制發布的時間節點
對小公司而言,沒有技術力量去推行
主要推動者為雲服務的廠商
預發布驗證
即使嚴格測試,軟件部署到生產環境後,經常出現各種問題
某些問題無法在測試環境中測出
主要原因是測試環境與線上生產環境不相同
線上環境依賴
其他服務,如數據庫、緩存、公用業務服務
第三方服務
在測試環境中,這些服務可能都是只是假接口模擬
預發布服務器
特殊用途的服務器
與線上正是服務器唯一的差別是沒有配置在負載均衡服務器上
只有內部開發工程師可以訪問,外部用戶無法訪問
網站發布時,先發布到預發布機器上
進行預發布驗證
執行典型的、關鍵的業務流程,確認系統沒有問題後才正式發布
不是全量的功能測試
主要在驗證新應用程序在線上環境上執行是否正確
測試正確後在同步到其他真正的應用服務器上
代碼版本控制
對於大型互聯網系統,涉及許多團隊和工程師
需要對相同代碼庫進行共同開發和維護
各團隊開發周期和發布時間各不相同
要進行代碼管理
保證代碼發布版本穩定正確
保證不同團隊開發不受影響
對於互聯網快速迭代和快速版本更新的開發模式非常重要
方式
主幹開發、分支發布
修改在主幹上進行
需要發布時,從主幹拉一個分支進行發布
此分支成為一個發布版本
若此版本有 bug,繼續在此分支修改發布
並將修改 merge 回主幹
優點
主幹代碼反映目前整個應用的狀態
便於管理和控制,也利於持續集成
分支開發、主幹發布
需要開發一個新功能或修復一個bug時,從主幹拉一個分支進行開發
開發完成並通過測試後,merge 回主幹
從主幹進行發布
主幹上的代碼,永遠是最新發布的版本
優點
各分支獨立開發,互不干擾
可以使不同發布周期的開發在同一個應用中進行
缺點
分支開發一段時間後與主幹的代碼不太一樣
造成 merge 時產生大量的衝突
需在開發過程中不斷地與主幹合併
目前互聯網應用主要使用分支開發,主幹發布的方式
自動化發布
與自動化部署不同
自動化部署:無須人工的干預下,自動將代碼部署上線
自動化發布:發布還是人工控制,但是發布的過程是自動的
發布過程自動化的管理
剔除不符合規定、確認失敗項的代碼
使其他正常的代碼可以完成發布
灰度發布
針對集群規模龐大的系統
將集群服務器分成若干部分
每天只發布一部分服務器,觀察運行狀況
隔天繼續發布另外一部分服務器
持續幾天時間才會把整個集群全部發布完畢
期間若有故障,只需要回滾已發布的一部份服務器即可
原本運用在大規模服務器的發布,但現在也被利用在一些新業務功能測試的發布
將新功能發布在一部分服務器上
觀察業務指標、性能指標等等
再決定要不要繼續發布或直接回滾
網站運行監控
不允許沒有監控的系統上線
對於網站運維和架構設計優化至關重要
監控數據採集
涵蓋所有非直接業務行為的數據採集與管理
網站用戶行為日誌
用戶在瀏覽器上所做的所有操作及其所在的操作環境
包括
用戶操作系統
瀏覽器版本訊息
IP地址
頁面訪問路徑
頁面停留時間
這些數據對下列很重要
統計網站 PV/UV指標
分析用戶行為
優化網站設計
個性化營銷與推薦
收集手段
服務器端日誌收集
大多數Web服務器都具備日誌記錄功能
缺點是可能出現信息失真
IP地址是代理服務器地址,而不是用戶真實IP
多個鍵結指向同一個頁面的情況下,無法分辨訪問路徑
客戶端日誌收集
瀏覽器可以收集用戶真實的操作行為
缺點是麻煩,需要再頁面嵌入特定的 JS 腳本
業務運行數據
具體業務場景相關的技術和業務指標
緩存命中率
平均響應延遲時間
每分鐘發送郵件數目
待處理任務數
需要在具體程序中採集並報告,彙總後統一顯示
系統性能數據
收集服務器性能指標
盡早做出故障預警
即時判斷應用狀況
根據性能監控數據
運維工程師可以合理安排服務器集群規模
架構師及時改善系統性能及調整系統伸縮性策略
開源工具 : Ganglia
支持大規模服務器集群
支持以圖形的方式在瀏覽器展示實時性能曲線
監控管理系統
架構
被監控系統
執行代理進程
收集服務器上各項指標
將指標推送給監控服務
監控服務
存儲各項指標資料
對收集的各項指標,進行大數據計算分析
進行報警、自動化控制
監控系統功能
系統性能評估
集群規模伸縮性預測
根據實時監控數據進行
風險預警
失效轉移
自動負載調整
最大化利用集群所有機器的資源
報警
配置報警閾值
值守人員聯繫方式
報警方式
郵件
即時通訊工具
手機短信
語音報警
自動控制
自動失效轉移
應用程序訪問失敗時進行失效轉移
發現故障時,主通通知應用,進行失效轉移
自動擴容
訪問壓力大時,導致服務性能指標下降
自動觸發服務及群擴容
自動限流
根據監控指標,自動控制訪問流量
高可用價值觀
保持簡單,使問題易於被發現,快速解決
架構簡單
程序設計簡單
直接調用依賴關係簡單
數據代表的意思是簡單的
目標明確,解決特定環境下的具體問題
解決系統上具體的問題
達成系統高可用的目標
而不只是引進高大上的技術
價值回歸,成本收益要合理
版权声明: 本文为 InfoQ 作者【Panda】的原创文章。
原文链接:【http://xie.infoq.cn/article/5cf69f2b242eee867fb937bd7】。未经作者许可,禁止转载。
评论