軟件架構究竟是要解決什麼問題?前端
軟件實際上就是把現實生活模擬到計算機中,而且軟件是須要在計算機的硬件中運行起來的。要作到這一點須要解決兩個問題:編程
1、業務問題服務器
具體的現實生活狀態下,沒有軟件的時候,所解決的問題的主體是誰,解決的是什麼問題,是如何解決,如何運做的?架構
1. 業務的owner須要提高業務的效率,下降業務的成本,這是動機。這個實際上就是業務的問題,因此通常軟件開發的出發點就在這裏。編程語言
2. 是軟件工程師的問題,要解決業務owner把業務虛擬化的問題,而且要解決軟件開發和運營的生命週期的問題。性能
2、計算機問題學習
如何把現實生活用軟件來模擬?生命週期
模擬出來的軟件,須要哪些硬件設施纔可以知足要求? 而且當訪問量愈來愈大的時候,軟件可否支持硬件慢慢長大,性能線性擴展?開發
由於硬件是可能會失效的,軟件如何在硬件失效的狀況下,仍然可以保證可用性,讓用戶可以不中斷的訪問軟件提供的服務?部署
怎麼收集軟件產生的數據,爲下一階段的工做提供依據?
學習業務知識,認識業務所涉及的stakeholders的核心利益述求,以及業務是如何分拆知足這些利益訴求,並經過怎樣的組織架構完成整個組織的核心利益的,以及業務運做的流程,涉及到哪些概念,有哪些權利和責任等。
經過對業務知識的學習,針對這些概念所對應的權利和責任以及組織架構,對業務進行建模,並把建模的結果用編程語言實現。這是業務的模型,一般是現實生活中利益鬥爭的結果,是很是穩定的。
學習業務所參與的stakeholder是如何和業務打交道,並完成每一個人的權利和義務的,並經過編程語言,結合業務模型實現這些打交道的溝統統道。這部分是變化最頻繁的,屬於組合關係。明白了這一點,對後續的實現很是有幫助。
如何把業務運行的結果持久化,並經過合適的手段把持久化後的數據,在合適的時間合適的地點加載出來。這部分和基礎設施有關,變化可能也會比較頻繁。
主要解決了軟件架構是須要解決的問題。其實也就是解決究竟那些算是軟件架構呢?其一:軟件由於流量增大而分拆成不一樣的運行單元,在不一樣的機器上部署所造成的架構,屬於軟件架構。其二:每一個運行單元爲了讓不一樣角色的人,好比前端,業務,數據存儲等可以並行工做,所分紅的代碼架構,也屬於軟件架構。那麼軟甲架構是怎麼解決問題的咱們必定要講清楚,究竟說的是部署的架構,仍是代碼的架構。軟件架構的落地,須要軟件的組織架構和流程來保障,離開了這個,軟件架構是一句空話。另外不少人講,架構是進化出來的。架構其實是在量不斷的增大,超過了單臺服務器的容量,逐漸的分拆,同時致使超過單我的員的能力,工做人員不斷的增多,工做內容不斷的分拆造成的。這自己就是架構的意義所在。無論怎麼分拆,所達到的目標沒有任何變化,就是完成業務在計算機中的虛擬化。