如何把一個簡單的Web專案複雜化——垂直劃分——設計篇

weixin_34041003發表於2016-12-24

概述

把簡單的Web專案做複雜,是為了能夠把更復雜的Web專案做簡單。
垂直劃分,是把Web專案做成可擴充套件的第一步,第二步是水平劃分,在這裡,我們僅探討垂直劃分。
本文定位為設計篇,是為了把實現邏輯跟大家說清楚,至於如何實現,有機會,再跟大家分享。

假設&前提

做一個Web網上商城專案,在這裡僅討論該專案的使用者(user)、產品(prod)與訂單(order)模組及其相關。
為了讓大家好理解,以及描述的方便,我們假定用LNMP實現,用Git管理程式碼。
該專案有包含大家所熟知及使用的Web網上商城功能:註冊、登入、使用者中心、我的訂單、產品展示和下單等。

一個專案實現所有功能的作法

一個構建在MVC PHP框架之上的Web專案 + 一個MySQL資料庫,就這麼多。

垂直劃分成多個專案實現所有功能的作法

Web專案
專案名 域名 說明
example_www www.example.com 主專案,不被其它專案所包含的功能
example_reg reg.example.com 註冊
example_passport passport.example.com 登入,單點登入,使用者認證
example_user user.example.com 使用者中心
example_order order.example.com 我的訂單
example_prod prod.example.com 產品展示
資料庫
資料庫名 說明
example_www 主庫,不被其它資料庫所包含的表
example_log 日誌,僅用於記錄,不作為業務使用
example_user 使用者
example_prod 產品
example_order 訂單
Rpc專案

Rpc專案與資料庫一一對應,給Web專案提供對應資料庫的CRUD服務,及其業務相關服務(注:業務不相關的元件,可通過composer提供給各專案使用)。

專案名 域名 說明
example_www_rpc www-rpc.example.com 主庫CRUD,業務相關服務,及不被其它Rpc專案包含的服務
example_log_rpc log-rpc.example.com 日誌CRUD
example_user_rpc user-rpc.example.com 使用者CRUD,及其業務相關服務
example_prod_rpc prod-rpc.example.com 產品CRUD,及其業務相關服務
example_order_rpc order-rpc.example.com 訂單CRUD,及其業務相關服務
Api專案
專案名 域名 說明
example_api api.example.com 整個大專案(Web網上商城)對外提供介面的專案,類似於api.github.com
Git

每個專案(Web專案和Rpc專案)一個Git庫。
Git分支管理使用經典Git flow,見:http://nvie.com/posts/a-successful-git-branching-model/

Over

相關文章