架構(gòu)系列文章01:Java工程師如何快速成長為一名優(yōu)秀的架構(gòu)師

技術(shù)人都有一個(gè)情懷,就是成為架構(gòu)師。架構(gòu)師到底與普通程序員有什么區(qū)別,Java工程師如何快速成長為一名優(yōu)秀的架構(gòu)師,本期將推出系列文章,帶大家一起開啟架構(gòu)之旅。
按阿里的職級(jí)來看,架構(gòu)師也是技術(shù)專家,但又不僅僅是技術(shù)專家,更是一個(gè)能夠設(shè)計(jì)高可用、高性能、易擴(kuò)展系統(tǒng)的決策者。

1.架構(gòu)師的主要職責(zé):

  • 系統(tǒng)架構(gòu)設(shè)計(jì)與規(guī)劃
    主導(dǎo)軟件系統(tǒng)的整體架構(gòu)設(shè)計(jì),包括模塊劃分、組件交互機(jī)制及數(shù)據(jù)流向規(guī)劃,確保系統(tǒng)具備可擴(kuò)展性、可靠性和高性能
    制定技術(shù)路線圖,結(jié)合業(yè)務(wù)需求選擇適合的架構(gòu)模式(如單體/微服務(wù)/云原生),設(shè)計(jì)高可用、可擴(kuò)展的解決方案
  • 技術(shù)決策與選型
    評(píng)估并確定技術(shù)棧,涵蓋開發(fā)框架(Spring/Spring Boot)、數(shù)據(jù)庫(MySQL/Oracle)、中間件(Redis/Kafka)等核心組件的選型
    制定編碼規(guī)范與技術(shù)標(biāo)準(zhǔn),推動(dòng)技術(shù)方案落地并驗(yàn)證其可行性
  • 性能優(yōu)化與安全保障
    識(shí)別系統(tǒng)性能瓶頸,通過分布式事務(wù)處理、緩存策略優(yōu)化、JVM調(diào)優(yōu)等手段提升高并發(fā)場景下的處理能力
    構(gòu)建系統(tǒng)安全機(jī)制,設(shè)計(jì)防攻擊策略與數(shù)據(jù)加密方案,保障業(yè)務(wù)連續(xù)性
  • 技術(shù)攻關(guān)與創(chuàng)新
    解決復(fù)雜技術(shù)難題(如分布式一致性、海量數(shù)據(jù)處理),主導(dǎo)關(guān)鍵技術(shù)模塊的研發(fā)與預(yù)研
    探索新興技術(shù)(如Serverless/AI工程化),推動(dòng)技術(shù)創(chuàng)新與架構(gòu)演進(jìn)
  • 團(tuán)隊(duì)協(xié)作與能力建設(shè)
    指導(dǎo)開發(fā)團(tuán)隊(duì)實(shí)踐架構(gòu)設(shè)計(jì),通過代碼審查、技術(shù)培訓(xùn)提升團(tuán)隊(duì)整體技術(shù)水平
    協(xié)調(diào)跨部門資源,統(tǒng)籌項(xiàng)目管理與交付流程,確保技術(shù)方案與業(yè)務(wù)目標(biāo)對(duì)齊
  • 架構(gòu)治理與質(zhì)量管控
    建立技術(shù)債務(wù)管理機(jī)制,制定系統(tǒng)可觀測性方案(日志/監(jiān)控/鏈路追蹤)
    主導(dǎo)架構(gòu)評(píng)審,持續(xù)優(yōu)化系統(tǒng)設(shè)計(jì),控制技術(shù)實(shí)施風(fēng)險(xiǎn)

2.架構(gòu)師與技術(shù)專家的核心區(qū)別

