要解決誰的問題?前端
如前所述,軟件實際上就是把現實生活模擬到計算機中,而且軟件是須要在計算機的硬件中運行起來的。要作到這一點須要解決兩個問題:編程
1、業務問題服務器
具體的現實生活狀態下,沒有軟件的時候,所解決的問題的主體是誰,解決的是什麼問題,是如何解決,如何運做的?架構
2、計算機問題編程語言
分別是誰的問題呢?性能
業務的owner須要提高業務的效率,下降業務的成本,這是動機。這個實際上就是業務的問題,因此通常軟件開發的出發點就在這裏。學習
是軟件工程師的問題,要解決業務owner把業務虛擬化的問題,而且要解決軟件開發和運營的生命週期的問題。對象
分別有什麼問題?blog
業務問題的本質,是業務所服務的對象的利益問題,明白了這個,就很容易搞清業務的概念和組織方式。再次強調一下,有了軟件,能夠下降業務的成本,沒有軟件的狀況下,業務是同樣跑的。若是隻是爲了跟風要用軟件,說不定反而提升了成本,這個是採用軟件以前首先要先搞清楚的。咱們常常說軟件和技術是業務的enabler,實際就是把原來成本很高的降到到了很低的程度而已,並非有了什麼新的業務。另外,軟件也不是下降業務成本的惟一方式。生命週期
爲了可以讓軟件很好的跑起來,軟件工程師必須理解業務所服務的對象,他們的利益所在,即業務問題。業務面對這些問題是如何分拆解決的? 涉及到了哪些概念? 這些概念分別解決了哪些哪些問題? 咱們不能本身按照本身的理解,用本身的一套概念體系來表述。若是這麼作的話,會致使兩個問題:
1)業務沒法和咱們交流,由於他們沒法明白咱們所本身建立的概念,因此他們沒法確認咱們的理解是否正確。
2)咱們所表述的東西,並無在實際生活中實踐過,咱們也不知道這些概念是否可以解決業務的問題。
軟件工程師還必需要考慮,用什麼樣的硬件把軟件跑起來,怎樣跑得好,跑得快,而且能夠隨着業務的流量逐漸的長大?
分析問題
對於2,在有限的時間下,軟件工程師毫無疑問沒法一我的去完成這麼多事情,那麼咱們須要把所作的事情列出來,進行分析。
1、虛擬化業務須要完成這些事情:
學習業務知識,認識業務所涉及的stakeholders的核心利益述求,以及業務是如何分拆知足這些利益訴求,並經過怎樣的組織架構完成整個組織的核心利益的,以及業務運做的流程,涉及到哪些概念,有哪些權利和責任等。
經過對業務知識的學習,針對這些概念所對應的權利和責任以及組織架構,對業務進行建模,並把建模的結果用編程語言實現。這是業務的模型,一般是現實生活中利益鬥爭的結果,是很是穩定的。
學習業務所參與的stakeholder是如何和業務打交道,並完成每一個人的權利和義務的,並經過編程語言,結合業務模型實現這些打交道的溝統統道。這部分是變化最頻繁的,屬於組合關係。明白了這一點,對後續的實現很是有幫助。
如何把業務運行的結果持久化,並經過合適的手段把持久化後的數據,在合適的時間合適的地點加載出來。這部分和基礎設施有關,變化可能也會比較頻繁。
2、代碼如何運營,須要完成這些事情:
3、若是分紅不一樣的角色來完成這些事情,就須要一個組織架構來組織代碼的編寫和運營,須要作哪些事情:
會生成哪些架構
若是業務足夠簡單,用戶流量夠小,時間要求也不急迫,那麼一我的,一臺機器就夠了,這個時候通常不會去討論架構的問題。當訪問的流量愈來愈大,機器就會愈來愈多,代碼的部署單元就會拆分的愈來愈多。
一樣就會須要愈來愈多的人來完成拆分出來的愈來愈多的部署單元,甚至同一個部署單元也須要分拆爲多人合做完成。可是咱們須要注意到一點,整個的概念體系,或者說業務的建模不會有任何的變化,仍是完成一樣的這些事情。惟一的區別就是量愈來愈大,超過了單我的和單個機器的容量,不斷地增加。這樣就會致使如下的架構:
當流量愈來愈大,咱們就會發現,軟件所部屬的機器就會開始按照樹狀的結構開始分拆,就會造成硬件的部屬架構。這就是爲何會造成部署的分層。
爲了把業務在軟件中實現並落地,須要前端人員、業務代碼人員、存儲層等不一樣技巧的人同時工做,須要切分紅代碼的架構。這就是爲何會造成代碼的分層,造成代碼的架構。固然,當這些角色由一我的來完成的時候,不必定會有代碼架構,每每會比較亂。
當參與的人員愈來愈多,就會造成開發體系的組織架構。由於代碼開發的過程是一個連續的過程,會用流程來把不一樣的角色串聯起來,這就是軟件工程。
爲了完成業務的工做,須要識別出來業務架構和支撐業務的組織架構,以及業務運做的流程。這是被虛擬化的業務架構和組織架構,也須要體如今代碼中,保持和現實生活中一致。
什麼是軟件架構
這就是軟件比較複雜的地方,涉及到軟件自己的業務體系,和所虛擬的業務體系。根據以上的分析,所生成的架構,究竟那些算是軟件架構呢?
軟件由於流量增大而分拆成不一樣的運行單元,在不一樣的機器上部署所造成的架構,屬於軟件架構。
每一個運行單元爲了讓不一樣角色的人,好比前端,業務,數據存儲等可以並行工做,所分紅的代碼架構,也屬於軟件架構。
因此當咱們說軟件架構的時候,咱們必定要講清楚,究竟說的是部署的架構,仍是代碼的架構。軟件架構的落地,須要軟件的組織架構和流程來保障,離開了這個,軟件架構是一句空話。
另外不少人講,架構是進化出來的。架構其實是在量不斷的增大,超過了單臺服務器的容量,逐漸的分拆,同時致使超過單我的員的能力,工做人員不斷的增多,工做內容不斷的分拆造成的。這自己就是架構的意義所在。無論怎麼分拆,所達到的目標沒有任何變化,就是完成業務在計算機中的虛擬化。