一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

架構(gòu)師需了解的一些知識(shí)

jf_78858299 ? 來(lái)源:元閏子的邀請(qǐng) ? 作者:元閏子 ? 2023-05-10 17:11 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

當(dāng)你點(diǎn)開(kāi)一個(gè)招聘APP,篩選條件選擇互聯(lián)網(wǎng)技術(shù),在列出來(lái)的一大堆職位上,往往有那么幾個(gè)帶有“ 架構(gòu)師 ”三個(gè)字眼的高薪職位。當(dāng)你被它的高薪所吸引而點(diǎn)擊查看職位詳情時(shí),又會(huì)被它的高要求所勸退。它們往往要求工作年限在5年以上,需要求職者有過(guò)3年以上的系統(tǒng)設(shè)計(jì)經(jīng)驗(yàn),精通各種架構(gòu)模式和系統(tǒng)框架,反觀自己卻一個(gè)條件都不滿足。

軟件架構(gòu)師就是這么一個(gè)讓人向往,但又讓人望洋興嘆的一個(gè)職位。就像建筑設(shè)計(jì)師總有成為總設(shè)計(jì)師的夢(mèng)想,航天工作者總有成為總工程師的壯志,相信每一個(gè)軟件工程師都有過(guò)成為軟件架構(gòu)師的想法。引用維基百科里的定義, 軟件架構(gòu)師的職責(zé)就是在軟件系統(tǒng)研發(fā)中,負(fù)責(zé)依據(jù)需求來(lái)確定主要的技術(shù)選擇、設(shè)計(jì)系統(tǒng)的主體框架結(jié)構(gòu),并負(fù)責(zé)搭建實(shí)施 。然而,架構(gòu)師所需的技能遠(yuǎn)遠(yuǎn)不止于技術(shù)選擇和系統(tǒng)設(shè)計(jì)。本文主要介紹軟件架構(gòu)的定義,以及要成為一個(gè)軟件架構(gòu)師所需具備的一些技能,讓你對(duì)軟件架構(gòu)師這一職位有一個(gè)更深的了解。

文中大部分的觀點(diǎn)來(lái)自于《Fundamentals of Software Architecture》一書(shū),想了解更多詳情推薦閱讀原書(shū)。

軟件架構(gòu)的定義

對(duì)于 軟件架構(gòu) (Software Architecture),我們通常將它看成是軟件系統(tǒng)的藍(lán)圖(blueprint),但是如果要給出一個(gè)精確的定義,往往很難。維基百科里對(duì)軟件架構(gòu)的定義為, 有關(guān)軟件整體結(jié)構(gòu)與組件的抽象描述,用于指導(dǎo)大型軟件系統(tǒng)各個(gè)方面的設(shè)計(jì) 。但是,這種定義也是片面的,軟件架構(gòu)并不僅僅是系統(tǒng)的整體結(jié)構(gòu)和組件,光有這些還不足以指導(dǎo)設(shè)計(jì)出好的軟件系統(tǒng)。

Mark Richards和Neal Ford在書(shū)中,從四個(gè)維度上對(duì)軟件架構(gòu)進(jìn)行了描述,分別是 Structure 、 Architecture characteristics 、Architecture decisionsDesign principles 。

圖片

軟件架構(gòu)的描述

Structure

Structure描述的是軟件系統(tǒng)所使用的架構(gòu)風(fēng)格 ,比如最常見(jiàn)的分層架構(gòu)(layered architecture)、事件驅(qū)動(dòng)架構(gòu)(event-driven architecture)、微核架構(gòu)(microkernel architecture)、微服務(wù)架構(gòu)(microservices architecture)等等。當(dāng)你去問(wèn)架構(gòu)師一個(gè)軟件系統(tǒng)使用什么架構(gòu)時(shí),如果他告訴你,“系統(tǒng)使用的是微服務(wù)架構(gòu)”,那么也他僅僅闡明了系統(tǒng)的架構(gòu)風(fēng)格而已。若想了解整個(gè)系統(tǒng)的軟件架構(gòu),對(duì)architecture characteristics、architecture decisions和design principles都要有深入的認(rèn)識(shí)。

圖片

Structure

Architecture characteristics

Architecture characteristics也就是我們常說(shuō)的非功能需求 ,比如有可用性(Availability)、可擴(kuò)展性(Scalability)、可靠性(Reliability)等。Architecture characteristics往往容易被軟件新手所忽略,但是它對(duì)于軟件系統(tǒng)而言卻是非常的重要。如果說(shuō)功能需求決定了一個(gè)軟件系統(tǒng)的下限,那么非功能需求則決定了它的上限。