職責(zé)定位差異

  • 架構(gòu)師
    系統(tǒng)級(jí)設(shè)計(jì):主導(dǎo)整體架構(gòu)規(guī)劃,解決跨模塊協(xié)同問題,確保系統(tǒng)的可擴(kuò)展性、高可用性和安全性,例如設(shè)計(jì)微服務(wù)架構(gòu)并定義服務(wù)通信協(xié)議
    技術(shù)決策:評(píng)估技術(shù)棧選型(如選擇Redis集群或Kafka消息隊(duì)列),制定技術(shù)規(guī)范與長期演進(jìn)路線
    架構(gòu)治理:管理技術(shù)債務(wù),推動(dòng)架構(gòu)持續(xù)演進(jìn),例如通過領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)劃分服務(wù)邊界
  • 技術(shù)專家
    深度技術(shù)實(shí)現(xiàn):聚焦特定領(lǐng)域(如JVM調(diào)優(yōu)、數(shù)據(jù)庫性能優(yōu)化),解決復(fù)雜技術(shù)難題
    模塊級(jí)開發(fā):主導(dǎo)核心功能模塊研發(fā),例如通過反射機(jī)制優(yōu)化框架或設(shè)計(jì)高效緩存策略
    技術(shù)攻堅(jiān):針對(duì)性能瓶頸提出解決方案,如優(yōu)化SQL查詢或?qū)崿F(xiàn)高并發(fā)鎖機(jī)制

技術(shù)方向側(cè)重

image.png

思維模式對(duì)比

  • 架構(gòu)師思維
    方法論驅(qū)動(dòng):基于架構(gòu)設(shè)計(jì)原則(如CQRS、AKF擴(kuò)展立方體、DDD領(lǐng)域驅(qū)動(dòng))進(jìn)行系統(tǒng)設(shè)計(jì),強(qiáng)調(diào)設(shè)計(jì)理由的可解釋性
    前瞻性視角:平衡短期需求與長期技術(shù)演進(jìn),例如預(yù)研Serverless技術(shù)并規(guī)劃落地路徑
  • 技術(shù)專家思維
    經(jīng)驗(yàn)驅(qū)動(dòng):依賴過往技術(shù)積累解決問題,例如復(fù)用高并發(fā)場景下的緩存設(shè)計(jì)方案
    極致優(yōu)化:追求技術(shù)實(shí)現(xiàn)的最高效率,例如通過字節(jié)碼增強(qiáng)技術(shù)替代Java反射提升性能

職業(yè)發(fā)展路徑

  • 架構(gòu)師
    初期:技術(shù)方案設(shè)計(jì) → 中期:企業(yè)級(jí)架構(gòu)規(guī)劃 → 后期:技術(shù)戰(zhàn)略制定(如混合云架構(gòu)設(shè)計(jì))
    典型轉(zhuǎn)型方向:CTO、技術(shù)VP、解決方案架構(gòu)師6
  • 技術(shù)專家
    初期:核心模塊開發(fā) → 中期:領(lǐng)域技術(shù)攻堅(jiān)(如JVM調(diào)優(yōu)專家)→ 后期:首席工程師或技術(shù)研究員

3.如何學(xué)習(xí)架構(gòu)

不同的職業(yè)身份對(duì)架構(gòu)的視覺不同,因?yàn)槟闼J(rèn)知的架構(gòu)和別人所說的架構(gòu)可能是兩碼事。對(duì)于不同職位的視角是不一樣的,比如開發(fā)而言他更多的看到的是開發(fā)架構(gòu);對(duì)售前人員,他可能更多的看到的是業(yè)務(wù)架構(gòu);對(duì)于運(yùn)維人員,他看到的可能是運(yùn)維架構(gòu);而對(duì)于技術(shù)支持和部署人員,他更多的看到的網(wǎng)絡(luò)和物理架構(gòu)。


image.png

4.架構(gòu)師需要掌握的知識(shí)

  • ** 3.1深入掌握計(jì)算機(jī)基礎(chǔ)知識(shí)**

