摘要:架構(gòu)的含義小石最近加入了一家生鮮電商公司。所以可以認(rèn)為所謂的框架就是確定了一些業(yè)內(nèi)規(guī)范,從某種程度上對大家形成約束或者形成都能理解的規(guī)定。沒有完美的架構(gòu)只有合適的架構(gòu)。
最近訂閱了一些架構(gòu)方面的資料,閱讀后獲益匪淺,想著整理一些自己的體會(huì)與思考,形成架構(gòu)方面的讀書筆記,一來與大家交流,二來通過文字的形式檢查自己到底收獲多少!
“我們系統(tǒng)是MVC架構(gòu)的”
“淘寶的架構(gòu)好屌”
“最近在學(xué)習(xí)MySQL的架構(gòu)”
“這個(gè)系統(tǒng)開發(fā)我們要用MVC框架來進(jìn)行開發(fā)”
-
我們常常聽到上面關(guān)于架構(gòu)的各種描述,那么架構(gòu)到底是指什么?系統(tǒng)、框架、架構(gòu)三者之間是一個(gè)什么樣的關(guān)系?下面讓我們結(jié)合實(shí)際的例子一起來探究下。
架構(gòu)的含義小石最近加入了一家生鮮電商公司。公司現(xiàn)在的首要任務(wù)是把電商系統(tǒng)給做出來,讓用戶能夠通過PC、App購買公司的生鮮產(chǎn)品。
關(guān)鍵詞:系統(tǒng),所謂系統(tǒng)可以簡單理解為我們平時(shí)所說的應(yīng)用,當(dāng)然系統(tǒng)可以包含多個(gè)小系統(tǒng),這里為了簡單起見,我們就先假設(shè)只開發(fā)這樣一個(gè)單體應(yīng)用,包含了用戶下單購買的基本功能。
小石通過分析其他電商系統(tǒng),知道至少需要 用戶注冊登錄模塊、用戶信息模塊、商品模塊、訂單模塊 系統(tǒng)才能夠進(jìn)行運(yùn)轉(zhuǎn)。
系統(tǒng)的功能確定了,該選擇用什么樣的語言進(jìn)行開發(fā)呢?選擇什么樣的方式進(jìn)行開發(fā)呢?與大家一起討論后,大家認(rèn)為現(xiàn)在階段的首要目標(biāo)是快速做出系統(tǒng)來,因此大家決定采用PHP來開發(fā),并決定使用 Yii2 框架,數(shù)據(jù)庫方面使用 MySQL,WebService使用Nginx。
關(guān)鍵詞:框架,為了快速完成系統(tǒng)的開發(fā),我們會(huì)采用一些已被業(yè)內(nèi)實(shí)踐確認(rèn)的規(guī)范來進(jìn)行,比如這里采用 YII2 框架,也就是采用了業(yè)內(nèi)的 MVC 規(guī)范。所以可以認(rèn)為所謂的框架就是確定了一些業(yè)內(nèi)規(guī)范,從某種程度上對大家形成約束或者形成都能理解的規(guī)定。
從開始到現(xiàn)在,還沒有寫一行代碼,一直在進(jìn)行設(shè)計(jì)與討論,討論需要哪些功能,設(shè)計(jì)采用什么 結(jié)構(gòu),而這里的結(jié)構(gòu)主要包括了兩方面:邏輯的結(jié)構(gòu)與物理的結(jié)構(gòu)。所謂邏輯結(jié)構(gòu)就是指系統(tǒng)是按照什么樣的流程來運(yùn)轉(zhuǎn),需要哪些功能來支持。所謂物理,就是當(dāng)編碼完成所有的邏輯后,系統(tǒng)采用什么形式來部署運(yùn)行。
那么到底什么是架構(gòu)呢?我理解的架構(gòu):在系統(tǒng)誕生之初,對系統(tǒng)進(jìn)行的邏輯設(shè)計(jì)與物理設(shè)計(jì)。他是系統(tǒng)的草圖,可以類比為建筑領(lǐng)域的設(shè)計(jì)圖。這張圖需要確定:
業(yè)務(wù)需要的功能模塊劃分(建筑設(shè)計(jì)需要?jiǎng)澐謪^(qū)域功能)
技術(shù)選型,用什么框架、什么存儲(chǔ)、什么緩存(建筑領(lǐng)域也要確認(rèn)框架結(jié)構(gòu)還是框剪結(jié)構(gòu))
架構(gòu)是進(jìn)化的一個(gè)架構(gòu)的0.1版本絕對不會(huì)是完美的,世界上也不存在完美的架構(gòu)。像上面的小故事,我們采用最簡單的架構(gòu),如下圖(物理角度):
我們把所有的功能寫在一份代碼里,所有的數(shù)據(jù)存在一個(gè)庫里,所有的代碼部署在同一個(gè)Nginx上,甚至還可能我們的Nginx、MySQL都部署在同一臺(tái)機(jī)器上。
公司業(yè)務(wù)得以發(fā)展,人員得以增加,系統(tǒng)變得更加復(fù)雜。這個(gè)時(shí)候原來的架構(gòu),一無法滿足業(yè)務(wù)快速發(fā)展,二無法讓多人開發(fā)變得愉快。因?yàn)閹资畟€(gè)人在同一份代碼里進(jìn)行編碼,想一下都是頭大。文件沖突、功能依賴、bug排查、測試功能,這些都無法愉快的解決。這時(shí)就得根據(jù)新的情況重新設(shè)計(jì)架構(gòu)。
我們將代碼功能進(jìn)行拆分,將以前的模塊拆分成獨(dú)立的系統(tǒng),將MySQL進(jìn)行主從設(shè)計(jì),利用Nginx做負(fù)載等等。
那么為什么不一上來就進(jìn)行拆分呢?因?yàn)橐婚_始人手不足,拆分過細(xì),開發(fā)周期慢,業(yè)務(wù)也不需要如此細(xì)致的劃分。
總結(jié)架構(gòu)是一個(gè)系統(tǒng)的草圖(邏輯+物理角度),它是有生命的,隨著業(yè)務(wù)的變化會(huì)不斷演進(jìn)。沒有完美的架構(gòu)只有合適的架構(gòu)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/11886.html
摘要:公司始于名為的平臺(tái)即服務(wù)供應(yīng)商??缍鄠€(gè)機(jī)器之間協(xié)調(diào)這些容器需要額外的工具,這稱之為容器編排。的核心優(yōu)勢是為應(yīng)用程序開發(fā)人員提供了用于編排無狀態(tài)容器的強(qiáng)大工具。有無數(shù)的文章都在討論和比較Docker、Kubernetes 以及Mesos。如果你是初學(xué)者,那么你可能會(huì)認(rèn)為這三個(gè)開源項(xiàng)目正為了稱霸容器界而殊死搏斗。雖然這三種技術(shù)都使得使用容器部署、管理和伸縮應(yīng)用成為可能,但實(shí)際上它們各自解決了不同...
摘要:缺點(diǎn)系統(tǒng)依賴復(fù)雜,給開發(fā)測試部署帶來不便,分布式數(shù)據(jù)一致性和分布式事務(wù)支持困難,一般通過最終一致性簡化解決。微服務(wù)架構(gòu)分成三種實(shí)現(xiàn)模式。事件驅(qū)動(dòng)架構(gòu)事件是狀態(tài)發(fā)生變化時(shí),軟件發(fā)出的通知。事件驅(qū)動(dòng)架構(gòu)的四個(gè)部分事件隊(duì)列接收事件的入口。 架構(gòu)的規(guī)劃誰架構(gòu)就是對系統(tǒng)中的實(shí)體以及實(shí)體之間的關(guān)系所進(jìn)行的抽象描述,是決策。...
摘要:前端中的計(jì)算機(jī)領(lǐng)域的通常認(rèn)為起源于。并對其主要內(nèi)容作了自己的解讀。搬到另一個(gè)地區(qū)會(huì)導(dǎo)致名氣降低。年度報(bào)告,年最受歡迎的編程語言年上最流行的種編程語言及前十最火熱的項(xiàng)目排行榜,分別由及登頂。技術(shù)周刊由小組出品,匯聚一周好文章,周刊原文。 showImg(https://segmentfault.com/img/bVWHC4?w=1000&h=710); 本期推薦 反擊爬蟲,前端工程師的腦...
摘要:在之前的叫,是新的,這次更新到架構(gòu)是一次重量級的核心架構(gòu)的替換,為了完成這次替換已經(jīng)準(zhǔn)備了兩三年的時(shí)間了。因此團(tuán)隊(duì)引入了異步渲染這個(gè)概念,而采用架構(gòu)可以實(shí)現(xiàn)這種異步渲染的方式。官方目前已經(jīng)把和標(biāo)記為,并使用新的生命周期函數(shù)和進(jìn)行替換。 Diff 算法 熟悉 react 的朋友都知道,在 react 中有個(gè)核心的算法,叫 diff 算法。web 界面由 dom 樹組成,不同的 dom 樹...
摘要:從根本上講,架構(gòu)師是一個(gè)技術(shù)領(lǐng)導(dǎo)者的角色,這就是最大的區(qū)別。對于這個(gè)問題來說,沒錯(cuò),有一些相關(guān)主題沒有出現(xiàn)在這本書中,這些主題可以構(gòu)成一本與程序員必讀之軟件架構(gòu)相互補(bǔ)的書。我從軟件架構(gòu)的視角特別能注意到這件事。 非商業(yè)轉(zhuǎn)載請注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/article/178034 Simon Brown 是全球知...
閱讀 1398·2021-09-04 16:40
閱讀 3512·2021-07-28 00:13
閱讀 2943·2019-08-30 11:19
閱讀 2667·2019-08-29 12:29
閱讀 3219·2019-08-29 12:24
閱讀 1169·2019-08-26 13:28
閱讀 2453·2019-08-26 12:01
閱讀 3500·2019-08-26 11:35