技術(shù)架構(gòu)的戰(zhàn)略和戰(zhàn)術(shù)原則_第1頁(yè)
技術(shù)架構(gòu)的戰(zhàn)略和戰(zhàn)術(shù)原則_第2頁(yè)
技術(shù)架構(gòu)的戰(zhàn)略和戰(zhàn)術(shù)原則_第3頁(yè)
技術(shù)架構(gòu)的戰(zhàn)略和戰(zhàn)術(shù)原則_第4頁(yè)
技術(shù)架構(gòu)的戰(zhàn)略和戰(zhàn)術(shù)原則_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、技術(shù)架構(gòu)的戰(zhàn)略和戰(zhàn)術(shù)原則技術(shù)架構(gòu),是將產(chǎn)品需求轉(zhuǎn)變?yōu)榧夹g(shù)實(shí)現(xiàn)的過(guò)程。技術(shù)架構(gòu)解決的問(wèn)題包括了如何進(jìn)行純技術(shù)層面的分層、開發(fā)框架選擇、語(yǔ)言選擇(這里以JAVA語(yǔ)言為主)、涉及到各自非功能性需求的技術(shù)點(diǎn)(安全、性能、大數(shù)據(jù))。技術(shù)架構(gòu)是確定組成應(yīng)用系統(tǒng)實(shí)際運(yùn)行的技術(shù)組件、技術(shù)組件之間的關(guān)系,以及部署到硬件的策略。技術(shù)架構(gòu)面臨最大的挑戰(zhàn)是“不確定性”。在技術(shù)架構(gòu)上,很多時(shí)候就會(huì)面臨這種選擇。是要選擇業(yè)界最新的技術(shù)?還是選擇團(tuán)隊(duì)最熟悉的技術(shù)?如果選擇最新的技術(shù),遇到新技術(shù)出了問(wèn)題怎么解決?如果選擇目前熟悉的技術(shù),后續(xù)技術(shù)演進(jìn)怎么辦?這些都是架構(gòu)師在做技術(shù)架構(gòu)過(guò)程中需要考慮的。業(yè)務(wù)在千變?nèi)f化、技術(shù)在層出

2、不窮,沒有一套通用的技術(shù)架構(gòu)模式來(lái)適用所有的系統(tǒng)。那么,我們?nèi)绾伪WC在做技術(shù)架構(gòu)時(shí),能夠?qū)崿F(xiàn)一個(gè)穩(wěn)定、出色的系統(tǒng)。面對(duì)這些“不確定性”時(shí)的架構(gòu)設(shè)計(jì)問(wèn)題,這里從戰(zhàn)略和戰(zhàn)術(shù)兩個(gè)層面來(lái)提供一些設(shè)計(jì)原則。戰(zhàn)略層提供的是技術(shù)架構(gòu)的方法和思路,屬于頂層設(shè)計(jì);戰(zhàn)術(shù)層提供的是技術(shù)架構(gòu)的技術(shù)實(shí)踐方式,更偏向詳細(xì)設(shè)計(jì)。戰(zhàn)略層設(shè)計(jì)原則戰(zhàn)略層的設(shè)計(jì)原則就是:合適原則、簡(jiǎn)單原則、演化原則。合適原則技術(shù)人員有一種很強(qiáng)的技術(shù)情懷,就是在做設(shè)計(jì)的過(guò)程中,很希望挑戰(zhàn)新的技術(shù)、在項(xiàng)目中采用最新的框架、或者自己重造一個(gè)比業(yè)界的還要牛的輪子。這樣才能夠顯示出自己的優(yōu)秀,以至于不讓自己顯的那么平庸。比如,在項(xiàng)目中重新造一個(gè)能夠解決億萬(wàn)

3、級(jí)數(shù)據(jù)的新的xx流式計(jì)算技術(shù),比f(wàn)link還要牛一百倍;有或者在項(xiàng)目中使用最新的xx技術(shù),能讓系統(tǒng)承擔(dān)億級(jí)用戶的訪問(wèn)。那么現(xiàn)實(shí)是,如果在設(shè)計(jì)過(guò)程中一味追求新技術(shù),往往失敗的可能性很高。沒有那么多人,卻想干那么多活現(xiàn)實(shí)環(huán)境中我們一個(gè)業(yè)務(wù)團(tuán)隊(duì)可能就十幾個(gè)人,項(xiàng)目工期短、上線要求快。在這種情況下,如果還要抽調(diào)幾個(gè)人去研究、搭建、維護(hù)新的技術(shù)框架,對(duì)于項(xiàng)目勢(shì)必會(huì)造成延期的影響。1.沒有那么多積累,卻想一步登天很多業(yè)界領(lǐng)先的方案,不是一幫優(yōu)秀的開發(fā)加在一起,加班加點(diǎn)就能做出來(lái)的。而是經(jīng)過(guò)幾年時(shí)間的發(fā)展才逐步完善和初具規(guī)模。如果我們也想自己做一套類似的技術(shù),不是說(shuō)不可能。我們需要集合當(dāng)下的技術(shù)實(shí)力、技術(shù)積

