大家都知道很多公司都有架構師這個職位,但是我想告訴大家的是看一個人是不是架構師不是看職位,而是看他所具備的能力以及正在做的事,所以有架構師頭銜的人不一定具備架構師的能力,而不是架構師的人卻在做著架構師的工作。
架構師類似于建筑行業的總設計師,通常在一個軟件項目中,架構師需要完成軟件項目中所有技術環節的設計,架構師雖然說不用親自編寫所有代碼,但是架構師會對項目中所有運用的技術環節了如指掌。
因此架構師既可以是一個很簡單的工作,也可以是一個具備超高難度的工作。而具體的難度系數,取決于具體的項目類型。就好像蓋一個兩層小樓,和一個跨海大橋,對架構師的要求截然不同。
在今天的課程中,陳老師給大家畫了一些不同類型項目的架構圖。如果想要成為架構師,大家可以看一下要成為架構師針對不同項目類型需要掌握的技術。
大家可以看到框里面并列列出了很多技術,只要位于同一層的技術掌握一個就可以完成完整的軟件流程設計,不要求掌握全部。
我們來看第一張圖
比如說我們現在目標任務是開發一個自主品牌的mp3播放器,我們的架構師需要懂硬件,比如單片機,傳感器,聲音設備,再利用匯編或者C語言,來對該電子系統編寫相應的程序,就可以完成這樣的一套mp3程序開發
但軟件的架構師在不斷進化著,在計算機發明的初期,幾乎大部分應用程序都是直接針對硬件來編寫的,但是這樣會導致程序的通用性差,所以才出現了操作系統。在目前市場上流通的大部分軟件都是工作在操作系統之上的。
因此我們可以看見第二張圖的這樣的架構。
編寫這樣的應用程序需要我們架構師了解硬件,了解操作系統,并且能夠使用C,C++,VB,等編程語言調用操作系統SDK完成軟件功能開發。
由操作系統去跟硬件系統打交道,這樣對于開發人員的要求就降低了很多,同時應用程序的通用性會變得更好。
再看看第三張圖
隨著計算機軟件的發展,我們發現很多軟件都是在和數據打交道,用戶數據需要記錄到系統中,同時應該能快速的檢索數據,因此在我們的單機應用中出現了數據庫這么一類應用程序。
在需要存儲數據,搜書數據,以及對數據加工處理統計的時候可以把這些工作交給數據庫去處理。
做這類應用軟件的開發工程師,對硬件和操作系統了解即可。需要他精通數據庫,并且能用任意語言調用系統提供的SDK。
在看看第四張圖
這個是C/S應用程序架構,這里的客戶端架構與第三張圖單機應用類似,唯一不同的是在數據的來源的上作出了改變。原本的單機應用程序數據存在本地,但是一個軟件系統如果有多人使用多個客戶端連接的時候,不可能把數據庫再放到莫一臺客戶機中。
解決方案就是讓數據庫通過網絡對客戶端提供數據服務。直接通過客戶端遠程連接直接操作數據庫這種方式也是不可以的,因為數據庫如果直接對外提供數據服務,那么凡是能連接到該網絡的用戶都可以繞過客戶端操作數據庫,這樣數據安全就得不到保障。
因此出現了Server,我們通過服務器端程序來操作數據庫,客戶端程序只能選擇與服務器端交互,所有的業務操作由服務器端完成,這種模式就是C/S架構。
完成C/S架構的架構師就比做單機應用的架構師難度大很多,不僅要懂得單機應用開發所需要的知識,還需要掌握網路數據庫系統,以及web服務,socket服務等技術。
C/S應用程序架構存在一些缺點:需要更新所有已安裝的客戶端版本,而且會出現多個版本并存的情況,后期維護代價極高,而且很不方便。
因為這些原因,就出現了B/S這些架構的軟件。
如圖所示,我們可以看到此架構的服務端與第四張的服務器端基本一致。
主要區別是B/S架構的應用程序不需要安裝客戶端程序,而是使用大部分的計算機都有安裝的瀏覽器來作為系統前端來與用戶交互,而瀏覽器加載的內容全部來由服務端輸出。
這樣B/S的架構師難度相對來說比C/S架構師低很多,并且有諸多的成熟的解決方案,比如:java的javaee架構,微軟的asp.net架構,完全開源的lamp架構,都是很成熟的解決方案。
這樣架構的優點在于因為存在大量的成熟的解決方案,只需要一臺可連入網絡的服務器,就可以讓整個系統運轉起來。開發速度快,運營成本低。這種解決方案被廣泛接納。所以做這樣架構的程序員數量很多,也因此往往不被當做架構師來看待。但是做這樣架構的應用程序設計也架構設計中的一種。
我們來看第6張圖
從2010年以后,智能手機在國內大量普及,幾年時間誕生了數百萬的App與手機游戲,往往一個項目既擁有自己的網站,又擁有獨立的APP,而且作為一個整體的系統,iOS,安卓,與網頁的數據應該是一致的。
那么要做到這樣的架構設計的話,我們需要讓我們的ios,安卓客戶端共用我們的服務端,這樣我們的多端才能保持數據高度一致。
服務器端的結構沒有太大的變化,但是軟件設計的方式產生了變化,原本B/S架構中由服務端向瀏覽器輸出相應的html,css,js等靜態內容即可,但如果涉及到移動互聯網應用開發,我們會將我們的應用程序規范化,把前端和后端完全區分開來。
服務器端提供數據交互服務,并編寫相應的接口,移動端進行接口調用,并完成界面數據填充以負責用戶交互,即便是移動端瀏覽器,也應采用這種方式來交互。
接下來看第7張圖
它和6張圖比較類似,但多出來幾塊。我們把橫線以上的部分叫服務端,橫線以下的叫前端。我們在移動互聯網絡時代,經常會涉及到自己的平臺與第三方平臺的交互,我們的應用在接入支付寶,微信,微博等功能后,還會涉及到與第三方平臺的功能交互。
通常需要我們通過服務器發起請求調用第三方的API,并且為第三方的平臺保留回調的接口,因此在制作這樣的應用程序開發的時候,架構師除了要掌握移動互聯網絡的技術外,還需要對第三方提供的功能與規范以及相應接口有充分的了解。
來看第8張圖
如果只是從功能實現來說,能夠按照第7張圖完成架構設計的架構師,已經能滿足需求。但是在實際運營的項目中,除了有功能需求以外,還要有質量需求,比如:網站的負載能力,網絡并發連接數,系統的數據吞吐量,項目是否具有擴容能力等。
之前所展示給大家的所有架構,都是基于單服務器架構來設計的,如果只有一臺服務器,無能我們怎樣花錢來升級他的硬件配置,我們會發現很快將無法進一步擴容。最好的CPU,最大的內存條也是有限度的,因此采用集群架構,才是解決問題的正確方法。
而第8張圖所畫的就是標準的分布式集群架構,集群的擴容原則就是一個人干不完的活多個人一起干,讓服務器與服務器之間,進行分工與協作。
而做分布式集群的架構的架構師,也有著較高的要求,而互聯網上受人敬仰的架構師大多屬于這類。你也可以認為這才是真正的架構師。
看第9張圖
服務器端同第7張,第8張可以是一致的,具體是選擇哪個服務器的架構,取決于項目的規模。
項目初期用戶量少,可以選擇單服務器架構,如果項目后期服務器負載壓力過大,可以重構為分布式集群架構。
第9張圖的重點在于項目前端,我們來看前端的技術架構圖,這里所畫的是市面所流行的混合APP的架構
著名的混合APP應用有很多,比如說支付寶手機客戶端,還有Facebook,這些應用都是采用混合APP架構設計的。
混合APP應用使用html,和css打造用戶界面,無論是在瀏覽器,微信端,還是在APP中,都是如此。因此他具備B/S應用程序的優點,可以在服務器端更新應用內容,并且讓應用在ios,安卓,瀏覽器端保持高度一致性。
利用單頁web APP開發技術,能夠讓網頁程序像原生應用一樣流暢,而web APP的缺點在于,網頁js程序無法調用手機硬件功能,但是混合APP架構可以通過微信sdk,微博sdk ,iOS bridges,安卓bridge是等方式來獲取微信APP,微博APP以及手機硬件的功能。
因此混合APP架構同時具備了web APP與原生應用的優勢,成為了市場上主流的移動應用架構設計方法??缙脚_兼容性好,開發成本低,開發速度快。逐步取代了大量的原生應用。這也是我們兄弟全棧工程師學習的主要內容。
為什么定這個主題呢?其實我們會發現全盞所涉及的開發領域和架構師基本一致,區別在于能力與深度
比如分布式服務部分,如果全盞工程師,可以使用類似Laravel框架這樣的全盞框架解決本地服務,webservice ,消息隊列等問題,
但架構師則應該能深入了解其中原理,并做出相應設計
全棧工程師只要加深各個領域知識深度,很容易向架構師方向發展
當然學習的同時也應該注意誤區,很多人以為全棧是學習linux+php+h5+移動端,這是典型誤區
因為在以往的大公司大團隊時代,學科越分越細,因此無論大學課程還是培訓機構,此前都是按專業和學科劃分
如果學linux,那么從組網做網絡配置,搭建文件共享或者郵件發送,web服務等都需要學習和掌握
學h5的話,webgl游戲開發,網頁開發都有學習,其實對于全?;蛘呒軜嫀煱l展來說,這樣并不好
如果做全棧,那么我不需要學習如何做網管,所以使用linux應該集中在web服務環境上,類似,學h5,應該著重在移動端觸屏設備開發為主,所以劃分維度不同,
如果有了這個認識,就不會被誤導,以為全棧或者架構師就是什么技術都學,什么都會。我么要的是更專業,學習更深。
相信通過今天的分享,大家對如何學習,如何發展,如何成為架構師,能有一個很好的認識。