架構(gòu)師需要深厚的計(jì)算機(jī)基礎(chǔ),主要包括:
操作系統(tǒng):了解進(jìn)程、線程、內(nèi)存管理、IO、多線程編程等。
網(wǎng)絡(luò):熟悉TCP/IP、HTTP、WebSocket、DNS、CDN等協(xié)議及優(yōu)化策略。
數(shù)據(jù)結(jié)構(gòu)和算法:掌握常見的數(shù)據(jù)結(jié)構(gòu)(鏈表、樹、堆、哈希表等)和算法(排序、查找、動(dòng)態(tài)規(guī)劃等)。

  • 3.2深入掌握J(rèn)ava及周邊技術(shù)

    3.2.1 掌握J(rèn)ava核心知識(shí)
    Java集合框架、并發(fā)編程、JVM原理、垃圾回收(GC)策略等。
    了解類加載機(jī)制、JIT編譯、內(nèi)存模型等。

    3.2.2 研究Spring全家桶
    Spring是目前Java生態(tài)中最流行的框架,架構(gòu)師需要精通:
    Spring Boot:快速構(gòu)建微服務(wù)應(yīng)用。
    Spring Cloud:掌握服務(wù)注冊(cè)發(fā)現(xiàn)、負(fù)載均衡、熔斷限流等微服務(wù)架構(gòu)。
    Spring Security:了解權(quán)限管理和認(rèn)證授權(quán)。

    3.2.3 熟悉數(shù)據(jù)庫及性能優(yōu)化
    MySQL:索引優(yōu)化、查詢優(yōu)化、分庫分表、主從復(fù)制、讀寫分離等。
    NoSQL:熟悉Redis、MongoDB、Elasticsearch等。
    數(shù)據(jù)庫中間件:了解ShardingSphere、TiDB等分布式數(shù)據(jù)庫。

  • ** 3.3掌握分布式系統(tǒng)設(shè)計(jì)**
    架構(gòu)師需要能夠設(shè)計(jì)高并發(fā)、高可用、可擴(kuò)展的分布式系統(tǒng),重點(diǎn)掌握:
    分布式緩存:Redis、Memcached等。
    分布式事務(wù):兩階段提交(2PC)、TCC、SAGA等方案。
    分布式消息隊(duì)列:Kafka、RabbitMQ、RocketMQ的應(yīng)用場景。
    分布式協(xié)調(diào):Zookeeper、Etcd等。
    微服務(wù)治理:服務(wù)注冊(cè)發(fā)現(xiàn)、配置中心、API網(wǎng)關(guān)等(如Nacos、Apollo、Zuul、Gateway)。

  • 3.4關(guān)注高并發(fā)、高可用架構(gòu)設(shè)計(jì)
    限流與熔斷:使用Sentinel、Hystrix等限流熔斷組件。
    負(fù)載均衡:Nginx、LVS、Consistent Hash等負(fù)載均衡策略。
    服務(wù)拆分:如何進(jìn)行領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD),避免單體架構(gòu)的局限。
    分庫分表:數(shù)據(jù)庫水平/垂直拆分,MyCat、ShardingSphere等分片方案。
    日志分析與監(jiān)控:使用ELK(Elasticsearch + Logstash + Kibana)、Prometheus、Grafana等工具。

  • 3.5提升軟技能
    架構(gòu)師不僅僅是技術(shù)專家,還需要具備良好的溝通和團(tuán)隊(duì)管理能力:
    業(yè)務(wù)理解:架構(gòu)設(shè)計(jì)要符合業(yè)務(wù)需求,不能只追求技術(shù)先進(jìn)性。
    溝通能力:要能向團(tuán)隊(duì)、產(chǎn)品、管理層清晰表達(dá)架構(gòu)方案。
    文檔能力:編寫清晰的架構(gòu)文檔、設(shè)計(jì)文檔。
    團(tuán)隊(duì)領(lǐng)導(dǎo)力:幫助團(tuán)隊(duì)成員成長,提高團(tuán)隊(duì)整體技術(shù)水平。

  • 3.6實(shí)踐與持續(xù)學(xué)習(xí)
    成長為優(yōu)秀的架構(gòu)師,離不開實(shí)踐和持續(xù)學(xué)習(xí):
    多參與實(shí)際項(xiàng)目:主導(dǎo)高并發(fā)、微服務(wù)改造、數(shù)據(jù)庫優(yōu)化等項(xiàng)目。
    關(guān)注行業(yè)動(dòng)態(tài):閱讀技術(shù)博客、官方文檔、開源項(xiàng)目源碼。
    分享和總結(jié):寫技術(shù)博客、做技術(shù)分享,提高總結(jié)能力。
    開源貢獻(xiàn):參與開源社區(qū),閱讀和貢獻(xiàn)代碼。