4、累,做出適合自己團(tuán)隊(duì)情況的技術(shù)評(píng)估。1.沒有最新,只要最合適所有新的技術(shù)剛出來(lái)都是打著比舊技術(shù)擁有更加出色的性能、提供更加優(yōu)秀的擴(kuò)展性。是不是使用新技術(shù),就能解決一切問(wèn)題了?新技術(shù)的出道,勢(shì)必是解決某一場(chǎng)景下的問(wèn)題,并不是一味萬(wàn)能良藥。只有了解清楚每種技術(shù)的產(chǎn)生背景,適用場(chǎng)景,才能出一個(gè)對(duì)自己項(xiàng)目最優(yōu)的選擇。技術(shù)選型沒有最新,只有最合適??偨Y(jié)一下,合適原則就是適合優(yōu)于業(yè)界領(lǐng)先。簡(jiǎn)單原則我們總是希望能將我們的軟件設(shè)計(jì)的精美、宏大,這樣才能彰顯我們系統(tǒng)的復(fù)雜度和難度。我們是不是會(huì)遇到這樣的場(chǎng)景,在做設(shè)計(jì)方案的時(shí)候,如果一個(gè)解決方案很簡(jiǎn)單,而且能很快的滿足需求。在評(píng)審方案時(shí),就會(huì)有人覺得這個(gè)方案是不

5、是太簡(jiǎn)單了,沒有什么技術(shù)含量,是不是需要再設(shè)計(jì)的復(fù)雜一點(diǎn)。系統(tǒng)是不是一定要設(shè)計(jì)的復(fù)雜?在回答這個(gè)問(wèn)題前,我們先看下軟件領(lǐng)域的結(jié)構(gòu)復(fù)雜性和邏輯復(fù)雜性。(1)結(jié)構(gòu)復(fù)雜性結(jié)構(gòu)復(fù)雜的系統(tǒng)有兩個(gè)特點(diǎn):第一,組成的組件數(shù)量很多;第二,這些組件之間的關(guān)系很復(fù)雜。結(jié)構(gòu)上的復(fù)雜性存在的第一個(gè)問(wèn)題是,組件越多,就越有可能其中某個(gè)組件出現(xiàn)故障,從而導(dǎo)致系統(tǒng)故障。假設(shè)組件的故障概率是1%(有1%的時(shí)間不可用),那么2個(gè)組件的系統(tǒng)可用性是99%*99%=98%,5個(gè)組件的系統(tǒng)可用性是99%*99%*99%*99%*99%=95%,兩者相差3%。說(shuō)明組件越多,系統(tǒng)穩(wěn)定性就越差。結(jié)構(gòu)上的復(fù)雜性存在的第二個(gè)問(wèn)題是,某個(gè)組件改

6、動(dòng),會(huì)影響關(guān)聯(lián)的組件。比如上圖中C組件發(fā)生改動(dòng),會(huì)影響A、B、D,而A有會(huì)影響E。這樣就會(huì)形成一連串的多比諾效應(yīng)。2)邏輯復(fù)雜性意識(shí)到結(jié)構(gòu)復(fù)雜性的問(wèn)題后,只要減少組件就能讓系統(tǒng)結(jié)構(gòu)變簡(jiǎn)單?這樣做還是行不通,原因在于除了結(jié)構(gòu)的復(fù)雜性,還有邏輯的復(fù)雜性,如果一個(gè)組件的邏輯太復(fù)雜,通用會(huì)帶來(lái)問(wèn)題。我們?cè)囅胍幌?,把淘寶的所有功能都在一個(gè)組件中實(shí)現(xiàn),可以想象這個(gè)系統(tǒng)要有多龐大:幾百人維護(hù)一個(gè)系統(tǒng)、代碼分支幾十個(gè)、需求變更應(yīng)接不暇、不同分支的回歸測(cè)試、修改一段代碼可能影響整個(gè)系統(tǒng)的運(yùn)行等等。這些場(chǎng)景相信大家都不希望看到的??偨Y(jié)一下,簡(jiǎn)單原則就是大道至簡(jiǎn)。演化原則軟件架構(gòu)和建筑架構(gòu)很多相同的地方,架構(gòu)這個(gè)詞

