概要
設計系統時不僅要考慮功能性需求,還要考慮一些非功能性需求,比如:
- 擴展性
- 可靠性和冗余
- 安全和隱私
- 服務依賴
- SLA要求
下面對這5項需要考慮的事項做個簡單的說明
1. 可擴展性
數據量增長如何擴展?
流量增長如何擴展?
業務功能增長如何擴展?
你的系統最少需要多少資源?你應該做好高利用率的打算,并且要知道使用過多的資源可能會阻礙服務的擴展。
同時還要考慮當前的硬件支持狀況:添加更多的資源可能比預料的時間多得多,或者成本太過昂貴。
2. 可靠性和冗余
如何處理瞬間突發錯誤,比如臨時中斷等情況?
如何發現數據存儲中的數據損壞或丟失?
有哪些因素會造成數據丟失?比如用戶操作錯誤、程序漏洞、數據庫故障。
如何應對數據丟失,數據丟失有什么影響?數據丟失如何修復,在恢復之間會發生什么?
如果只丟失了部分數據,你能繼續提供服務嗎?
3. 安全和隱私
列出所有已知的漏洞和潛在的不安全依賴關系。
考慮可能潛在的攻擊,如何預防或緩解攻擊?
考慮是否有可能泄露隱私數據的可能,如何應對?
如果出于某種原因,你的應用程序沒有考慮安全或隱私,需要明確說明原因。
4. 服務依賴
應用程序啟動時必須要依賴哪些服務?
如果你依賴的其他服務在一段時間內不可用,會發生什么情況?
引入的服務是否存在循環依賴,即依賴環?比如你依賴服務A,服務A依賴服務B,服務B依賴你的服務。
5. SLA 要求
有什么機制可以審計和監控應用程序的服務等級保證(SLG)?
你如何保證承諾的可靠性水平?