偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

80后聊架構(gòu):究竟怎么做架構(gòu)設(shè)計? | 架構(gòu)師之路

開發(fā) 架構(gòu) 系統(tǒng)
很多人確實上線了很多系統(tǒng),也確實做了很多需求,但基本上都是毫無方法,全憑自己想象的在做架構(gòu)設(shè)計??偟膩碚f,架構(gòu)設(shè)計有四個大的步驟,其中第二個步驟最容易被大家忽略。

相關(guān)文章:《80后聊架構(gòu):究竟什么是架構(gòu)設(shè)計? | 架構(gòu)師之路

做了多年架構(gòu)設(shè)計,很多人連架構(gòu)設(shè)計的關(guān)鍵流程和步驟都不知道。

很多人確實上線了很多系統(tǒng),也確實做了很多需求,但基本上都是毫無方法,全憑自己想象的在做架構(gòu)設(shè)計。

總的來說,架構(gòu)設(shè)計有四個大的步驟,其中第二個步驟最容易被大家忽略。

畫外音:別人寫文章,都說最后一個步驟最重要,我就是不按套路出牌,說第二個步驟最重要。

步驟一:理解需求以及定義系統(tǒng)邊界。

Understand the problem & Identify the scope of the system.

理解需求,核心是和產(chǎn)品確定功能要求,以及根據(jù)業(yè)務(wù)確定性能要求。

定義系統(tǒng)邊界,核心是要明確系統(tǒng)哪些要做,哪些不做。

步驟二:也就是最容易被忽略的一個步驟,調(diào)研已有的類似的系統(tǒng)。

Research on existing systems.

你做的系統(tǒng),是業(yè)內(nèi)首創(chuàng)嗎?如果不是,看看類似的系統(tǒng)是怎么做架構(gòu)設(shè)計的。參考成熟的方案,能讓你的架構(gòu)設(shè)計事半功倍。

步驟三:頂層設(shè)計。

high-level architecture design.

設(shè)計系統(tǒng)的主要組件,以及它們之間的交互方式。例如:

  • 使用機房,還是云?
  • 使用單體,還是微服務(wù)?
  • 要不要cache,要不要mq?
  • 用rdb,還是nosql?
  • ...

這里要包含系統(tǒng)架構(gòu)的粗略圖,以及實現(xiàn)核心需求的流程圖。

步驟四:也是非常重要的一個步驟啊,解決主要矛盾迭代設(shè)計。

Refine the design.

(1) 頂層設(shè)計完之后,哪里是系統(tǒng)的主要矛盾?

我們要根據(jù)潛在的主要矛盾,細(xì)化與迭代頂層設(shè)計。

例如:你要做一個計數(shù)系統(tǒng),對推文的閱讀,轉(zhuǎn)發(fā),點贊,評論數(shù)進(jìn)行計數(shù)。

(2) 假如主要矛盾如果是并發(fā),1秒10萬次?

那可能就要加入一些樂觀鎖,異步,批量請求,Copy On Write等巧妙設(shè)計,甚至犧牲一些一致性。

(3) 假如主要矛盾是一致性,不允許數(shù)據(jù)出錯?

那可能就要加入一些互斥,校驗,write-ahead logging等巧妙設(shè)計。

迭代設(shè)計,解決完一個主要矛盾,繼續(xù)解決次要矛盾,直到所有的功能需求與性能需求得到滿足。

這里面有個地方要注意:在第四步迭代設(shè)計的過程中,有可能會發(fā)現(xiàn)第三步頂層設(shè)計的缺陷。這個時候,可能要優(yōu)化甚至推翻第三步頂層設(shè)計。

這也是為什么,一些系統(tǒng)運行了幾年,就要進(jìn)行重構(gòu)。當(dāng)初的頂層設(shè)計已經(jīng)滿足不了現(xiàn)有的業(yè)務(wù)需求了。在原有頂層設(shè)計基礎(chǔ)上,解決不了主要矛盾了,那就重構(gòu)頂層設(shè)計來解決。

這也是我非常推崇的兩大核心架構(gòu)設(shè)計理念:

  • 其一,任何脫離業(yè)務(wù)的架構(gòu)設(shè)計都是耍流氓;
  • 其二,架構(gòu)不只是設(shè)計而來的,更是迭代與演進(jìn)而來的;

這兩個架構(gòu)理念,我會在接下來的100個架構(gòu)知識點里反復(fù)提及。

咱們舉個例子。

假如業(yè)務(wù)需求是:“我想做一個1萬屬性,100億數(shù)據(jù),每秒10萬吞吐的分類信息平臺,像58同城一樣,2個月實現(xiàn)”。

(4) 如何來做架構(gòu)設(shè)計呢?

第一步,探究功能需求,性能需求,確定系統(tǒng)邊界。

分類信息的特點是什么?

招聘、房產(chǎn)、二手、二手車、黃頁... 品類繁多,帖子schema不固定...

分類信息的典型場景是什么?

帖子發(fā)布,帖子瀏覽,帖子搜索(每個屬性都可能被搜索)...

需求的性能要求是什么?

數(shù)據(jù)量巨大,吞吐量巨大,用戶實時訪問,請求延時敏感...

第二步,調(diào)研類似系統(tǒng)的方案。