7、也是從建筑領(lǐng)域借鑒過(guò)來(lái)的。比如,軟件架構(gòu)描述的是系統(tǒng)的結(jié)構(gòu)、以及各模塊之間的關(guān)系。而建筑結(jié)構(gòu)描述的是一幢建筑的結(jié)構(gòu),以及建筑內(nèi)部各部件如何有機(jī)的組成。但是,軟件架構(gòu)和建筑架構(gòu)有一個(gè)本質(zhì)上的差異:那就是建筑一旦完成就不會(huì)再變,而軟件卻需要根據(jù)業(yè)務(wù)的發(fā)展不斷的變化。對(duì)于建筑來(lái)說(shuō),永恒是主題;而對(duì)于軟件來(lái)說(shuō),變化才是主題。如果沒有意識(shí)到“軟件架構(gòu)需要根據(jù)業(yè)務(wù)發(fā)展不斷變化”這個(gè)本質(zhì),在做架構(gòu)設(shè)計(jì)的時(shí)候很容易陷入一個(gè)誤區(qū):試圖一步到位設(shè)計(jì)一個(gè)軟件架構(gòu),期望不管業(yè)務(wù)如何變化,架構(gòu)都穩(wěn)如磐石。如果是按照這樣的目標(biāo)是設(shè)計(jì),一開始上來(lái)就做出一套看似是終極的方案,投入龐大的資源做各種預(yù)測(cè)、分析。結(jié)果是投入巨大的資

8、源、開發(fā)周期漫長(zhǎng),最終跌跌撞撞落地的系統(tǒng),卻發(fā)現(xiàn)已經(jīng)無(wú)法很好的滿足現(xiàn)有的業(yè)務(wù)。所以技術(shù)架構(gòu)設(shè)計(jì)需要一個(gè)過(guò)程:首先,要滿足當(dāng)前的業(yè)務(wù)需求進(jìn)行技術(shù)架構(gòu)設(shè)計(jì)其次,架構(gòu)要不斷地在實(shí)際應(yīng)用過(guò)程中迭代,保留優(yōu)秀的設(shè)計(jì),修復(fù)有缺陷的設(shè)計(jì),改正錯(cuò)誤的設(shè)計(jì),去掉無(wú)用的設(shè)計(jì),使架構(gòu)逐漸完善。第三,當(dāng)業(yè)務(wù)發(fā)生變化時(shí),架構(gòu)要擴(kuò)展、重構(gòu)、甚至重寫;代碼也許會(huì)重寫,但有價(jià)值的經(jīng)驗(yàn)、教訓(xùn)、邏輯、設(shè)計(jì)卻可以在新架構(gòu)中延續(xù)??偨Y(jié)一下,演化原則就是演化優(yōu)于一步到位。戰(zhàn)術(shù)層設(shè)計(jì)原則戰(zhàn)術(shù)層的設(shè)計(jì)原則分為3部分:高并發(fā)原則、高可用原則、業(yè)務(wù)設(shè)計(jì)原則。這些原則是對(duì)技術(shù)架構(gòu)設(shè)計(jì)過(guò)程中提供詳細(xì)的指導(dǎo)思路,幫助你做技術(shù)選型、技術(shù)拆分。2.1高

9、并發(fā)原則設(shè)計(jì)高并發(fā)的系統(tǒng),需要考慮以下幾個(gè)方面的設(shè)計(jì):無(wú)狀態(tài)、拆分、服務(wù)化、消息隊(duì)列、數(shù)據(jù)異構(gòu)、緩存。(1)無(wú)狀態(tài)無(wú)狀態(tài)應(yīng)用,便于水平擴(kuò)展。有狀態(tài)配置可通過(guò)配置中心實(shí)現(xiàn)無(wú)狀2)拆分系統(tǒng)維度:按照系統(tǒng)功能、業(yè)務(wù)拆分,比如購(gòu)物車、結(jié)算、訂單等。功能維度:對(duì)系統(tǒng)功能再做細(xì)粒度拆分。讀寫維度:根據(jù)讀寫比例特征拆分;讀多,可考慮多級(jí)緩存;寫多,可考慮分庫(kù)分表。AOP維度:根據(jù)訪問(wèn)特征,按照AOP進(jìn)行拆分.模塊維度:對(duì)整體代碼結(jié)構(gòu)劃分web、service、dao。(3)服務(wù)化服務(wù)化演進(jìn):進(jìn)程內(nèi)服務(wù)-單機(jī)遠(yuǎn)程服務(wù)-集群手動(dòng)注冊(cè)服務(wù)-自動(dòng)注冊(cè)和發(fā)現(xiàn)服務(wù)-服務(wù)的分組、隔離、路由-服務(wù)治理??紤]服務(wù)分組、隔離、

