一個程序員對架構的認識

架構是一個系統的草圖(邏輯+物理角度),它是有生命的,隨著業務的變化會不斷演進。沒有完美的架構只有合適的架構。

最近訂閱了一些架構方面的資料,閱讀後獲益匪淺,想著整理一些自己的體會與思考,形成架構方面的讀書筆記,一來與大家交流,二來通過文字的形式檢查自己到底收穫多少!

“我們系統是MVC架構的”

“淘寶的架構好屌”

“最近在學習MySQL的架構”

“這個系統開發我們要用MVC框架來進行開發”

我們常常聽到上面關於架構的各種描述,那麼架構到底是指什麼?系統、框架、架構三者之前是一個什麼樣的關係?下面讓我們結合實際的例子一起來探究下。

架構的含義

小石最近加入了一家生鮮電商公司。公司現在的首要任務是把電商系統給做出來,讓用戶能夠通過PC、App購買公司的生鮮產品。

關鍵詞: 系統 ,所謂系統可以簡單理解為我們平時所說的應用,當然系統可以包含多個小系統,這裡為了簡單起見,我們就先假設只開發這樣一個單體應用,包含了用戶下單購買的基本功能。

小石通過分析其他電商系統,知道至少需要 用戶註冊登錄模塊用戶信息模塊商品模塊訂單模塊 系統才能夠進行運轉。

系統的功能確定了,該選擇用什麼樣的語言進行開發呢?選擇什麼樣的方式進行開發呢?與大家一起討論後,大家認為現在階段的首要目標是快速做出系統來,因此大家決定採用PHP來開發,並決定使用 Yii2 框架,數據庫方面使用 MySQL,WebService使用Nginx。

關鍵詞: 框架 ,為了快速完成系統的開發,我們會採用一些已被業內實踐確認的規範來進行,比如這裡採用 YII2 框架,也就是採用了業內的 MVC 規範。所以可以認為所謂的框架就是確定了一些業內規範,從某種程度上對大家形成約束或者形成都能理解的規定。

從開始到現在,還沒有寫一行代碼,一直在進行設計與討論,討論需要哪些功能,設計採用什麼

結構 ,而這裡的結構主要包括了兩方面:邏輯的結構與物理的結構。所謂邏輯結構就是指系統是按照什麼樣的流程來運轉,需要哪些功能來支持。所謂物理,就是當編碼完成所有的邏輯後,系統採用什麼形式來部署運行。

那麼到底什麼是架構呢?我理解的架構:在系統誕生之初,對系統進行的邏輯設計與物理設計。他是系統的草圖,可以類比為建築領域的設計圖。這張圖需要確定:

  • 業務需要的功能模塊劃分(建築設計需要劃分區域功能)
  • 技術選型,用什麼框架、什麼存儲、什麼緩存(建築領域也要確認框架結構還是框剪結構)

架構是進化的

一個架構的0.1版本絕對不會是完美的,世界上也不存在完美的架構。像上面的小故事,我們採用最簡單的架構,如下圖(物理角度):

一個程序員對架構的認識

我們把所有的功能寫在一份代碼裡,所有的數據存在一個庫裡,所有的代碼部署在同一個Nginx上,甚至還可能我們的Nginx、MySQL都部署在同一臺機器上。

公司業務得以發展,人員得以增加,系統變得更加複雜。這個時候原來的架構,一無法滿足業務快速發展,二無法讓多人開發變得愉快。因為幾十個人在同一份代碼裡進行編碼,想一下都是頭大。文件衝突、功能依賴、bug排查、測試功能,這些都無法愉快的解決。這時就得根據新的情況重新設計架構。

我們將代碼功能進行拆分,將以前的模塊拆分成獨立的系統,將MySQL進行主從設計,利用Nginx做負載等等。

那麼為什麼不一上來就進行拆分呢?因為一開始人手不足,拆分過細,開發週期慢,業務也不需要如此細緻的劃分。

總結

架構是一個系統的草圖(邏輯+物理角度),它是有生命的,隨著業務的變化會不斷演進。沒有完美的架構只有合適的架構。


分享到:


相關文章: