規(guī)模復雜龐大的系統(tǒng)需要有人站在更高的視角上去關注整體性的東西屋彪,像望遠鏡那樣看得更遠,掌控全局奸忽。
究竟什么是架構量蕊,可能每個人的理解和關注點不盡相同。這里不得不提一下康威定律,值得每個架構設計者認真思考一番。定律的原文為:“Any organization that design a system (defined broadly) will produce a design whose structure is a copy of the organization's communication structure.”。我理解架構的本質是平衡系統(tǒng)熵增的過程麦牺。 公司發(fā)展過程中需要不斷調整組織架構來解決溝通效率問題;軟件系統(tǒng)架構也要在業(yè)務擴張中解決系統(tǒng)熵增的問題。所以我們經常聽說 好的架構不是設計出來的枕面,而是跟隨業(yè)務演進而來的愿卒。說明它是一個持續(xù)的過程,而非一個結果潮秘。
理解了本質琼开,再來看看架構的目標是什么。對于軟件系統(tǒng)架構枕荞,其設計直接影響著系統(tǒng)的生產柜候,比如開發(fā)過程和效率、代碼和組件復用性等躏精,同時也影響著系統(tǒng)的可用性渣刷、伸縮性、性能矗烛、擴展性和安全性辅柴。這些目標往往是相互影響的,比如為了追求安全性會犧牲小部分性能瞭吃,追求擴展性而犧牲了性能的馮·諾伊曼瓶頸碌嘀。所以架構往往需要一定的折中,根據(jù)業(yè)務情況在各個目標之間尋求一個動態(tài)的平衡(從組織架構看歪架,其實也是在平衡各方的利益)股冗。
而為了達成架構的目標,你需要什么樣的能力呢和蚪?在前面章節(jié)中多次提到的結構化思維能力止状,就是最基礎的架構能力。結構化就是將邏輯進行抽象攒霹、提煉怯疤、分解、聚合催束,構建成更加縝密旅薄、動態(tài)、彈性泣崩、邊界清晰的結構體。其次是平衡思維能力洛口。記住沒有完美的架構矫付,只有合適的架構。要根據(jù)業(yè)務目標作出自己的判斷第焰,有所取舍买优,并通過良好的溝通能力確保各方對架構達成共識,在現(xiàn)有資源約束下最合理。
關于軟件架構設計杀赢,是有一些原則的烘跺,核心就是高內聚和低耦合。具體包含的SOLID原則在上一篇【編程篇】中有說明脂崔。這里滤淳,我總結了一個自己的理解,就是一個中心【以用戶為中心】砌左,兩個基本點【拆分與治理】脖咐。其中拆分包含橫向的分層(Slice)和縱向的分塊(Dice)。
分層在系統(tǒng)架構中大量存在汇歹,比如:
????網(wǎng)絡分層屁擅,不管是OSI網(wǎng)絡模型還是TCP/IP都是分層的設計;
????操作系統(tǒng)产弹,介于計算機硬件和應用軟件之間的一個軟件層派歌;
????JVM虛擬機,屏蔽了與底層具體平臺信息相關的抽象層痰哨;
????緩存胶果,是在應用與數(shù)據(jù)源之間的一道緩沖層;
????消息隊列作谭,是在生產者和消費者之間的一個解耦層稽物;
????控制反轉(IOC),是在兩個組件之間的一個中介層折欠;
????容器贝或,是一個層層重疊的集裝箱;
????適配器模式锐秦,橋接模式咪奖,代理模式都需要一個獨立的層;
????......
分塊同樣存在不少酱床,比如:
????數(shù)據(jù)庫分庫分表(數(shù)據(jù)分片)羊赵;
????冗余備份技術;
????負載均衡集群扇谣;
????微服務模塊拆分昧捷;
????MapReduce;
????敏捷開發(fā)模式(小團隊與迭代);
????......
治理是要解決系統(tǒng)拆分帶來的相應問題如穩(wěn)定性罐寨、一致性等(天下沒有免費的午餐)靡挥。你要如何衡量你的拆分效果呢?彼得·德魯克說過鸯绿,如果一個事情跋破,你不能衡量它的話簸淀,那么你就不能改進它。精益文化里三點——Build(建立)毒返、Measure(衡量)租幕、Improve(改進)也體現(xiàn)了衡量的重要性。
治理的核心原則就是要達到統(tǒng)一共識拧簸,從整體上對系統(tǒng)運行情況進行控制劲绪。尤其是分布式架構中,如果不能達成共識狡恬,將發(fā)生數(shù)據(jù)不一致珠叔,腦裂等各種問題。系統(tǒng)在拆分的過程中弟劲,是不能離開治理者的視線的祷安,你必須始終站在全局的角度整體考慮這樣的拆分是否合理。在已經拆分的系統(tǒng)中兔乞,不能因為一個點的錯誤汇鞭,引發(fā)系統(tǒng)級的崩潰,所以限流降級庸追、熔斷機制等常用治理手段是一個系統(tǒng)完整統(tǒng)一的保證霍骄。同時你還會發(fā)現(xiàn)這些手段跟生活是分不開的,比如熔斷就是一個保險絲淡溯,股市的一種風險控制措施读整。再次說明了【學習篇】提到的計算機世界是模擬的人類世界。
有了技術架構的支撐咱娶,怎樣快速響應業(yè)務的發(fā)展需求呢米间?接下來請看下一篇【工程篇】。