10、限流、黑白名單、超時(shí)、重試機(jī)制、路由、故障補(bǔ)償?shù)取?)消息隊(duì)列目的:服務(wù)解耦(一對(duì)多消費(fèi))、異步處理、流量削峰緩沖等。大流量緩沖:犧牲強(qiáng)一致性,保障最終一致性。數(shù)據(jù)校對(duì):解決異步消息機(jī)制下消息丟失問(wèn)題。5)數(shù)據(jù)異構(gòu)數(shù)據(jù)異構(gòu):通過(guò)消息隊(duì)列機(jī)制接受數(shù)據(jù)變更,原子化存儲(chǔ)。數(shù)據(jù)閉環(huán):屏蔽多重?cái)?shù)據(jù)來(lái)源,將數(shù)據(jù)異構(gòu)存儲(chǔ),形成閉環(huán)。(6)緩存用戶層:DNS緩存、瀏覽器DNS緩存、操作系統(tǒng)DNS緩存、本地DNS服務(wù)商緩存、DNS服務(wù)器緩存、客戶端緩存、瀏覽器緩存、APP客戶端緩存。代理層:CDN緩存(一般基于ATS、Varnish、Nginx、Squid等構(gòu)建,邊緣節(jié)點(diǎn)-二級(jí)節(jié)點(diǎn)-中心節(jié)點(diǎn)-源站)接入層:Ng

11、inx的Proxy_cache代理緩存,或者Nginx+Lua+Redis做業(yè)務(wù)數(shù)據(jù)緩存。應(yīng)用層:頁(yè)面靜態(tài)化、業(yè)務(wù)數(shù)據(jù)緩存(Redis/Memcache/本地文件等)、消息隊(duì)列數(shù)據(jù)層:NoSQL(Redis、Memcache、SSDB等)2.2高可用原則1.降級(jí)降級(jí)開關(guān)集中化管理:將開關(guān)配置信息推送到各個(gè)應(yīng)用??山导?jí)的多級(jí)讀服務(wù):如服務(wù)調(diào)用降級(jí)為只讀本地緩存。開關(guān)前置化:如Nginx+Lua配置降級(jí)策略,引流流量;可基于此做灰度策略。業(yè)務(wù)降級(jí):高并發(fā)下,保證核心功能,次要功能可由同步改為異步策略或屏蔽功能。限流目的:防止惡意請(qǐng)求攻擊或超過(guò)系統(tǒng)峰值惡意請(qǐng)求流量只訪問(wèn)到Cache穿透后端應(yīng)用的流量

12、Nginx的limit處理惡意Ip使用NginxDeny策略或者iptables拒絕可回滾發(fā)布版本失敗時(shí),可隨時(shí)快速回退到上一個(gè)穩(wěn)定版本。2.3業(yè)務(wù)設(shè)計(jì)原則防重設(shè)計(jì)幕等設(shè)計(jì)流程定義狀態(tài)與狀態(tài)機(jī)后臺(tái)系統(tǒng)操作可反饋后臺(tái)系統(tǒng)審批化文檔注釋備份技術(shù)架構(gòu)圖技術(shù)架構(gòu)圖是將系統(tǒng)的技術(shù)方案、技術(shù)選型通過(guò)視圖的方式進(jìn)行展現(xiàn)。技術(shù)架構(gòu)圖分為兩類:一類,功能需求技術(shù)架構(gòu)圖(邏輯架構(gòu)圖),是描繪如何通過(guò)技術(shù)組件來(lái)實(shí)現(xiàn)系統(tǒng)產(chǎn)品功能的圖。另一來(lái),非功能需求技術(shù)架構(gòu)圖(物理架構(gòu)圖),是描繪如何通過(guò)物理部署的來(lái)實(shí)現(xiàn)系統(tǒng)運(yùn)行的圖。3.1邏輯架構(gòu)圖功能需求技術(shù)架構(gòu)圖以產(chǎn)品架構(gòu)圖和應(yīng)用架構(gòu)圖為基礎(chǔ)。實(shí)現(xiàn)每個(gè)功能點(diǎn)需要使用什么技術(shù)、

