當我們在為新的產(chǎn)品或者項目進行系統(tǒng)架構(gòu)設計、制定演進路線、技術(shù)選型的時候,我們需要一些架構(gòu)原則,來指導我們的架構(gòu)設計和選型。
架構(gòu)解決的問題
架構(gòu)作為構(gòu)架在業(yè)務與技術(shù)之間鴻溝的橋梁,e.g:業(yè)務需求 --> 架構(gòu) --> 技術(shù)實現(xiàn)
其主要目的:
為了解決當下或未來軟件系統(tǒng)復雜度帶來的問題,而架構(gòu)其實并非設計出來,而是隨著業(yè)務的發(fā)展逐步演變出來的結(jié)果
架構(gòu)的一些原則
1.Security - Built security in, “安全”帶來的品牌名聲損失、用戶流失、金錢的直接損失,都是企業(yè)級應用不能容忍的事故。
可參考的實踐:
端到端的加密,傳輸?shù)臄?shù)據(jù)通過SSL加密,e.g: Request -> ELB(https) -> EC2(https)
根據(jù)系統(tǒng)不同的用途,將各個系統(tǒng)進行網(wǎng)絡分區(qū),設置不同的防火墻
2.Scalability - 動態(tài)伸縮, 至少支持兩個維度的伸縮,比如水平伸縮和垂直伸縮。
可參考的實踐:
根據(jù)用戶訪問量或系統(tǒng)負載,進行水平的增加或者減少服務器實例
可根據(jù)Segment分流,比如產(chǎn)品線類型,多品牌劃分。
3.Resilient to Failures - 健壯性,容錯
可參考的實踐:
為API設置timeouts,重試機制
異步優(yōu)于同步集成
設置自動熔斷,做到服務降級的同時,為終端用戶提供有意義的信息
防御性代碼和測試
通過ELB或者F5,隔離內(nèi)部服務與用戶的交互的直接交互,屏蔽內(nèi)部服務狀態(tài)變化對用戶操作的影響。
4.Logs,Instrumented and Monitored - 日志與監(jiān)控
可參考的實踐:
分布式追蹤, e.g: dynatrace,zipkin等
中心化日志管理, e.g: splunk
服務監(jiān)控與告警, 定義監(jiān)控指標,設置告警觸發(fā)條件
5.Configurable - 可配置,將系統(tǒng)容易變化的部分,通過配置進行管理
可參考的實踐:
前端樣式styleguide的可配置,可以輕易更換網(wǎng)站風格(換皮膚)
功能的可配置,比如feature toggle
熔斷器的可配置
配置服務器,比如Spring cloud config server,實現(xiàn)配置的動態(tài)管理
6.Automated - 自動化一切可以自動化的任務
可參考的實踐:
- CI & CD
7.Modular - 模塊化
可參考的實踐:
劃分清楚的職責 - Single responsibility of a component (done well)
關注點分離
高內(nèi)聚,低耦合
Just good enough - not over engineered
8.Reuse - 重用已用API資產(chǎn),避免不必要的重復構(gòu)建
可參考的實踐:
API文檔,e.g: SwaggerUI
API資產(chǎn)管理,比如有些商用的API Gateway, Axway能夠集中管理所有注冊的API生命周期
9.Predictable - Release - 可控發(fā)布,而不是祈禱式發(fā)布
可參考的實踐:
增量發(fā)布
回滾計劃
藍綠部署
灰度發(fā)布
隔離持續(xù)集成和持續(xù)部署
10.Consume over Rent over Buy over Build,除非需要構(gòu)建Core能力,優(yōu)先選擇Build,否則依次考慮Consume > Rent > Buy > Build