圖片

Architecture characteristics

Architecture decisions

Architecture decisions描述了開(kāi)發(fā)軟件系統(tǒng)時(shí)所必須遵循的規(guī)則 ,比如圖中例子,對(duì)于一個(gè)分層架構(gòu)風(fēng)格的系統(tǒng)而言,開(kāi)發(fā)工程師需要遵循以下規(guī)則:只有業(yè)務(wù)層才能直接訪問(wèn)服務(wù)層,表現(xiàn)層不能直接訪問(wèn)服務(wù)層。Architecture decisions更多的只是一種約束,違反了這種約束可能并不會(huì)對(duì)系統(tǒng)的功能造成影響,但是卻是系統(tǒng)架構(gòu)腐化的源頭。

圖片

Architecture decisions

Design principles

Design principles指的是系統(tǒng)設(shè)計(jì)的原則 ,用于引導(dǎo)開(kāi)發(fā)團(tuán)隊(duì)選擇更符合系統(tǒng)特點(diǎn)的技術(shù)方案。Design principles只會(huì)給出一個(gè)方向,而不是具體的實(shí)現(xiàn)方案。比如圖中例子給出的系統(tǒng)設(shè)計(jì)原則就是:微服務(wù)之間應(yīng)該盡可能通過(guò)異步通信來(lái)提升系統(tǒng)的性能。至于開(kāi)發(fā)團(tuán)隊(duì)通過(guò)REST或者RPC的方式進(jìn)行異步通信實(shí)現(xiàn),設(shè)計(jì)原則并未進(jìn)行限制。

圖片

Design principles

成為架構(gòu)師所需的技能

就像軟件架構(gòu)不僅僅是系統(tǒng)的整體結(jié)構(gòu)和組件一樣,要成為一個(gè)軟件架構(gòu)師,只會(huì)技術(shù)選型是遠(yuǎn)遠(yuǎn)不夠的。一個(gè)合格的軟件架構(gòu)師應(yīng)該具備以下的幾種技能:

進(jìn)行架構(gòu)決策

An architect is expected to define the architecture decisions and design principles used to guide technology decisions within the team, the department, or across the enterprise.

這是一個(gè)架構(gòu)師所需具備的最基本的技能,需要為開(kāi)發(fā)團(tuán)隊(duì)給出系統(tǒng)設(shè)計(jì)的原則和系統(tǒng)開(kāi)發(fā)的約束。 架構(gòu)師在這里的角色更多的是一個(gè)引導(dǎo)者,而不是具體技術(shù)方案的制定者 。比如,開(kāi)發(fā)團(tuán)隊(duì)要進(jìn)行前端框架的選型,作為架構(gòu)師應(yīng)該給出的建議是選擇Reactive風(fēng)格的前端框架(引導(dǎo)團(tuán)隊(duì)在React.js、Angular、Vue.js或者其他Reactive風(fēng)格的前端框架之間進(jìn)行選擇),而不是直接建議選擇React.js框架。前者屬于架構(gòu)決策,而后者則是技術(shù)決策。

持續(xù)對(duì)系統(tǒng)架構(gòu)進(jìn)行分析

An architect is expected to continually analyze the architecture and current technology environment and then recommend solutions for improvement.

就像一個(gè)軟件系統(tǒng)的生命周期并不止于開(kāi)發(fā)階段的結(jié)束,軟件架構(gòu)也不是一錘子買賣。這就要求架構(gòu)師能夠持續(xù)對(duì)系統(tǒng)架構(gòu)進(jìn)行分析,并提出改進(jìn)的建議,使得系統(tǒng)在面對(duì)業(yè)務(wù)和技術(shù)的雙重變化時(shí),仍然能夠保持架構(gòu)良好。

保持對(duì)技術(shù)和業(yè)界的發(fā)展趨勢(shì)的敏感

An architect is expected to keep current with the latest technology and industry trends

作為一個(gè)架構(gòu)師必須時(shí)刻保持對(duì)技術(shù)和業(yè)界發(fā)展趨勢(shì)的敏感。在敏捷開(kāi)發(fā)的潮流下,軟件的特性會(huì)頻繁的發(fā)生變化,但是軟件的基礎(chǔ)架構(gòu)往往是很少改變的。架構(gòu)師如果不能把握當(dāng)前技術(shù)和業(yè)界發(fā)展的趨勢(shì),從而導(dǎo)致設(shè)計(jì)出來(lái)的軟件架構(gòu)不能夠應(yīng)付未來(lái)幾年的業(yè)務(wù)和技術(shù)變化,這對(duì)于一個(gè)軟件系統(tǒng)而言將會(huì)是災(zāi)難性的。