架構(gòu)的視角

在筆者的知識(shí)體系中,實(shí)際上將架構(gòu)分為業(yè)務(wù)架構(gòu)、應(yīng)用架構(gòu)、云基礎(chǔ)架構(gòu)這幾大類,業(yè)務(wù)架構(gòu)主要著眼于控制業(yè)務(wù)的復(fù)雜性,基礎(chǔ)架構(gòu)著眼于解決分布式系統(tǒng)中存在的一系列問題。無論何種架構(gòu),都希望能實(shí)現(xiàn)系統(tǒng)的可變的同時(shí)保障業(yè)務(wù)的高可用。

注意:

  • 很多時(shí)候架構(gòu)的視角/分類沒有明顯的邊界,通常是交叉的;
  • 有意思的是,軟件架構(gòu)及其視角往往和它所在的部門組織架構(gòu)有著直接關(guān)系。

# 業(yè)務(wù)架構(gòu)

核心是解決業(yè)務(wù)帶來的系統(tǒng)復(fù)雜性,了解客戶/業(yè)務(wù)方的痛點(diǎn),項(xiàng)目定義,現(xiàn)有環(huán)境;梳理高階需求和非功能性需求,進(jìn)行問題域劃分與領(lǐng)域建模等工作;溝通,方案建議,多次迭代,交付總體架構(gòu)。

image.png

看看京東業(yè)務(wù)架構(gòu)(網(wǎng)上分享圖):

image.png

# 應(yīng)用/技術(shù)架構(gòu)

根據(jù)業(yè)務(wù)場景的需要,設(shè)計(jì)應(yīng)用的層次結(jié)構(gòu),制定應(yīng)用規(guī)范、定義接口和數(shù)據(jù)交互協(xié)議等。并盡量將應(yīng)用的復(fù)雜度控制在一個(gè)可以接受的水平,從而在快速的支撐業(yè)務(wù)發(fā)展的同時(shí),在保證系統(tǒng)的可用性和可維護(hù)性的同時(shí),確保應(yīng)用滿足非功能屬性要求(性能、安全、穩(wěn)定性等)。技術(shù)架構(gòu)主要考慮系統(tǒng)的非功能性特征,對(duì)系統(tǒng)的高可用、高性能、擴(kuò)展、安全、伸縮性、簡潔等做系統(tǒng)級(jí)的把握。

不限于如下視角,主要表示應(yīng)用開發(fā)中的軟件架構(gòu)視角...

# 視角:功能視角

功能視角和業(yè)務(wù)視角有重合的地方,主要針對(duì)開發(fā)而言的服務(wù)功能;

image.png

# 視角:技術(shù)視角-總體

技術(shù)框架(technological Framework)是整個(gè)或部分技術(shù)系統(tǒng)的可重用設(shè)計(jì),表現(xiàn)為一組抽象構(gòu)件及構(gòu)件實(shí)例間交互的方法;另一種定義認(rèn)為,技術(shù)框架是可被技術(shù)開發(fā)者定制的應(yīng)用骨架。前者是從應(yīng)用方面而后者是從目的方面給出的定義。

從技術(shù)層面描述,主要是分層模型,例如持久層、數(shù)據(jù)層、邏輯層、應(yīng)用層、表現(xiàn)層等,然后每層使用什么技術(shù)框架,例如Spring、hibernate、ioc、MVC、成熟的類庫、中間件、WebService等,分別說明,要求這些技術(shù)能夠?qū)⒄麄€(gè)系統(tǒng)的主要實(shí)現(xiàn)概括。

image.png

# 視角:技術(shù)視角-數(shù)據(jù)架構(gòu)