13、技術(shù)實(shí)現(xiàn)邏輯如何,就提現(xiàn)在技術(shù)架構(gòu)圖上。功能需要技術(shù)架構(gòu)圖繪制可以按照“整體-局部-整體”的思路實(shí)現(xiàn)。1.整體首先可以按照應(yīng)用架構(gòu)圖的應(yīng)用分布得到應(yīng)用分布框架。如下:I風(fēng)I蚓華I軸犯準(zhǔn)實(shí)磚濰贈(zèng)能!4aar,M:nnA1_諦料!處置中*心事件itl1111i2.局部0則以心i在整體框架的基礎(chǔ)上,對(duì)每一個(gè)局部的子系統(tǒng)進(jìn)行詳細(xì)的技術(shù)實(shí)現(xiàn)的表達(dá)。子系統(tǒng)的技術(shù)架構(gòu)圖中需要展示每個(gè)子系統(tǒng)使用的技術(shù)組件,比如(緩存技術(shù)、消息中間件、流程引擎、流式計(jì)算框架等等)。同時(shí),這些技術(shù)組件是如何實(shí)現(xiàn)業(yè)務(wù)功能,需要清晰的展示技術(shù)實(shí)現(xiàn)邏輯。下圖是對(duì)風(fēng)控系統(tǒng)中的實(shí)時(shí)引擎、離線引擎、準(zhǔn)實(shí)時(shí)引擎三個(gè)子系統(tǒng)的進(jìn)行的技術(shù)架構(gòu)。在實(shí)

14、時(shí)引擎中,主要使用RuleEngine(規(guī)則引擎)作為技術(shù)特點(diǎn),這里就重點(diǎn)列出RuleEngine。準(zhǔn)實(shí)時(shí)引擎使用Blink作為流計(jì)算的技術(shù)框架,并概要的展示了計(jì)算邏輯。II撲民佝ZDB粥引IF腰旳引舉iteEngineOOPS財(cái)和*msci*爐湧弓r】革層F.fdlKEDBD2(i業(yè)靈強(qiáng)遡艦cpensesic-m.SM也心在完成每個(gè)子系統(tǒng)的技術(shù)實(shí)現(xiàn)后,最終進(jìn)行一次整合,繪制一張總體的系統(tǒng)技術(shù)架構(gòu)圖。各子系統(tǒng)之間通過(guò)服務(wù)接口、數(shù)據(jù)庫(kù)、緩存或消息中間等技術(shù)實(shí)現(xiàn)數(shù)據(jù)交互,以此將打通各個(gè)子系統(tǒng),實(shí)現(xiàn)最終整個(gè)產(chǎn)品從數(shù)據(jù)、技術(shù)的串聯(lián)。Id5:TTII撲民佝ZII撲民佝Z*IiIIIIllIRuleEngiBsourceiiBndr:ivratbni50UKE異常方件DE爭(zhēng)跡自訓(xùn)*塔蒯litII撲民佝ZII撲民佝Z物理架構(gòu)偏重于網(wǎng)絡(luò)設(shè)計(jì)統(tǒng)在物理上是如何部署。行時(shí)的組織情況。從物理集群設(shè)計(jì)、中間件設(shè)計(jì)、上是如何部署。織情兄。從物理勺圖中,我們能,IDa0地拠帕如:I(硬件的設(shè)計(jì)架構(gòu)。非功能需求的技術(shù)架構(gòu)圖重點(diǎn)在于展示企業(yè)系間的關(guān)系以及他們的部署策略。物理架構(gòu)反映出軟件系統(tǒng)動(dòng)態(tài)運(yùn)、流量訪問(wèn)、數(shù)據(jù)流轉(zhuǎn)、數(shù)據(jù)存儲(chǔ)到技術(shù)組件的運(yùn)轉(zhuǎn)。*昨-宦時(shí)礦砸苗::*煙卜起fffiS*DB3.2物NgnxNgir:;我們從架構(gòu)的本質(zhì)開始,分別對(duì)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論