確保團(tuán)隊(duì)按照既定的規(guī)則進(jìn)行開(kāi)發(fā)

An architect is expected to ensure compliance with architecture decisions and design principles.

架構(gòu)師不僅僅需要制定設(shè)計(jì)原則和開(kāi)發(fā)約束,還需要確保團(tuán)隊(duì)能夠一直按照這些規(guī)則進(jìn)行軟件開(kāi)發(fā)。這就要求架構(gòu)師對(duì)開(kāi)發(fā)人員提交的核心代碼進(jìn)行Code Review,否則系統(tǒng)的架構(gòu)很容易就腐化掉了。

擴(kuò)展知識(shí)的廣度

An architect is expected to have exposure to multiple and diverse technologies, frameworks, platforms, and environments.

對(duì)于一個(gè)架構(gòu)師而言,他并不需要精通每一種框架、平臺(tái)和語(yǔ)言,但至少要盡可能多的了解它們,這樣才能更好的支撐架構(gòu)決策。這就要求架構(gòu)師能夠持續(xù)的學(xué)習(xí)新的知識(shí),不斷地跳出自己的舒適區(qū)。最好的情況就是精通2~3種語(yǔ)言和框架,并且熟悉業(yè)界各種常用的語(yǔ)言和框架,這樣的知識(shí)深度和廣度的結(jié)合才能設(shè)計(jì)出更好的軟件架構(gòu)。

擁有一定的領(lǐng)域知識(shí)

An architect is expected to have a certain level of business domain expertise.

所有的技術(shù)都是服務(wù)于既有的業(yè)務(wù),剝離了業(yè)務(wù)的軟件技術(shù)毫無(wú)價(jià)值 。架構(gòu)師無(wú)需像領(lǐng)域?qū)<乙粯泳ㄏ到y(tǒng)的各種業(yè)務(wù),但至少也要有一定的業(yè)務(wù)積累。軟件是用來(lái)解決問(wèn)題的,不懂業(yè)務(wù)的架構(gòu)師來(lái)做軟件架構(gòu)設(shè)計(jì),就相當(dāng)于還沒(méi)讀懂題目就開(kāi)始解題,結(jié)果往往適得其反。比如一個(gè)需要低時(shí)延的業(yè)務(wù),交給一個(gè)不懂業(yè)務(wù)的架構(gòu)師來(lái)進(jìn)行系統(tǒng)設(shè)計(jì),可能得出來(lái)的是一個(gè)高吞吐量的架構(gòu)。

人際交往的能力

An architect is expected to possess exceptional interpersonal skills, including teamwork, facilitation, and leadership.

對(duì)于大部分的開(kāi)發(fā)工程師和架構(gòu)師而言,這可能是最難的一條了要求了。他們很擅長(zhǎng),也很樂(lè)意去解決技術(shù)上的問(wèn)題,但是對(duì)于與人相關(guān)的問(wèn)題則相當(dāng)?shù)牡钟|。但這對(duì)于一個(gè)合格架構(gòu)師來(lái)說(shuō)所必須克服的一點(diǎn),因?yàn)榧軜?gòu)師不僅僅需要制定技術(shù)規(guī)則,更重要的是領(lǐng)導(dǎo)團(tuán)隊(duì)按照既定規(guī)則進(jìn)行開(kāi)發(fā),這不可避免地就涉及到領(lǐng)導(dǎo)力和人際交往的能力。

當(dāng)一個(gè)開(kāi)發(fā)工程師決定在一次需求開(kāi)發(fā)中采用單例模式,可能團(tuán)隊(duì)里的其他人并不會(huì)有太多的關(guān)注。但是當(dāng)一個(gè)架構(gòu)師決定采用微服務(wù)架構(gòu)來(lái)設(shè)計(jì)系統(tǒng)時(shí),可能就會(huì)受到團(tuán)隊(duì)內(nèi)各類人員的挑戰(zhàn),比如版本經(jīng)理可能覺(jué)得微服務(wù)架構(gòu)太復(fù)雜,會(huì)不會(huì)影響交付的節(jié)奏;開(kāi)發(fā)人員可能覺(jué)得分層架構(gòu)更好實(shí)現(xiàn)。這種情況下就要求架構(gòu)師能夠有很好的人際交往能力,說(shuō)服各類人員,這樣項(xiàng)目才能更好的進(jìn)行下去。

總結(jié)