專注于構(gòu)建數(shù)據(jù)中臺(tái),統(tǒng)一數(shù)據(jù)定義規(guī)范,標(biāo)準(zhǔn)化數(shù)據(jù)表達(dá),形成有效易維護(hù)的數(shù)據(jù)資產(chǎn)。打造統(tǒng)一的大數(shù)據(jù)處理平臺(tái),包括數(shù)據(jù)可視化運(yùn)營平臺(tái)、數(shù)據(jù)共享平臺(tái)、數(shù)據(jù)權(quán)限管理平臺(tái)等。

# 視角:技術(shù)視角-基礎(chǔ)架構(gòu)

PAAS,IAAS...

image.png

# 視角:技術(shù)視角-運(yùn)維架構(gòu)

負(fù)責(zé)運(yùn)維系統(tǒng)的規(guī)劃、選型、部署上線,建立規(guī)范化的運(yùn)維體系。

image.png

# 物理架構(gòu)

物理架構(gòu)關(guān)注軟件元件是如何放到硬件上的,專注于基礎(chǔ)設(shè)施,某種軟硬件體系,甚至云平臺(tái),包括機(jī)房搭建、網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),網(wǎng)絡(luò)分流器、代理服務(wù)器、Web 服務(wù)器、應(yīng)用服務(wù)器、報(bào)表服務(wù)器、整合服務(wù)器、存儲(chǔ)服務(wù)器和主機(jī)等。

# 以一個(gè)銀行系統(tǒng)為例

下面為業(yè)務(wù)性能及網(wǎng)絡(luò)性能監(jiān)控的物理部署架構(gòu)圖,分網(wǎng)絡(luò)接入層和匯聚層兩個(gè)層次對(duì)網(wǎng)絡(luò)流量報(bào)文進(jìn)行捕獲和深入分析。

image.png

物理部署架構(gòu)設(shè)計(jì)說明:

  • (1)通過4臺(tái)TAP設(shè)備獲取青山湖和艾溪湖兩個(gè)數(shù)據(jù)中心、五個(gè)機(jī)房相關(guān)應(yīng)用服務(wù)器接入交換機(jī)的鏡像流量,并進(jìn)行規(guī)則過濾;
  • (2)通過1臺(tái)高性能匯聚TAP來獲取艾溪湖數(shù)據(jù)中心二層匯聚交換機(jī)和核心交換機(jī)的鏡像流量,并進(jìn)行規(guī)則過濾;
  • (3)艾溪湖主數(shù)據(jù)中心各機(jī)房接入層TAP設(shè)備的流量共享給匯聚TAP設(shè)備;
  • (4)BPC系統(tǒng)的5臺(tái)BPC服務(wù)器在兩個(gè)數(shù)據(jù)中心的每個(gè)機(jī)房進(jìn)行分布式部署、解碼和分析,并集中展示;
  • (5)NPM系統(tǒng)在艾溪湖數(shù)據(jù)中心部署一臺(tái)管理端服務(wù)器,并在每個(gè)數(shù)據(jù)中心各部署一臺(tái)NPM探針服務(wù)器,通過分布式部署、捕獲數(shù)據(jù),集中監(jiān)控展示的方式,監(jiān)控兩個(gè)數(shù)據(jù)中心的各業(yè)務(wù)系統(tǒng)的網(wǎng)絡(luò)性能;
  • (6)通過雙數(shù)據(jù)中心、多機(jī)房分布式部署的方式,端到端的監(jiān)控業(yè)務(wù)在各個(gè)環(huán)節(jié)的流轉(zhuǎn)情況,實(shí)時(shí)監(jiān)控,快速定位。

下面為運(yùn)維大數(shù)據(jù)平臺(tái)的物理部署拓?fù)鋱D,分為三個(gè)集群,Hadoop集群、ES日志集群和Kalfka消息集群。

image.png

物理部署架構(gòu)設(shè)計(jì)說明:

  • 配置多臺(tái)服務(wù)器做Hadoop集群,滿足不同應(yīng)用和系統(tǒng)日志的單系統(tǒng)與跨系統(tǒng)交易日志統(tǒng)計(jì)與分析,滿足數(shù)千個(gè)基礎(chǔ)監(jiān)控分區(qū)的基礎(chǔ)性能分析與運(yùn)行性能指標(biāo)預(yù)測等,以及指性能標(biāo)入庫與歷史日志數(shù)據(jù)入庫的存儲(chǔ)需要。
  • 配置多臺(tái)服務(wù)器做ES集群,承載實(shí)時(shí)統(tǒng)一日志查詢與分析平臺(tái)的任務(wù),滿足數(shù)天至一個(gè)月不同需求的日志查詢和分析需求,歷史日志查詢需要從HDFS中將數(shù)據(jù)導(dǎo)入至ES中,進(jìn)行二次查詢。
  • 配置多臺(tái)服務(wù)器做Kafka集群用于實(shí)時(shí)的指標(biāo)型與日志型數(shù)據(jù)流的采集,滿足實(shí)時(shí)監(jiān)控的需求。

# DDD到各種架構(gòu)

領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的戰(zhàn)略核心即是將問題域與應(yīng)用架構(gòu)相剝離,將業(yè)務(wù)語義顯現(xiàn)化,把原先晦澀難懂的業(yè)務(wù)算法邏輯,通過領(lǐng)域?qū)ο螅―omain Object),統(tǒng)一語言(Ubiquitous Language)轉(zhuǎn)化為領(lǐng)域概念清晰的顯性化表達(dá)出來。

  • 統(tǒng)一語言,軟件的開發(fā)人員/使用人員都使用同一套語言,即對(duì)某個(gè)概念,名詞的認(rèn)知是統(tǒng)一的,建立清晰的業(yè)務(wù)模型,形成統(tǒng)一的業(yè)務(wù)語義。將模型作為語言的支柱。確保團(tuán)隊(duì)在內(nèi)部的所有交流中,代碼中,畫圖,寫東西,特別是講話的時(shí)候都要使用這種語言。例如賬號(hào),轉(zhuǎn)賬,透支策略,這些都是非常重要的領(lǐng)域概念,如果這些命名都和我們?nèi)粘S懻撘约?PRD 中的描述保持一致,將會(huì)極大提升代碼的可讀性,減少認(rèn)知成本。。比如不再會(huì)有人在會(huì)議中對(duì)“工單”、“審核單”、“表單”而反復(fù)確認(rèn)含義了,DDD 的模型建立不會(huì)被 DB 所綁架。

  • 面向領(lǐng)域,業(yè)務(wù)語義顯性化,以領(lǐng)域去思考問題,而不是模塊。將隱式的業(yè)務(wù)邏輯從一推 if-else 里面抽取出來,用通用語言去命名、去寫代碼、去擴(kuò)展,讓其變成顯示概念;很多重要的業(yè)務(wù)概念,按照事務(wù)腳本的寫法,其含義完全淹沒在代碼邏輯中沒有突顯出來。

  • 職責(zé)劃分,根據(jù)實(shí)際業(yè)務(wù)合理劃分模型,模型之間依賴結(jié)構(gòu)和邊界更加清晰,避免了混亂的依賴關(guān)系,進(jìn)而增加可讀性、可維護(hù)性;單一職責(zé),模型只關(guān)注自身的本職工作,避免“越權(quán)”而導(dǎo)致混亂的調(diào)用關(guān)系。通過建模,更好的表達(dá)現(xiàn)實(shí)世界中的復(fù)雜業(yè)務(wù),隨著時(shí)間的發(fā)展,不斷增加系統(tǒng)對(duì)實(shí)際業(yè)務(wù)的沉淀,也將更好的通過清晰的代碼描述業(yè)務(wù)邏輯,模型的內(nèi)聚增加了系統(tǒng)的高度模塊化,提升代碼的可重用性,對(duì)比傳統(tǒng)三層模式中,很有可能大量重復(fù)的功能散落在各個(gè) Service 內(nèi)部。

image.png

未完待續(xù)。。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容