國外信息分類做得最好的應(yīng)該是 Craigslist 了,網(wǎng)上調(diào)研一些相關(guān)的資料,可以了解到,其核心的一些關(guān)鍵設(shè)計點:

①如何品類擴展?

服務(wù)垂直拆分,數(shù)據(jù)垂直拆分...

②如何擴展屬性?

利用 MongoDB 的 schema-free 特性...

③如何實現(xiàn)搜索?

早期利用 MongoDB 的索引,后期利用搜索服務(wù)...

④如何應(yīng)對大數(shù)據(jù)量,高并發(fā)量?

數(shù)據(jù)水平切分,邏輯處理服務(wù)化,集群化,緩存降低數(shù)據(jù)庫壓力...

總之,通過調(diào)研,對已有的方案有個初步的了解。

第三步,架構(gòu)頂層設(shè)計。

宏觀上,結(jié)合 Craigslist 的一些成熟實踐:

  • 業(yè)務(wù)垂直拆分;
  • 微服務(wù)分層,集群化;
  • 數(shù)據(jù)庫水平切分;
  • 緩存降壓;
  • ...

大的方向基本就能把握住。

第四步,根據(jù)主要矛盾迭代設(shè)計。

① 主要矛盾1:多品類帖子數(shù)據(jù)的分開存儲,使得核心業(yè)務(wù)流程及其復(fù)雜,怎么解?

潛在方案:統(tǒng)一帖子中心服務(wù)IMC(Info Management Center)。

② 主要矛盾2:多品類帖子屬性的分級,擴展與校驗,怎么解?

潛在方案:統(tǒng)一分類管理服務(wù)CMC(Category Management Center)。

③ 主要矛盾3:大數(shù)據(jù)量,高并發(fā),跨品類的多屬性搜索,怎么解?

潛在方案:統(tǒng)一信息檢索服務(wù)E-search。

這里,是一個架構(gòu)設(shè)計過程的案例演示,主要用以說明設(shè)計流程。具體“1萬屬性,100億數(shù)據(jù),每秒10萬吞吐的分類信息平臺”的設(shè)計細(xì)節(jié),詳見后文的補充閱讀資料。

回歸今日話題,架構(gòu)設(shè)計的四大步驟:

  • 其一,理解需求以及定義系統(tǒng)邊界;
  • 其二,調(diào)研已有的類似的系統(tǒng);
  • 其三,頂層設(shè)計,定義核心組件與交互;
  • 其四,針對主要矛盾迭代設(shè)計;

有人問,第二步借鑒已有成熟系統(tǒng)的方案,在別的架構(gòu)設(shè)計方法中,沒有看到過這個步驟呀?莫不是搞笑的吧。

我非常嚴(yán)肅地聲明,這個步驟非常重要,調(diào)研一定要多花時間。不行的程序員,看誰的代碼都是屎;不行的架構(gòu)師才會認(rèn)為,我的方案最牛逼,別人的方案都是屎,但其實,自己原創(chuàng)的大部分方案才是屎。

保持開放的心態(tài),借鑒優(yōu)秀的方案,是優(yōu)秀架構(gòu)師的核心品質(zhì)。

“借鑒”這一點,任何不接地氣的架構(gòu)方法,都不會有人說。

補充閱讀材料

上述案例架構(gòu)設(shè)計方案細(xì)節(jié),詳見:《1萬屬性,100億數(shù)據(jù),每秒10萬吞吐,架構(gòu)如何設(shè)計?

責(zé)任編輯:趙寧寧 來源: 架構(gòu)師之路
相關(guān)推薦

2024-11-13 06:03:45

架構(gòu)設(shè)計架構(gòu)系統(tǒng)

2024-11-14 07:30:00

架構(gòu)吞吐量

2023-08-20 12:21:18

軟件開發(fā)架構(gòu)設(shè)計

2024-11-22 10:49:46

2024-11-14 15:00:00

線程架構(gòu)吞吐量

2018-11-23 09:52:24

架構(gòu)設(shè)計架構(gòu)師

2018-07-03 15:46:24

Java架構(gòu)師源碼

2021-10-25 09:41:04

架構(gòu)運維技術(shù)

2019-07-23 18:15:26

技術(shù)大數(shù)據(jù)數(shù)據(jù)庫

2013-04-19 15:12:17

架構(gòu)師WEB架構(gòu)師

2018-11-28 09:38:34

微服務(wù)架構(gòu)API

2020-05-15 08:38:33

架構(gòu)師高級開發(fā)互聯(lián)網(wǎng)

2009-02-23 11:18:06

J2EE架構(gòu)師Java

2018-02-06 09:58:48

架構(gòu)師MVCiOS

2022-06-15 10:04:51

存儲選型MySQL

2020-11-25 09:56:48

架構(gòu)運維技術(shù)

2020-07-28 08:36:54

數(shù)據(jù)安全數(shù)據(jù)泄露數(shù)據(jù)

2021-04-27 09:35:36

業(yè)務(wù)領(lǐng)域建模

2009-03-10 15:30:51

測試架構(gòu)師軟件測試職場

2015-06-10 11:22:41

云計算云架構(gòu)師
點贊
收藏

51CTO技術(shù)棧公眾號