前面已經聊到了如何做高層架構設計,并開始讓設計落地,去劃分了系統邊界,進行了服務和模塊的拆分,也就是系統的整體輪廓已經有了。
接下來,就該來做整體的技術架構設計了。
其實做架構設計一點都不神秘,都是有章可循,有方法可依的。
一:做整體的技術架構設計的基本方法:
其實做整體技術架構的方法相對簡單,就是一個不斷做決策的過程。
最后把你的各個決策的結果組合起來,就是整體的技術架構了。
雖然方法很簡單,但這個階段的責任重大。架構的好壞,決定了后期開發的難易程度;也決定了系統性能的好壞、系統的穩定性、安全性、可擴展性等等的。
項目架構好壞,也間接影響了項目的工期、成本、人力等等的。可以這么說,架構的好壞,基本上決定了項目的成敗。
方法看似簡單,但是對架構師的能力要求是比較高的,技術知識的廣度、深度,技術架構設計的經驗等,都會有較高的要求。
解決一個問題,通常都不只一種方法,也就是架構師要有很多備選的方案,然后就需要做決策,到底用A方案好,還是B方案好呢?
這就取決于架構師對它們理解的深度了,經過比較他們的適用場景、優點缺點,再綜合考慮項目的實際需要,才能決策出具體要選用那個方案,并給出令人信服的依據或理由。
這也就是我們經常說的,最合適的方案才是最好的方案。
二:做整體的技術架構設計的基本步驟
步驟一:根據應用風格來確定技術架構的風格
比如是一個單體應用還是一個分布式的應用,這就是應用風格。
假如就是一個小管理軟件,公司內部使用,一共也就幾十個人用,做個單體應用,Tomcat和數據庫放一臺服務器部署就可以了。
或者是一個單體集群的應用,規模比單獨一個應用部署稍大一些,需要部署多個Tomcat,前面再配上Nginx做反向代理和負載均衡。
也有可能是分布式應用,或者是微服務應用,大數據分析應用,人工智能AI應用,等等的。
不同的應用風格,需要使用的技術組合是不一樣的,技術架構形式也是不一樣的。
架構師就需要根據不同的應用風格,結合系統實際要求,來選擇使用不同的技術架構形式,并結合實際應用進行調整。
比如說是微服務的應用,可能主要的選擇就是Springboot + SpringCloud體系;但也有從早期Dubbo轉過來的,現在Dubbo3.x也出來了,也可以選用Dubbo來實現微服務。
又比如大數據分析的應用,可能會考慮Hdoop體系;AI應用可能會考慮Python+Tensorflow等等。
不管怎么選擇,在這個階段,架構師需要做一個決策,把技術架構方案的風格和基本技術路線確定下來。
步驟二:確定基礎框架
確定好技術架構風格和基本技術路線過后,就該來確定基礎框架了。
比如我們前面確定了是微服務的架構形式,選的技術路線是Springboot + SpringCloud,那好,這里就要把基礎的框架確定下來。
比如單個服務使用Springboot +SpringMVC+Spring+Mybatis,每個服務部署在Docker里面。至于SpringCloud,還需要考慮版本,是選1.5.x還是選2.x的,里面的技術組件是不一樣的。
比如選了SpringCloud2.x的,就要來確定內部組件怎么選擇,怎么組合,一種可能的選擇是:SpringCloud Gateway + Nacos +Feign+ LoadBalancer + Sentinel + Seata 等等的。
總之,這個步驟里面,把要使用到的基礎框架確定下來。
步驟三:確定基本技術棧
在確定的基礎框架之上,通盤考慮整個項目要用的主要技術,把它們確定下來,并明確好版本。
除了前面提到的,還需要考慮其它要使用的技術,比如:
緩存體系:redis6.x
MQ:Kafka2.8
分庫分表:ShardingSphere5.x
搜索引擎:ElasticSearch7.x
數據庫:MySQL8.x
等等的吧,一個項目涉及很多技術,有些是開發上用,還有部署需要的,比如Nginx,還有運維需要的,比如Zabbix等等。
這些都要確定下來,后面的架構設計和詳細設計,就需要在這里確定的圈子下來進一步細化了。
步驟四:組合技術棧中的技術和框架,形成初步的整體技術架構
前面是不斷選擇,不斷決策,把要用到的東西都選出來,然后呢?
就需要把它們有機地組合起來,形成一個整體,這樣就得到了一個初步的整體技術架構了,是不是很簡單?
最后,架構師把這個組合,畫圖展示出來,就是整體技術架構設計圖;把選擇過程,選擇理由,選擇目的,解決了什么問題 等內容,寫成文檔,就是整體技術架構設計文檔了。
步驟五:對初步的整體技術架構進行細化
在確定的初步的整體技術架構基礎上,進一步細化,完善整個技術架構設計。
通常是結合系統的一些重難點問題,深入到每一種技術里面,明確采用什么方式,什么架構,怎么組合,來具體解決這些問題。
比如:系統實現中會用到分布式鎖,如果前面確定使用Zookeeper來實現,那好,具體使用Zookeeper的什么特性來實現,大致實現的機制是怎樣的?可能會出現什么樣的問題?怎么解決或預防這些問題? 等等,都是細化的內容。
把所有關注的問題,都分析清楚了,方案細化好了,基本上這個時候的技術架構也比較完善了,差不多技術架構也就設計好了。
這里只是講述了整體技術架構的基本方法和步驟,實際過程是非常繁雜的,需要考慮的技術點很多,要決策的地方很多,要解決的問題也很多,并沒有看上去這么輕松。
另外,限于篇幅,還有文字的表現力,沒有去舉詳細的例子,這個以后有機會的話,再給大家視頻講解吧。
還有再強調一次,架構設計的方法并不復雜,但是要真正掌握,沒有很好的、持續的訓練和思考,想要真正掌握,還是比較困難的。因此,大家一定要在實際工作中,去實踐這些方法,反復思考、反復實踐,最終才能內化成為你的能力。到了那一天,你也就自然成為了真正的架構師了!
如果你覺得本系列文章還不錯,能夠給你一些啟發和思考的話,請關注、點贊、收藏加轉發,讓更多的朋友加入到我們的行列,謝謝啦!
更多架構師之路干貨文章,已在路上,稍后就到!