單體服務架構,Single Service Architecture,一種適合中小型企業或項目使用的新型服務架構 ...
寫在前面
好久好久沒寫了,最近剛換了工作,花了幾天的時候熟悉了項目,接著就是功能的完善,隨後就是對新項目的基礎架構搭建。
看過Po主博客的都知道,Po主一直致力於推廣.Net Core在微服務架構上的實踐,包括從去年年底開始也正在寫一本關於此類的書(目前還在寫的階段,不便公佈)。換新東家的目的也是如此,公司是個集團公司,但樓主負責的項目還不是很大,So,微服務架構可能現階段還無法實現。
但Po主一心嚮往微服務架構,所以我在搭建基礎架構的時候,想到了一種過度架構方式,也不知道如何稱呼,隨心所欲稱之為:單體服務架構(Single Service Architecture-簡稱SSA)
什麼是單體服務架構
什麼是單體服務架構呢?總的來說,架構看上去類似於微服務架構,但它只包含了一個服務,我們的業務邏輯統統放到這一個服務來,簡單畫個圖:
怎麼樣,簡單吧,我們來對比下eShop的架構圖:
如何,看出什麼了嗎?我們的架構去除了Api gateway,去除了EventBus,把各個服務結合在了一起,形成了一個單一的服務,所以我稱它為單體服務架構。
為什麼需要單體服務架構
可能大家好奇,為什麼需要單體服務架構(後稱SSA)呢?如果大家瞭解過微服務架構的話,應該聽說過康威定理吧,或者說聽說過“微服務架構不是銀彈”類似的話吧,概論就是並不是所有企業所有項目都適合微服務架構。但在技術熱潮之中,中小型企業都想加入微服務的隊列,但如何是好呢?我想SSA可能是他們在完成微服務架構之前最好的選擇吧。
Po主在設計新項目之前,也一直困惑,如何為以後的微服務做準備呢?新東家是一家集團公司,業務體系龐大,團隊開發語言也是眾多,就近一個月的觀察來看,運維、開發、維護的成本相當高,未來走向微服務架構是必然的,而且公司找Po主來的目的也是如此。
正如之前所說,目前Po主負責的項目比較小,投入的資源也不是很大,Po在經過前期調研之後,覺得目前並不適合做成微服務架構,經過幾天的思量,Po主想到了SSA,去除了很多複雜性,但保留了微服務架構的可擴展,可維護性,也為以後轉型做準備。
從SSA的架構圖中,你可以清晰的看到,我們有很多的clients,正是因為如此,所以我們需要SSA,如果你的項目只有一個Web,那簡單的三層架構就足矣。在SSA中,我們的Inside Api Management為我們的clients提供了所需的Api,類似於Api Gateway,但包含了我們所有的業務邏輯。在SSA中,你可以像微服務架構一樣,拋棄數據層,當然我是不建議這樣,你可以使用封裝好的SqlClient或者Orm框架來協助,結合IUnitOfWork和Repository模式,這樣你的數據訪問就會變得很簡單了。
SSA VS 三層架構
可能你會問,為何不用三層架構呢?而且你的架構跟三層架構很像。
沒錯,Po主的想法其實就是把三層架構中的業務邏輯層給提取了出來,把業務邏輯封裝起來,並提供標準化的Api介面為其他Clients提供業務或數據。
但為何選擇SSA而不是三層架構呢?
相信這裡幾乎所有的開發者都使用過三層架構開發,C端引用我們的邏輯層,邏輯層引用數據層,ok,這是因為我們只需要考慮到一個C端。就拿新聞系統舉例,一開始你需要的只是展示新聞內容,一個前端Web足矣,我們叫Web1。但為了維護,我們需要一個後臺管理,我們叫Web2,這時候已經以後2個C端了,這時候,你可以新建一個web項目,引用之前的業務層。可隨著業務發展,公司需求一個手機H5的站點,我們叫web3,這時候你會再建一個項目,使用一些前端的框架的SPA項目,然後和web2一樣,引用之前的業務層。
好了,現在你有3個C端了,我想想,大概1個中級的開發應該能夠應付,如果,我說如果,你的這個維護人員離職了,呵呵,我相信沒有一定經驗的是接手不了項目,至少在短期內無法適應。
我們繼續,公司要求需要一個適應微信端的H5,我們叫web4, 一個小程式,我們叫wxapp, 一個安卓:androidApp, 一個蘋果:iosApp。
頭大了嗎?我們現在有4個web,3個app,一共7個前端,請告訴我用你的三層維護起來還好嗎?當然,很多時候我們對接app的時候都會使用同一個api介面,算你5個C端吧。5個C端引用同一個業務層,同一個數據層,這時,你的一個邏輯出現了問題,你的一個數據查詢出現了問題,Tell me!What would do you do? 我來回答下,我會在業務層修改這個問題,在數據層修改這個問題,然後5個C端發佈下,這裡還是考慮沒有分散式,沒有LB的情況哦。Bro, Are u OK?
你應該明白我的意思了吧,如果你使用SSA的話,你其實只需要更新這個Service,我們的發佈也只需要更新這個Service,其他的C端並不需要改動。而且當你的Request和Response參數不變的情況,我們統統不需要重新發佈C端。
SSA 和三層架構的對比:
/ | SSA | 三層架構 |
---|---|---|
開發的角度 | 註重service端,前後端可完全分離 | 全部都要註重,前後端無法完全分離 |
部署的角度 | 多了一個Service Site | 少一個Service Site |
維護的角度 | 如果只改了service,只需要一個發佈 | 只要改動到業務邏輯層,我必須全部都要發佈 |
硬體成本的角度 | 可能多一臺伺服器或者一個集群,也可以不用多,多一個站點即可 | 維持不變 |
人員成本的角度 | 自己想吧,老闆們 | 運維、dba、dev、老闆 |
SSA的優缺點
SSA 的優點
- 是一個集經典三層架構和微服務架構一身的新型架構。
- 適合中小型企業和中小型項目。
- 在維護上和微服務架構一樣便利。
- 在成本上卻和三層架構一般。
- 不需要EventBus。
- 不需要熔斷,因為你只有一個。
- 在開發上能夠快速迭代。
SSA 的缺點
- 依賴度太高,所有依賴都在一個Service上
- IO,因為只有一個,必須考慮到IO,當然也可以集群
- 無狀態,跟微服務架構一樣,service必須無狀態
- 可能依賴多個DB
- 歡迎補充
寫在最後
其實還有很多話想說,但很晚了,後面還會繼續發文跟大家一起探討這個架構。
Po主是一個喜歡天馬行空的人,但這一次,Po主正在把它進行實踐,而且基礎框架已經搭建完成,不久之後將會正式上線經受考驗。
Po主最近正在開發一個基於.Net Core的服務發現項目,名字就叫“發現者”,可是實在太忙了,只完成了一部分,如果有意參加的,可私信我。
另外Po主需要幾位志同道合之士,一同來發展,原本想要一個中級,但現在中級的價碼有點高,Po主承受不住啊,歡迎校園剛出來的或者初級,Po主有信心帶你們走上.Net Core之路。
招聘啟事
- 會.Net Framework 4.0以上,.Net Core尤佳
- 會一種ORM
- 懂得什麼叫Web Api
- 愛好分享,愛好開源,愛好寫代碼
- 月薪10K-20K 論能力
- 地點:上海-吳中路
我覺得招人啟示不用太花俏,大家有相同的理念,投緣即可。不過Po主有一個其他重要的要求,寫漂亮的代碼,Po是一個見不得Bad Code的人。
****聯繫方式****
郵箱:[email protected]
QQ:785418
微信:jamesying1
QQ群:376248054
應聘者請註明來源:cnblogs-應聘