• 您的信息
      • 日期时间
        2025年3月3日 星期一
        【蛇】己卯月辛未日
        乙巳年 二月初四
        全国爱耳日
        您的信息
        您的IP:
        3.15.193.22
        操作系统:
        未知操作系统
        浏览器:
        未知浏览器
        分辨率:
        1280x720
        位置:
        缂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽幃銏ゅ礂鐏忔牗瀚介梺璇查叄濞佳勭珶婵犲伣锝夘敊閸撗咃紲闂佺粯鍔﹂崜娆撳礉閵堝洨纾界€广儱鎷戦煬顒傗偓娈垮枛椤兘骞冮姀銈呯閻忓繑鐗楃€氫粙姊虹拠鏌ュ弰婵炰匠鍕彾濠电姴浼i敐澶樻晩闁告挆鍜冪床闂備胶绮崝锕傚礈濞嗘挸绀夐柕鍫濇川绾剧晫鈧箍鍎遍幏鎴︾叕椤掑倵鍋撳▓鍨灈妞ゎ厾鍏橀獮鍐閵堝懐顦ч柣蹇撶箲閻楁鈧矮绮欏铏规嫚閺屻儱寮板┑鐐板尃閸曨厾褰炬繝鐢靛Т娴硷綁鏁愭径妯绘櫓闂佸憡鎸嗛崪鍐簥闂傚倷鑳剁划顖炲礉閿曞倸绀堟繛鍡樻尭缁€澶愭煏閸繃顥犵紒鈾€鍋撻梻渚€鈧偛鑻晶顖涚箾閻撳海绠婚柛鈺嬬節瀹曟帡濡堕崱娆戔棩闂傚倸鍊风粈浣革耿闁秴纾块柕鍫濐槸閽冪喖鏌ㄩ悢鍝勑㈢痪鎯ь煼閺岀喖宕滆鐢盯鏌¢崨顔惧弨妤犵偞鐗滈崚鎺楀礂婢跺﹣澹曢梺鍦帛鐢晛螞濠婂懐纾介柛灞捐壘閳ь剛鍏橀幃鐐烘晜閼恒儲鐝烽柟鍏肩暘閸斿矂鎮块悙顒傜瘈濠电姴鍊归崳铏光偓瑙勬礀瀵墎鎹㈠☉銏犵闁绘垵娲g欢鐢告⒑閸濄儱鏋庨柟鍐茬箻婵$敻宕熼姘辩潉闂佹悶鍎滈崘鈺佸姃闂傚倷鑳堕崕鐢稿疾濞戙垺鐓€闁挎繂顦拑鐔哥箾閹存瑥鐏╅崬顖炴⒑閹稿孩顥嗘俊顐㈠瀹曨剚寰勬繛鐐杸濡炪倖姊婚妴瀣涘顓犵闁告粌鍟扮粔顔锯偓瑙勬礈婵炩偓鐎殿喕绮欓、姗€鎮欓幓鎺斻偖闂傚倷鑳剁划顖毭洪幋鐘冲闁哄被鍎辩壕濠氭煙閹规劦鍤欐鐐灪缁绘盯骞嬮悙鍨櫘闂佸憡蓱閹倸顫忓ú顏勫窛濠电姳鑳剁换渚€姊洪崫銉バg€光偓閹间礁绠氱€光偓閸曨偆顔婇梺瑙勫劤瑜板鑺辨繝姘拺闂傚牊鐩悰婊呯磼鏉堛劍绀嬫鐐诧躬瀹曞爼鍩為幆褌澹曞┑鐐茬墕閻忔繂鈻嶅鈧弻娑㈡晲韫囨洖鍩岄梺浼欑悼閸忔﹢鐛幒妤€绠i柡鍌濇硶婢ь垶姊绘担鍛婂暈缂侇喖鐭傚畷顖涘鐎涙ǚ鎷诲銈嗙墬缁嬫挾寮ч埀顒勬⒑濮瑰洤鐏叉繛浣冲嫮顩烽柍鍝勬噺閻撴瑦绻涢懠棰濆敽缂併劎鏅埀顒€鐏氬姗€鏁冮鍫濈疇闁绘劕鎼敮閻熸粌绻楅妵鎰版倷椤掑倻鐦堥梺姹囧灲濞佳冪摥婵犵數鍋涢惇浼村磹濡や胶鐝堕柡鍥ュ灩闁裤倖淇婇妶鍕厡闁告ḿ鏁诲铏规喆閸曢潧鏅遍梺鍝ュУ閻楃娀濡撮崒娑氶檮闁告稑锕﹂崢浠嬫⒑鐟欏嫬鍔ょ€规洦鍓熷畷婵嗏堪閸涱垳锛滅紓鍌欑劍宀e灝煤鐎涙﹩娈介柣鎰▕閸庢棃鏌熼鐣屾噰鐎规洖缍婇、鏇㈠閿涘嫬灏嗙紓鍌氬€搁崐鎼佸磹妞嬪孩濯奸柡灞诲劚绾惧鏌熼悙顒€澧柣鏂挎閺屻倝骞栨担瑙勯敪婵犳鍠栭悧鎾诲蓟閿濆绠荤€规洖娲ㄩ鎺楁⒑閸濆嫭婀伴柣鈺婂灡娣囧﹪鎮滈懞銉︽珳闂佸憡渚楅崣搴ㄦ倵閸愭祴鏀介柣妯诲墯閸熷繘鏌涢悩宕囧⒈缂侇喗妫冮幃浠嬪箹閻愨晛浜鹃柛鎰靛枛鍞梺鍐叉惈閸婃悂鍩€椤掑倸鍘撮柡灞稿墲瀵板嫮鈧綆浜炴禒鎼佹煟閻樺弶宸濋柛瀣閻忓啴姊虹紒姗堣€挎繛浣冲嫮顩烽柨鏇楀亾闁伙絾绻堥弫鎰板川椤旈棿娣梻浣虹《閺備線宕戦幘鎰佹富闁靛牆妫楃粭鍌炴煠閸愯尙鍩i柛鈺侊躬瀵挳濮€閿涘嫬寮抽梻浣告惈濞诧箓銆冮崱妞绘瀺闁糕剝鐟х壕濂告煕鐏炲墽鈽夌紒妞绘櫆閵囧嫰鏁冩笟鍥ㄧ秷闂侀€涚┒閸斿秶鎹㈠┑瀣<闁靛牆娲ら幃鎴︽煟鎼淬値娼愭繛鍙夅缚閺侇噣骞掑Δ鈧悡婵嬪箹濞n剙濡肩紒鐘崇⊕閵囧嫰寮幐搴㈠創婵炲濮电敮鎺楀煘閹达附鍋愰柛顭戝亝濮e嫰姊虹粙娆惧剱闁烩晩鍨靛Λ鐔兼⒑閸濆嫷妲归柨娑欐礀鐓ゆい蹇撴噹娴滄粍淇婇悙宸剰閻庢稈鏅涢埢鎾淬偅閸愨斁鎷洪柣鐔哥懃鐎氼剟宕濈捄琛℃斀妞ゆ柨鎼埀顒佺箓椤曪綁骞撻幒鍡樻杸闁诲函缍嗛崑鍡涘储闁秵鐓熼煫鍥ㄦ礀娴犙囨煕鐎n偅宕岄柟顖氬暣楠炲鎮欓鍐泿闂備礁鎼崐鍦偓绗涘泚澶愬閳╁啫寮挎繝鐢靛Т閹冲繘顢旈悩缁樼厵闁荤喐婢橀顓炩攽閳╁啯鍊愬┑锛勫厴閺佸倿骞嗚缁嬪牓姊婚崒姘偓鐑芥嚄閸洖绠犻柟鎹愵嚙閸氬綊鏌″搴″箹缂佺媭鍨堕弻銊╂偆閸屾稑顏� Amazon EC2闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽幃銏ゅ礂鐏忔牗瀚介梺璇查叄濞佳勭珶婵犲伣锝夘敊閸撗咃紲闂佽鍨庨崘锝嗗瘱闂備胶顢婂▍鏇㈠箲閸ヮ剙鐏抽柡鍐ㄧ墕缁€鍐┿亜韫囧海顦﹀ù婊堢畺閺屻劌鈹戦崱娆忓毈缂備降鍔岄妶鎼佸蓟閻斿吋鍎岄柛婵勫劤琚﹂梻浣告惈閻绱炴笟鈧妴浣割潨閳ь剟骞冨▎鎾崇妞ゆ挾鍣ュΛ褔姊婚崒娆戠獢婵炰匠鍏炬稑鈻庨幋鐐存闂佸湱鍎ら〃鎰礊閺嶃劎绡€闂傚牊渚楅崕鎰版煛閸涱喚鍙€闁哄本绋戦埥澶愬础閻愬樊娼绘俊鐐€戦崕鏌ユ嚌妤e啫鐓橀柟瀵稿仜缁犵娀姊虹粙鍖℃敾妞ゃ劌妫濋獮鍫ュΩ閳哄倸鈧鏌﹀Ο渚Ш闁挎稒鐩铏圭磼濡搫顫庨梺绋跨昂閸婃繂鐣烽幋鐘亾閿濆骸鏋熼柣鎾跺枑娣囧﹪顢涘┑鍡楁優濠电姭鍋撳ù鐘差儐閻撳啰鎲稿⿰鍫濈婵炴垶纰嶉鑺ユ叏濮楀棗澧婚柛銈嗘礋閺岀喓绱掗姀鐘崇亪濡炪値鍋勯幊姗€寮诲澶婄厸濞达絽鎲″▓鏌ユ⒑缂佹ḿ绠栨繛鑼枎椤繒绱掑Ο璇差€撻梺鑺ッ敍宥夊箻缂佹ḿ鍙嗗┑顔斤供閸樿绂嶅⿰鍫熺叆闁哄啫娴傞崵娆撴煛鐎c劌鈧妲愰幒鎾寸秶闁靛⿵瀵屽Λ鍐倵濞堝灝鏋熼柟姝屾珪閹便劑鍩€椤掑嫭鐓冮梺娆惧灠娴滈箖姊鸿ぐ鎺濇缂侇噮鍨抽幑銏犫槈濞嗘劗绉堕梺鍛婃寙閸涘懏鑹鹃埞鎴︽倷閸欏鐝旂紓鍌氱С閻掞附绌辨繝鍕ㄥ亾濞戞瑡缂氱紒鈾€鍋撻梻浣规偠閸庮垶宕濇惔銊ュ偍闂侇剙绉甸埛鎴︽偡濞嗗繐顏╅柛鏂诲€栭妵鍕即閵娿儱绠荤紓渚囧枛椤兘骞冨▎鎾村€绘俊顖滃帶楠炲秵淇婇悙顏勨偓鏍ь潖婵犳艾纾婚柟鍓х帛閸婂潡鏌熺粙璺ㄦ槀濞存粍绮撻弻銊╁即濡も偓娴滃墽绱撻崒姘毙㈤柨鏇ㄤ簻椤曪絾绻濆顓炰簻缂佺偓濯芥ご鎼佸疾椤掆偓閳规垿顢欑憴鎺曨潐缁傚秹顢楅崟顐ゎ槷濡炪倖鐗楅閬嶅籍閸喎浜归梻鍌氱墛缁嬫劕鈻介鍡忓亾閸忓浜鹃梺鎸庣箓閻楀﹦娑甸懜鍏哥箚闁告瑥顦慨宥嗩殽閻愭潙娴鐐诧工閻g兘宕惰閻忎線姊虹拠鈥虫灆闁告濞婂畷瑙勩偅閸愩劎顦ч梺鍛婁緱閸欏骸螞濠婂牊鈷掗柛灞剧懅椤︼箑顭块悷甯含闁诡噯绻濆畷濂稿Ψ閵壯嶇幢闂備胶纭堕崜婵嬫偡瑜庣粙澶婎吋閸涘倹妫冮弫鎰板川椤撶喐顔夐梻浣虹帛閹稿鎮烽埡鍛畺婵°倕鎳忛崑銊╂煟瑜戦褏绱炴繝鍌滄殾婵犲﹤鐗嗙涵鈧梺璇茬箺椤曆呯礊婵犲洤绠栭柍鈺佸暞閸庣喖鏌曡箛濠冩珕闁挎稑妫濆缁樻媴閸涘﹥鍎撻梺娲诲墮閵堢ǹ鐣锋导鏉戠疀妞ゆ垼鍋愮槐浼存椤愩垺澶勭紒瀣灩缁牓宕奸姀鈥虫瀾闂婎偄娲︾粙鎴澬ч弻銉︾厽婵☆垵鍋愮敮娑㈡煃闁垮鐏︾紒缁樼洴閹崇姵锛愬┑鍡橆唲婵°倗濮烽崑鐐恒€冮崱娑樜﹂柛鏇ㄥ灠鎯熼梺闈涱樈閸ㄧ敻宕ラ锔解拺閻犲洠鈧櫕鐝紓浣虹帛缁诲牓濡存笟鈧鎾閳╁啯鐝栭梻渚€鈧偛鑻晶鎾煙椤旂晫鎳勭紒缁樼箞瀹曞爼濡歌鐢儳鈹戦悩鍨毄闁稿⿴鍨堕崺鈧い鎺戝绾惧鏌熼悙顒佺伇闁衡偓閼恒儯浜滈柡鍌氱仢閹垿鏌涢悩鎴愭垿骞堥妸锔剧瘈闁告侗鍣禒鈺冪磽娴d粙鍝洪悽顖涘笩閻忔帡鏌i悩鍙夋悙鐎殿喛娉涢埢鎾活敃閿旇В鎷绘繛杈剧到閹诧繝骞夌粙搴撴斀妞ゆ梻鍋撻弳顒勬煙椤斻劌娲﹂崑鎰偓鐟板閸犳牕鈻撻妸锔剧瘈闁汇垽娼ф牎缂佺偓婢樼粔鐟邦嚕閺屻儱绠瑰ù锝呮贡閸樿棄鈹戦埥鍡楃仩闁诲繑绻堥幆鍐倻濡晲绨婚梺鎸庢煥閹碱偅鎱ㄩ崒娑欏弿濠电姴鍟妵婵囦繆椤愩垹鏆欓棁澶愭煏婵炲灝鍔ょ紒澶庢閳ь剝顫夊ú妯好洪悢绗衡偓浣割潩鐠鸿櫣鍔﹀銈嗗坊閸嬫捇鏌i敐鍥у幋妤犵偛顑夐弫鍐焵椤掑倻涓嶅┑鐘崇閸嬶綁鏌涢妷顔荤盎缂佹唻濡囩槐鎺楀础閻愰潧鐓熷┑顔硷攻濡炶棄螞閸愩劉妲堥弶鍫厛閳ь剙妫濆濠氬磼濮橆剦浠奸柣搴㈠嚬閸撶喖宕洪姀銈呯闁哄鍩堥崵銈夋煟鎼淬垻鈯曢懣銈夋煙闁垮銇濇慨濠冩そ瀹曘劍绻濋崘銊╃€洪柣鐔哥矋濠㈡﹢宕婊呯焿鐎广儱鎳夐弨浠嬫煕閵夈垺娅囨い鏃€娲熷娲川婵犲嫭鍣у銇扁偓閸嬫捇姊洪崗鍏肩凡婵炵》绻濆璇测槈閵忕姷鍘搁梺绋挎湰缁秹宕氬☉妯滄棃鎮╅棃娑楁勃闁汇埄鍨辩敮鐔兼倶閸愨晝绠鹃弶鍫濆⒔閸掍即鏌熺喊鍗炰喊闁绘侗鍣e畷濂稿Ψ閿旇瀚奸梺鑽ゅТ濞测晝浜稿▎鎴犱笉闁规儼濮ら悡鏇㈡倵閿濆骸澧柍璇茬墛閵囧嫰濮€閳ヨ弓瀛╁銈忕畱缂嶅﹪寮诲☉銏犵厴闁诡垎鍌氼棜婵犵绱曢崑鎴﹀磹閺嶎偅鏆滃┑鐘叉处閸婂潡鏌ㄩ弬鍨挃闁活厼妫濋幃妤呮晲鎼粹剝鐏嶉梺缁樻尰閻燂箓濡甸崟顖氱睄闁逞屽墴瀵憡绻濆顓炴畬闂佺鍕垫畷闁绘挻绋戦湁闁挎繂姣ヨぐ鎺戞辈闁挎繂娲犻崑鎾舵喆閸曨剛顦ㄩ柣銏╁灡鐢繝宕洪妷锕€绶炲┑鐘插閸嶉潧顪冮妶鍡楀潑闁稿鎸剧槐鎺楁偐閸楃偛绁┑顔硷功缁垶骞忛崨顖滈┏閻庯綆浜濋鍕磽閸屾瑨鍏岀紒顕呭灣閺侇噣鍨惧畷鍥ㄦ闂佺鎻梽鍕磻閹邦厾绠鹃柤纰卞墰鐢盯鏌¢崪浣烽偗闁诡喖鍢查オ浼村礃椤旂厧鍙婃俊銈囧Х閸嬫盯鎮ч幘缈犵箚闁归棿绀侀悡娑樏归敐鍥х殤缂佽鲸鐓″缁樻媴閾忕懓绗¢梺鍛婃⒐濞茬喖銆佸棰濇晣闁靛繒濮撮崑宥夋⒒閸屾氨澧涘〒姘殔閵嗘帗绻濆顓犲帾闂佸壊鍋呯换鍐夐悙鐑樼厽闁规儳宕崝锕傛煛瀹€鈧崰鎾诲窗婵犲洤纭€闁绘劖婢橀弸鍫ユ⒒娴h櫣銆婇柡鍌欑窔瀹曟垿骞橀幇浣瑰瘜闂侀潧鐗嗗Λ妤冪箔閸岀偞鐓犻柛鎰絻椤e磭绱掗纰辩吋妤犵偞岣跨槐鎺懳熼悡搴$闂傚倷鐒︾€笛呮崲閸屾娲Χ婢跺﹤鍋嶉柣搴㈢⊕閿曗晛鈻撴禒瀣厽闁归偊鍘界紞鎴炵箾閹碱厼鏋熸い銊e劦閹瑥顔忛鐓庡闁诲孩顔栭崳顕€宕抽敐澶婃槬闁逞屽墯閵囧嫰骞掗幋婵愪紥缂傚倸绉甸悧婊堝焵椤掆偓缁犲秹宕曢柆宥呯疇濠㈣埖鍔曠紒鈺呮煠閹帒鍔樺ù婊勭矒閺岋繝宕橀妸銉㈠亾婵犳艾绠洪柛灞剧〒缁犻箖鏌涢銈呮瀾闁抽攱鍔曡彁闁搞儜宥堝惈濡炪們鍨哄ú鐔煎极閹版澘骞㈤煫鍥ㄦ煥椤忓搫鈹戦悩娈挎毌闁逞屽墮閸熻法鐥閺屾盯寮埀顒勬偡閳轰緡鍤曟い鎰剁畱缁犺崵绱撴担鑲℃垵鈻嶉姀銈嗏拺閻犳亽鍔屽▍鎰版煙閸戙倖瀚�
        您的天气
          正在获取信息 ...