軟件架構(gòu)是一個(gè)很抽象的東西,目前對(duì)它的定義大部分都是一些很寬泛的描述?!禙undamentals of Software Architecture》從四個(gè)維度上對(duì)軟件架構(gòu)進(jìn)行了描述,讓軟件架構(gòu)有了一個(gè)更加清晰的視圖。在此基礎(chǔ)上,書(shū)中也提出了一個(gè)合格的軟件架構(gòu)師所需要具備的幾種技能。總的來(lái)說(shuō),就是 想要設(shè)計(jì)出一個(gè)好的軟件架構(gòu)很難,要成為一個(gè)好的軟件架構(gòu)師更難 。

另外,書(shū)中還提出了軟件架構(gòu)的兩個(gè)準(zhǔn)則,很有道理,就是有點(diǎn)抽象。不過(guò)沒(méi)關(guān)系, 不要試圖理解它,要去感受它 。

1、Everything in software architecture is a trade-off.

2、Why is more important than how.

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    關(guān)于芯片設(shè)計(jì)的一些基本知識(shí)

    芯片的設(shè)計(jì)理念眾所周知,芯片擁有極為復(fù)雜的結(jié)構(gòu)。以英偉達(dá)的B200芯片為例,在巴掌大的面積上,塞入了2080億個(gè)晶體管。里面的布局,堪稱個(gè)異次元空間級(jí)的迷宮。英偉達(dá)B200芯片如此復(fù)雜的架構(gòu)
    的頭像 發(fā)表于 06-11 12:16 ?177次閱讀
    關(guān)于芯片設(shè)計(jì)的<b class='flag-5'>一些</b>基本<b class='flag-5'>知識(shí)</b>

    Debian和Ubuntu哪個(gè)好一些

    兼容性對(duì)比Debian和Ubuntu哪個(gè)好一些,并為您揭示如何通過(guò)RAKsmart服務(wù)器釋放Linux系統(tǒng)的最大潛能。
    的頭像 發(fā)表于 05-07 10:58 ?283次閱讀

    如何添加一些網(wǎng)絡(luò)上的庫(kù)到mpy固件的說(shuō)明或手冊(cè)教程?

    下有沒(méi)有關(guān)于如何添加一些網(wǎng)絡(luò)上的庫(kù)到mpy固件的說(shuō)明或手冊(cè)教程? 問(wèn)題2: 關(guān)于mpy的image庫(kù)在哪里能了解學(xué)習(xí)內(nèi)部代碼,只了解一些python,想知道怎么從c轉(zhuǎn)換成mpy能調(diào)用的
    發(fā)表于 04-29 08:16

    硬件系統(tǒng)工程寶典—完整版

    資料介紹: 這是本硬件工程的必備書(shū),介紹了硬件工程所必須的一些知識(shí),例如EMC、SI、PI等知識(shí)
    發(fā)表于 03-22 15:47

    個(gè)優(yōu)秀的嵌入式軟件“架構(gòu)師” — AWFlow

    在大型項(xiàng)目的軟件開(kāi)發(fā)過(guò)程中,模塊化開(kāi)發(fā)面臨著接口設(shè)計(jì)不合理、代碼沖突以及模塊間不兼容等問(wèn)題,導(dǎo)致團(tuán)隊(duì)協(xié)作效率低下。為了解決這些問(wèn)題,嵌入式軟件“架構(gòu)師”—AWFlow,應(yīng)運(yùn)而生!在大型項(xiàng)目
    的頭像 發(fā)表于 02-10 16:44 ?499次閱讀
    <b class='flag-5'>一</b>個(gè)優(yōu)秀的嵌入式軟件“<b class='flag-5'>架構(gòu)師</b>” — AWFlow

    獨(dú)立服務(wù)器和云服務(wù)器哪個(gè)快一些?

    獨(dú)立服務(wù)器和云服務(wù)器哪個(gè)快一些?在數(shù)字服務(wù)部署中,獨(dú)立服務(wù)器與云服務(wù)器的速度差異并非絕對(duì),結(jié)合資源配置與應(yīng)用場(chǎng)景綜合判斷。以下是UU云對(duì)獨(dú)立服務(wù)器和云服務(wù)器的核心維度對(duì)比分析:
    的頭像 發(fā)表于 02-05 10:08 ?376次閱讀

    英特爾前Xeon首席架構(gòu)師加盟高通

    步。 Kottapalli在英特爾度過(guò)了長(zhǎng)達(dá)28年的職業(yè)生涯,期間他擔(dān)任了Xeon處理器首席架構(gòu)師及高級(jí)研究員等關(guān)鍵職務(wù)。在英特爾,他以其深厚的專業(yè)知識(shí)和卓越的領(lǐng)導(dǎo)能力,成為該公司服務(wù)器芯片設(shè)計(jì)的核心人物之。 對(duì)于此次加盟高通
    的頭像 發(fā)表于 01-15 15:30 ?468次閱讀

    云服務(wù)器還是服務(wù)器好用一些

    云服務(wù)器還是服務(wù)器好用一些?云服務(wù)器與服務(wù)器各有優(yōu)勢(shì)。服務(wù)器作為獨(dú)立物理設(shè)備,適合高性能、物理控制和安全性高的場(chǎng)景;而云服務(wù)器基于云計(jì)算技術(shù),提供靈活資源分配、按需付費(fèi)、便捷管理和豐富服務(wù),更適合快速響應(yīng)、大規(guī)模數(shù)據(jù)處理和低
    的頭像 發(fā)表于 12-26 10:08 ?481次閱讀

    飛凌嵌入式-ELFBOARD-ELF 2硬件分享之前言

    。相比模擬電子技術(shù),數(shù)字電子技術(shù)更容易理解。我們需要了解一些常用的門(mén)電路、觸發(fā)器和時(shí)序相關(guān)的知識(shí)。 作為硬件工程,在掌握基礎(chǔ)的硬件知識(shí)之后
    發(fā)表于 12-02 13:34

    硬件工程需要掌握的硬件基礎(chǔ)知識(shí)

    示波器 方法/步驟 電路知識(shí),模擬電子線路知識(shí):作為個(gè)合格的硬件工程,模擬電路知識(shí)是基礎(chǔ),從了解
    的頭像 發(fā)表于 12-02 09:22 ?1597次閱讀
    硬件工程<b class='flag-5'>師</b>需要掌握的硬件基礎(chǔ)<b class='flag-5'>知識(shí)</b>

    一些常見(jiàn)的動(dòng)態(tài)電路

    無(wú)論是模電還是數(shù)電,理論知識(shí)相對(duì)來(lái)說(shuō)還是比較枯燥,各種電路原理理解清楚不算容易,換種生動(dòng)形象的方式或許會(huì)增加一些趣味性,也更容易理解這些知識(shí)。下面整理了
    的頭像 發(fā)表于 11-16 09:26 ?1038次閱讀
    <b class='flag-5'>一些</b>常見(jiàn)的動(dòng)態(tài)電路

    分享一些常見(jiàn)的電路

    理解模電和數(shù)電的電路原理對(duì)于初學(xué)者來(lái)說(shuō)可能比較困難,但通過(guò)一些生動(dòng)的教學(xué)方法和資源,可以有效地提高學(xué)習(xí)興趣和理解能力。 下面整理了一些常見(jiàn)的電路,以動(dòng)態(tài)圖形的方式展示。 整流電路 單相橋式整流
    的頭像 發(fā)表于 11-13 09:28 ?784次閱讀
    分享<b class='flag-5'>一些</b>常見(jiàn)的電路

    LED驅(qū)動(dòng)器應(yīng)用的一些指南和技巧

    電子發(fā)燒友網(wǎng)站提供《LED驅(qū)動(dòng)器應(yīng)用的一些指南和技巧.pdf》資料免費(fèi)下載
    發(fā)表于 09-25 11:35 ?0次下載
    LED驅(qū)動(dòng)器應(yīng)用的<b class='flag-5'>一些</b>指南和技巧

    架構(gòu)師的自述:在尚未踏入的世界成為你自己

    計(jì)算、流式計(jì)算、交互式計(jì)算的通用化數(shù)據(jù)應(yīng)用構(gòu)建,降低大數(shù)據(jù)計(jì)算的使用門(mén)檻。 在此,我跟大家分享下我的個(gè)人經(jīng)歷和一些思考。 ? ? 好玩兒 成長(zhǎng)經(jīng)歷,說(shuō)來(lái)話長(zhǎng),有多長(zhǎng)呢? 上世紀(jì)80年代末,我參與了計(jì)算機(jī)輸入指令的歸化:把穿孔
    的頭像 發(fā)表于 09-23 15:25 ?555次閱讀
    <b class='flag-5'>一</b>位<b class='flag-5'>架構(gòu)師</b>的自述:在尚未踏入的世界成為你自己

    想要了解下大模型知識(shí)

    工作需要,想要了解下大模型算力建設(shè)知識(shí)。
    發(fā)表于 08-20 15:31