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