随笔 - 3458, 文章 - 0, 评论 - 739, 阅读 - 1188万
  管理

如何做好架构设计,架构设计有章可循吗?

Posted on   lzhdim  阅读(20)  评论(0编辑  收藏  举报

设计一个系统的过程,就是建造一座大厦的过程,架构设计的质量直接决定了大厦的质量。

在我们进行系统的架构设计时,总是会遇到一系列的问题,比如一个大型系统的架构应该如何起步,从哪里开始设计?系统是否应该划分成多个模块,应该怎么划分模块才更加的合理?亦或是觉得产品提出的需求非常不合理,完全影响我们正常的架构设计!对于非功能性的需求,我们是否可以得过且过,不去重视?

这些问题,让我们在刚开始架构设计时手足无措,但是随着我们完成一个又一个的系统架构设计以后,发现架构设计是有章法可循的,只要我们学习这些章法和套路,并且在工作过程中不断的积累与沉淀,就会行成一个完整的架构设计方法论,面对新的大型系统架构设计,也会一步一步有节奏进行,最终完成整体的架构设计。

架构设计需要遵循一些原则:

 

1、架构设计需要方法体系

架构设计并不是一个” 单一的方法 “,直接拿来进行架构设计,而是多个各具特色的方法,组成的 “方法体系”,并且这个体系随着新技术的发展还会不断进化。

2、架构设计是质疑驱动

架构设计是质疑驱动的过程,在” 需求驱动 “的基础上,我们需要不断的质疑我们架构设计的中间成果,进一步通过 “质疑”,引入更多的 “质量属性” 及更多 “功能场景”。

3、多阶段下的多视图

架构设计,是多阶段还是多视图?架构设计首先是 “多阶段的”,我们将架构设计划分成多个阶段,在每个阶段中才会考虑” 视图 “这个维度。

架构设计的三个阶段

阶段一、 预备阶段

预备阶段的目标:全面理解需求,把握需求特点,确定架构设计驱动力。

在预备阶段,我们需要全面的梳理与理解需求,不放过任何一个需求细节。同时分析需求产生的各项质量属性与系统约束,同时兼顾这些约束进行架构设计,才能不遗漏重大的架构属性。

阶段二、 概念架构

概念架构,必须考虑包括功能质量约束在内的所有方面的需求。

阶段三、 细化架构

在细化架构阶段,我们从五个不同的角度出发,设计五个视图,完成整个系统全方位的设计。

架构设计的一个贯穿环节

对非功能需求的考虑:非功能需求无法一蹴而就,因为在设计的过程当中,会有新的需求不断的被发现,即使设计完成,在开发阶段,都会有影响非功能需求的约束出现,所以在整个阶段,都应该注意非功能需求。

预备架构的最重要的目标,是建立需求大局观,把握需求特点,确定架构设计驱动力。通过对需求的详细分析,有一个宏观的需求感知,同时还要兼顾系统的质量要求和约束对系统设计造成的制约条件。

 

需求结构化

需求是有结构的,而不是零散的需求点,只有将分析后的需求结构化,才能宏观的感知整个需求。可以借助 ADMEMS 二维矩阵,将架构影响因素,梳理脉络。

例如以下矩阵分析,将需求划分为多个维度,横向上从” 广义功能 “,” 质量 “,” 约束 “三个方面分析,广义功能是指需求需要满足的基本功能,及产品或业务人员的直接要求。质量维度则是系统设计时需要考虑的高并发,高可用,可拓展等技术设计维护,保证系统在满足基本需求的同时,同时对后续系统进化发展以及极端场景(例如:用户量激增,秒杀)等的满足。约束则是系统设计时的一些制约,例如上线日期,上线环境,开发人员技能水平等。纵向上划分为” 业务级需求 “,” 用户级需求 “,” 开发级需求 “三个维护,” 业务级需求 “是指产品或业务人员提出的基本要求,” 用户级需求 “则是从系统的使用用户角度出发,发现的例如用户电脑操作水平,用户使用习惯等潜在需求,而” 开发级需求 “,则是从研发人员角度出发,发现的例如可拓展,可测试,技术环境等不同维度的需求。

通过将需求结构化,我们可以全面的分析整体的需求,对需求进行整体的理解,同时也可以从不同的角度发现系统制约条件,在系统设计的最开始阶段就着手设计,防止遗漏重大约束导致架构设计失败。

 

分析约束影响

约束分析的几个方面:

1、 来自产品或运营人员的约束性需求

系统的非功能需求,例如:上线时间,预算,工期要求等

业务领域相关的限制,例如业务规则或业务限制,相关法律,专利等。

2、 来自用户的约束性需求

系统的用户,同样会产生约束性需求,比如用户的计算机水平,年龄段,使用偏好,国家等。

例如用户计算机水平整体较弱的话,在开发交互方式时就不应太过复杂,同时要兼顾系统的鲁棒性,防止系统被用户搞挂。

用户使用产品时的外部环境同样可能产生约束条件,比如访问环境是内网或是外网,则决定了系统提供访问链接不同的网络权限。访问环境信号强度若,则系统的性能要求则更高。

3、 来自开发或运维人员的约束性需求

开发团队的技术水平,磨合程度,同样制约着系统的开发,如果开发人员均是高级研发人员且对当前技术栈有深入的了解,则开发进度就会更快,如果是新团队,且需要对技术栈进行学习才可以介入开发,则在工期或系统风险层面需要额外考虑。

4、 业界当前技术环境

当前技术环境中间件的成熟程度,编程语言及流行度,优缺点等,都会对架构设计产生约束条件。

约束的分类:

1、 直接约束

例如:系统运行于 linux 平台。

2、 转换为功能需求的约束

对于这种约束,可以直接转换为功能需求

例如:供应商拥有自己的一套城市信息表 -> 引出的功能需求:需要进行城市转换

例如:供应商服务器性能差,tps 最大 10 -> 引出的功能需求:需要进行限流请求

3、 转换为质量属性需求的约束

例如:系统使用者计算机水平不高

转换为质量属性:易用性(否则不会用),鲁棒性(系统被搞瘫)

确定关键质量

系统的关键质量是需要进行取舍的,需要确认业务人员更注重那方面或在满足需求的基础上,确定哪些是必须的,哪些是可以适当忽略的。

我们需要首先确定架构重点支持哪些质量属性,然后对于相互矛盾的质量属性,进行权衡折中。例如当满足性能这个质量属性时,同时就会因为引入新的方案或组件,导致可维护性,可测试性降低;提高可拓展性时,就会对系统的性能和安全性产生影响等等,我们需要做的,就是在各个关键质量中进行取舍。

 

确定关键功能

确定关键功能的 4 个方面

1、 核心功能

2、 必做功能

3、 高风险功能

4、 独特功能

其他常见系统不存在的功能

注意衍生需求:

从需求转入设计时,因方案制定过程的复杂,会产生大量的衍生需求,衍生需求是原始需求的数倍。

举例:

原始需求:定时拉取供应商数据。

衍生需求:

1、 由于供应商数量较多,需要引入分布式定时任务,集群并发拉取

2、 由于供应商数据量大,需要分库分表设计

3、需要快速搜索,引入存储引擎组件等等

这些衍生需求我们必须要考虑,虽然业务需求没有体现,但缺失架构设计的关键影响因素。

架构驱动力对比:

业务需求驱动架构:

重大需求驱动架构:

由此可以看出,通过重大需求驱动的架构,更能考虑到更关键的部分,设计的架构更能满足需求的要求,架构设计成功的概率会更高。

概念架构阶段,对系统进行适当的分解,而不陷入细节

 

概念架构的过程是,先根据关键功能进行初步设计,然后对设计的系统进行高层分割,接下来考虑非功能性需求(关键质量和约束),然后修改自己的初步设计,循环往复,在不断的质疑和优化过程中,完善架构设计。

 

初步设计

初步设计的目标是发现职责,无需展开细节设计。基于关键功能,进行初步设计,基于主流程,关键流程,黄金流程等进行流转图设计,从而发现职责。

高层分割

切分复杂系统,为多个二级系统。或者直接切分为具体子系统。

高层分割的两种方式:

1、 系统切分

切分的考虑点,包括系统功能、部署环境、语言、系统规模等

例如一个大型系统,切分为订单,商品,供应链等系统。

2、 系统内切分

根据系统的职责、调用关系、通用性等,进行系统内部切分。

最常见的就是分层,例如一个系统,切分为网关层,服务层,搜索模块,man 端等。

分层的角度

1、 逻辑分层

逻辑分层重视职责的划分,职责直接常常是上层使用下层的关系,上层和下层,可以是分布在不同的机器,也可以分布在同一台机器。

2、 物理分层

分布在不同机器上的软件单元。

3、 通用性分层

通用性不同的,划分为不同的层,一般通用性越大,所处的层次越靠下。

考虑非功能需求

具体方法是:采用目标 - 场景 - 决策表,见下图:

架构设计是质疑驱动的,例如,质疑系统的可用性,考虑系统可能宕机,则引入集群部署设计,考虑下游接口可能超时或出现异常,则引入接口降级的设计等。

考虑场景的 5 个要素

1、 影响来源,来自系统内部还是系统外部

2、 如何影响的

3、 受影响的对象

4、 有什么问题或有什么价值

5、 所处的环境为何

对场景的权衡因素:

价值,代价,开发难度,出现几率。对于某些场景,经过全面的权衡和思考,可以不支持,并不是所有的场景都要支持,否则可能存在过度设计。

逻辑视图是对系统的不同部分职责的划分,根据职责不同,可以将系统进行细粒度的拆分,划分为多个子系统。

 

根据系统设计的需要,可以将系统的分层进行细化,例如展示层 -> 业务层 -> 数据层 可以细化为:展示层 -> 控制层 -> 接口层 -> 接口实现层 -> 数据层。

 

分区的概念是业务流程相关的,分区的依据是:职责,比如结算流程可以作为一个分区,下单流程可以作为一个分区。将系统划分为多个分区,一方面可以支持并行开发,另一方面也将系统划分为多个子域,有利于业务概念和业务流程的收敛。

机制是指系统可以抽象的公共部分,例如公共工具,公共组件,公共流程等,提取这些公共部分,对于架构设计是至关重要的。

划分子系统的原则:

1、 职责不同的单元,划分为不同的子系统

2、 通用性不同的单元,划分为不同的子系统

3、 需要不同开发技能的单元,划分为不同的子系统兼顾工作量,进一步切分太大的系统

开发视图

开发架构视图的任务,是将 “逻辑职责” 映射为 “程序单元”,例如:要自主编写的 “源程序”,可重用的库,框架等;同时进行开发技术选型,例如:开发语言,开发工具等,然后也需要确立程序单元间的关系,project 划分,目录结构,编译依赖关系等。

 

运行视图

运行架构设计的工作内容,是确定引入哪些控制流:进程,线程等;确定每条控制流的任务,同时还要处理相关问题,例如控制流的创建,销毁,通信机制等,控制流之间的同步关系,是否有资源争用,是否需要加锁等也需要考虑。

 

物理视图

物理架构设计的 3 项任务

1. 硬件的选择与物理拓扑

2. 软件到硬件的映射关系

3. 方案的优化

思维要点:“开销” 和 “争用” 是核心,应避免争用,降低开销。

数据视图

数据视图是系统的数据存储设计,根据对系统的分析,确定一种或多种数据策略,常见的数据分布策略如下 6 种:

1、独立的 Schema

不同系统应用,使用不同的数据 schema,数据完全独立,一般界限清晰的不同系统可以采用这种方式。

2、集中

不同的系统应用,使用同一个数据库,一般具有关联属性的应用可以采用这种方式,比如一个系统分为服务端和管理端,但都属于一个系统,则可以使用同一个数据库。

3、分区

水平分区

水平分区即我们常见的分表方案,当一个 schema 无法满足我们的数据量要求时,可以划分为多个分区,每个分区存储一部分数据。

垂直分区

垂直分区是分区策略的另外一个维度,当我们单库无法承载巨大的数据量时,也可以根据数据的类别,进行垂直分区。

 

4、复制

多个数据库保存相同的数据,根据制定的更新策略保证不同库之间的数据同步,我们常用的读写库分离,即为此方案,主库提供写能力,从库提供读能力,其中从库的数据是根据主库数据同步而来。

5、子集

根据一些特殊的场景要求,需要保存原数据的部分数据,例如 application1 保存全量订单,application2 只需要部分出票成功的订单,进行后续分析操作,则可以使用子集的策略进行数据视图设计。

6、重组

通过多个不同的 application 作为数据来源,异构至其他 application,用于数据的分析或后续流程使用。

 

总结

架构设计的三个阶段:预备架构阶段;概念架构阶段;细化架构阶段

架构设计的四个要素:需求结构化;分析约束的影响;确定关键质量;确定关键功能

概念架构的三个步骤:基于关键功能初步设计;系统高层分割;分析非功能需求

细化架构的五个视图:逻辑视图;开发视图;运行视图;物理视图;数据视图

一个贯穿环节:非功能需求的考虑

参考资料

1.《一线架构设计指南》

相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2025年3月3日 星期一 【蛇】己卯月辛未日 乙巳年 二月初四 全国爱耳日
您的IP:3.15.193.22,操作系统:未知操作系统,浏览器:未知浏览器
Copyright (C) 2000-2025 Lzhdim Software All Rights Reserved
点击右上角即可分享
微信分享提示