閒來無事,總結了下架構設計方面的一些思考數據庫
一、穩定性跨域
。一切以穩定爲中心緩存
。架構儘量簡單、清晰服務器
。不過分設計架構
二、解耦/拆分運維
。穩定部分與易變部分分離異步
。核心業務與非核心業務分離分佈式
。主流程與輔流程分離組件化
。應用與數據分離架構設計
。服務與實現細節分離
。數據拆分:讀寫分離、分庫分表、冷熱數據分離
三、抽象化
。應用抽象化:應用只依賴服務抽象,不依賴服務實現細節、位置
。數據庫抽象化:應用只依賴邏輯數據庫,不須要關心物理庫的位置和分片
四、鬆耦合
。跨域調用異步化:不一樣業務域之間儘可能異步解耦
。非核心業務儘可能異步化:核心、非核心業務之間,儘可能異步解耦
。必須同步調用時,須要設置超時時間和任務隊列長度
五、高可用
。集羣容錯:應用系統集羣,避免單點
。多機房容災,異地多活
。分流:水平可擴展-在線擴容機器
。降級:非核心業務可根據狀況降級處理(業務直接不展現或mock數據或直接利用本地緩存)
。限流:對流量作過濾,保證部分請求可用
。自動化運維
六、靈活
。支持灰度發佈,分步切流量
。功能開關,可回退
。A/B test,配備相應數據展現層,及時感知數據變化
七、監控
。服務器監控:內存、cpu、i/o、負載
。應用監控:qps、rt、gc
。異常監控報警
。分佈式鏈路追蹤監控:zipkin、pinpoint
。業務監控:核心業務生命週期監控,好比根據訂單號獲取全部相關生命週期和數據
八、領域建設
。釐清業務邊界,建設領域模型
。基礎業務/服務下沉,可複用
。平臺/組件化:可搭積木式構建新業務,下降成本
。數據收斂:只能經過服務來訪問其餘領域的數據
九、依賴原則
。禁止循環依賴
。穩定部分依賴:穩定部分不依賴易變部分、易變部分能夠依賴穩定部分
。核心服務依賴:核心服務不依賴非核心服務、非核心服務可依賴核心服務,保證核心服務穩定
。基礎服務依賴:基礎服務不向上依賴流程服務、流程服務/組合服務可向下依賴基礎服務,保證基礎服務穩定
。平臺服務依賴:平臺服務不依賴上層應用、上層應用可依賴平臺服務,保證平臺服務穩定
。非功能性服務依賴:非功能性服務不依賴功能性服務、功能性服務可依賴非功能性服務,保證非功能性服務穩定
。跨業務域調用時,儘量異步弱依賴
十、服務設計
。無狀態,接口調用冪等
。可複用,複用粒度是有業務邏輯的抽象服務,不是服務細節
。鬆耦合、高內聚
。可治理
。基礎服務之間物理隔離,包括數據層
寫了這麼多,無非就是圍繞穩定性、可擴展性、易用性、靈活性展開的,其中重中之重是穩定性
失去了穩定性,其餘一切都是扯淡
另外,架構必須緊貼業務,拋開了業務,全部技術也都是扯淡,產生不了價值