服務呼叫冪等性實現
本文以下內容摘抄自《分布式服務架構》第三章
1、需求分析和整理階段:梳理所有用例和場景,並抽象出系統面向的使用者和角色,梳理對於每個使用者和角色應該提供的功能需求,非功能質量需求和限制。其中非功能質量需求包括:高可用性、高效能、可伸縮、可擴充套件、安全性、穩定性、健壯性、可測試性等,然後對功能性需求和非功能性質量需求進行整理,識別核心需求和特色需求,最後以核心需求和特色需求為根本來展開架構設計。
3、詳細設計階段:通常會使用多檢視的方法來描述系統的架構,多檢視包括:資料檢視、邏輯檢視、開發檢視、程序檢視、物理檢視、效能檢視、安全檢視等。
atam是乙個能夠在專案開始實施之前評估架構是否能夠滿足這些非功能質量的方**。這個方**通過在架構設計的不同階段提出不同的問題,來幫助架構設計人員發現架構設計上的問題,並在實踐中總結出設計的模式,進而可以將這些模式應用到將來更多專案中。
核心非功能質量指標
描述高效能
執行效率高、價效比高
可用性持續可用行、縮短宕機時間、出錯恢復、可靠性
可伸縮性
垂直伸縮、水平伸縮
可擴充套件性
可插拔、組建重用
安全性資料安全、加密、熔斷、防攻擊
對於乙個線上服務:
高效能:指單節點服務的吞吐量和響應時間;
可用性:以全年時間減去宕機時間,並用得到的差值初一全年時間計算得出,通常是表明服務質量最核心的指標;
可伸縮性:指橫向擴充套件的能力,也就是隨著節點的增加,服務能力能夠隨著節點增加而線性增加,如果不能,則也可以使用百分比開衡量;
可擴充套件性:指架構上的靈活性及插拔性,將來可以不斷的在系統上疊加新業務和新功能。
安全性:系統的安全保護措施,要防止攻擊和資料洩漏。
其他非功能質量指標
描述可監控性
快速發現、定位解決
可測試性
可灰度、可預覽、可mock、可拆解
魯棒性容錯性、可恢復性
可維護性
易於維護、監控、運營和擴充套件
可重用性
可移植性、解耦
易用性可操作性
可監控性:乙個線上服務如果沒有監控系統,那麼系統的可用性就沒法保障,監控系統可以幫助開發人員和應急人員快速發現問題;
可測試性:指我們開發的服務一定要在不同的階段有相應的方法和途徑來測試,包括qa測試、準生產測試和生產測試等;對不具備測試條件的系統使用mock等方式來解決;
魯棒性:表明系統的容錯性、健壯性和可恢復性;
可維護性:指系統要易於監控、運營和擴充套件;
可重用性:指系統具有模組化、可移植、可通過迭代增加新功能的特性;
易操作性:指系統對使用者友好,方便系統的各類使用者使用
非功能質量需求的具體指標針對不同系統主要分為4部分:應用伺服器、資料庫、快取和訊息佇列。
1、應用伺服器:
訪問量至關重要,主要關心每秒請求的峰值以及對請求的響應時間等指標,通過這些指標可評估我們需要的應用伺服器資源的數量。
序號部署結構相關指標
1負載均衡策略
2高可用策略
3i/o模型(nio/bio)
4執行緒池模型
5執行緒池中的執行緒數量
6是否多業務混合部署 序號
容量和效能指標
1每天的請求量
2各界面的訪問峰值
3平均的請求響應時間
4最大的請求響應時間56
請求的大小
7網絡卡的i/o流量
8磁碟的i/o負載
9記憶體使用情況
10cpu的使用情況 序號
其他指標
1請求的內容是否包含大物件
2gc收集器的選型和配置
2、資料庫:
根據應用層的訪問量和訪問峰值,計算出需要的資料庫資源的吞吐量、每天的資料總量等,由此來評估所需資料庫資源的數量和配置、部署結構。
序號部署結構相關指標
1複製模型
2失效轉移策略
3容災策略
4歸檔策略
5讀寫分離策略
6分庫分表(分片)策略
7靜態資料和半靜態資料是否使用快取
8有沒有考慮快取穿透並壓垮資料庫的情況
9快取失效和快取資料預熱策略 序號
容量和效能指標
1當前的資料容量
2每天的資料增量(預估容量)
3每秒的讀峰值
4每秒的寫峰值
5每秒的事物量峰值 序號
其他指標
1查詢是否走索引
2有沒有大資料量的查詢和範圍查詢
3有沒有多表關聯,關聯是否用到索引
4有沒有使用悲觀鎖,是否可以改造成樂觀鎖,是否可以利用資料庫內建行級鎖
5事物和一致性級別
6使用的jdbc資料來源型別及連線數等配置
7是否開啟jdbc診斷日誌
8有沒有儲存過程
9水平分庫分表實現方法(客戶端、**、nosql)
3、快取
根據應用層的訪問量和訪問峰值,通過評估熱資料佔比,計算快取資源的大小並估算快取資源的峰值,由此來計算所需快取資源的數量、部署結構、高可用方案等。
序號部署結構相關指標
1複製模型
2失效轉移
3持久策略
4淘汰策略
5執行緒模型
6預熱方法
7雜湊分片策略 序號
容量和效能指標
1快取內容的大小
2快取內容的數量
3快取內容的過期時間
4快取的資料結構
5每秒的讀峰值
6每秒的寫峰值 序號
其他指標
1冷熱資料比例
2是否有可能發生快取穿透
3是否有大物件
4是否使用快取實現分布式鎖
5是否使用快取支援的指令碼(lua)
6是否避免了race condition
7快取分片方法(客戶端、**、集群)
4、訊息佇列
根據應用層的平均訪問量和訪問量峰值,計算出需要訊息佇列傳遞的資料量,進而計算出所需的訊息佇列資源的數量、部署結構和高可用方案等。
序號部署結構相關指標
1複製模型
2失效轉移
3持久策略 序號
容量和效能指標
1每天平均的資料增量
2訊息持久的過期時間
3每秒的讀峰值
4每秒的寫峰值
5每條訊息的大小
6平均延遲
7最大延遲 序號
其他指標
1消費者執行緒池模型
2雜湊分片策略
3訊息的可靠投遞
4消費者的處理流程和持久機制
微服務 非功能質量需求的具體指標。
非功能質量需求的具體指標針對不同的系統主要分為4部分 應用伺服器 資料庫 快取和訊息佇列,本文會總結並列出這4部分指標,以幫助讀者在實際生產實踐中做非功能質量需求的設計方案。應用伺服器 應用伺服器是服務的入口,請求流量從這裡進入系統,資料庫 快取和訊息佇列的訪問量取決於應用伺服器的訪問量。對應用伺服...
軟體設計 質量屬性 非功能性需求
當你在收集需求的時候 人們會很樂意給你乙個願望清單,寫滿了他們想要軟體系統所完成的事,也有完善的方法以使用者故事 用例 傳統的需求規格書 驗收標準等形式來捕捉這些功能需求 但是那些討厭的非功能性需求呢?非功能性需求通常被看做是能力,主要跟服務質量有關,也就是乙個軟體的質量屬性,下面大致介紹下 常見的...
軟體開發 非功能需求與功能需求
需求定義 需求 requirement 就是系統 更廣義的說法是專案 必須提供的能力和必須遵從的條件。需求分類 1 在一般使用中,需求按照功能性 行為的 和非功能性 其它所有的行為 來分類。功能性需求是說有具體的完成內容的需求。非功能性需求是指軟體產品為滿足使用者業務需求而必須具有且除功能需求以外的...