Software architecture = {Elements, Forms, Rationale/Constraints}html
元素、形式/模式、基本原理和限制前端
軟件架構的終極目標是用最小的人力成原本知足構建和維護系統的需求數據庫
一個軟件架構的優劣,能夠用它知足用戶需求的成原本衡量。若是該成本很低,而且在系統的整個生命週期內一直都維持這樣的低成本,那麼這個系統的設計就是優良的,若是該系統的每次發佈都會提高下一次變動的成本,那麼這個設計就是很差的,就這麼簡單。後端
--架構整潔之道設計模式
負責總體系統的架構設計,主要是基礎服務和各系統間的協調上,着眼全局不太注重某個應用自己架構,好比關注服務器負載,可靠性,伸縮,擴展,數據庫切分,緩存應用等方法的基礎架構設計緩存
負責某個應用的技術架構,主要偏業務系統,關注理解業務,梳理模型,設計模式,接口,數據交互等方面安全
關注某一個行業、業務的領域分析,獲取領域模型,最終得到系統的模型服務器
也能夠叫業務領域專家、行業專家、產品諮詢師、資深顧問網絡
經過設計和實現優良的軟件架構來持續下降軟件的構建和維護成本架構
軟件架構這項工做的實質就是規劃如何將系統拆分紅組件,並安排好組件之間的排列關係以及組件之間互相通訊的方式
設計原則會給咱們答案
軟件架構師的目標是建立一種系統形態,該形態會以策略爲最基本的元素,並讓細節與策略脫離關係,一個優秀的軟件架構師應該致力於最大化可選項數量
從架構師的工做內容上來劃分能夠分爲三類:
系統架構師/基礎架構師
從系統的維度,負責總體系統的架構設計,主要是基礎服務和各系統間協調上,着眼全局不太注重某個應用自己架構,好比關注服務器負載,可靠性,伸縮,擴展,數據庫切分,緩存應用等方面的基礎架構設計。
應用架構師
從應用程序的維度,負責某個應用的技術架構,主要偏業務系統,關注理解業務,梳理模型,設計模式,接口,數據交互等方面。
業務架構師
從業務流程的維度,關注某一個行業、業務的領域分析,獲取領域模型,最終得到系統的模型。也能夠叫業務領域專家、行業專家、產品諮詢師、資深顧問。
基礎架構、前端架構、後端架構是從職責上的分類。
https://mp.weixin.qq.com/s/JWOIScGrX0Hszz4uqdA6qw
http://www.ruanyifeng.com/blog/2016/09/software-architecture.html
https://book.douban.com/subject/26307910/
面向對象分解
用來支持功能性需求、系統應該被拆分爲哪些問題域、對象
關注軟件模塊組織和開發環境上、從組件、模塊、子系統的組織和分層
每一層爲上層提供有限的良好定義的接口供調用
關注進程、線程、對象等運行的概念,以及相關的併發、同步、通訊等問題
從軟件實現的角度去關注非功能性需求
從硬件角度去關注非功能屬性
https://microservices.io/patterns/cn/monolithic.html
在對等節點之間作故障轉移,相對來講簡單些
在這類系統中全部節點都承擔讀寫流量,而且節點中不保存狀態,每一個節點均可以做爲另外一個節點的鏡像
使用最普遍的故障檢測機制是「心跳」
你能夠在客戶端上按期地向主節點發送心跳包,也能夠從備份節點上按期發送心跳包
當一段時間內未收到心跳包,就能夠認爲主節點已經發生故障,能夠觸發選主操做
水平(也叫橫向擴展):用更多的節點支撐更大的請求
如成千上萬的螞蟻完成一項搬運工做
垂直(也叫縱向擴展):擴展一個點的能力支撐更大的請求
如利用一我的的能力,如蜘蛛俠逼停火車
X 軸:表明無差異的克隆服務和數據,工做能夠很均勻的分散在不一樣的服務實例上
Y 軸:關注應用中職責的劃分,好比數據類型,交易執行類型的劃分
Z 軸:關注服務和數據的優先級劃分,如分地域劃分
https://mp.weixin.qq.com/s/HE7BxH_RZo45bY2baNgt5Q
雲原生技術有利於各組織再公有云、私有云和混合雲等新型動態環境中,構建和運行可彈性擴展的應用
雲原生的表明技術包括容器、微服務、服務網絡、不可變基礎設施和聲明式 API
這些技術可讓咱們構建高度穩定、可控、可觀測的鬆散耦合應用
但云原生方案的重點並非應用部署在何處,而是如何構建、部署和管理應用
雲原生方案與微服務架構相似
然而,儘管微服務可經過構建雲原生應用來交付,可企業仍須要採起許多措施,才能在生產環境中熟練地管理微服務
而想要享受雲原生應用的各類益處,也並不是必定須要微服務
不少企業都經過基於相同的原則,構建出更優秀的模塊化單體式應用,從而取得雲原生方案的種種效益