糾結了,微服務和單體你選擇哪一個?
本文是一篇微服務和單體架構比較文章,這類文章很多,但是比較的現象背後其實已經假設了一種先驗的判斷標準,這篇文章的言下之意是微服務比單體高階,對人員素質要求高,其實這是一種誤解,微服務正是首先承認人理性設計能力不夠,才用行動替代設計,先分成兩三人的突擊隊上前線摸清敵情,相比單體的總體規劃,然後再切分上下文來說,對人員的設計能力要求不高,以上只是banq個人意見,看看原文大意:
“微服務”正成為是行業的流行語,現在除微服務設計外,其餘的設計被貼上“單體Monolith”標籤,但作為一名架構師,當嘗試基於某個領域開始建立新軟體設計時,會不進行任何判斷而直接採用微服務嗎?只是因為它是受歡迎的?每個人都應該只是停下來考慮一下自己公司基礎設施、員工專業知識、並在此基礎上選擇M微服務。
讓我們看看微服務和單體的比較:
1. 專案相關人力資源:當你接到一個專案時,首先要考慮的第一個問題是在這個專案中將會有多少員工?他們的經歷是什麼。如果你的實力很低,比如那就不要使用微服務,因為微服務意味著獨立的服務,而座右銘是“你建立它你就執行它”,所以應該有一個團隊擁有完整的微服務所有權,如果你人力數量少,每一個或兩個人將擁有兩個或三個微服務的所有權,微服務數量大於人員數量,會產生一個關鍵問題:知識會僅限於他們之間,他們將成為中樞員工,另一方面根據“開發人員應該只關注一小部分”座右銘,但是在這種情況下他們瞭解所有的服務了,破壞了這一規則。
2.微服務及其相關知識:微服務是一種新的架構,有各種與微服務相關的概念,如分散式架構規則,如高可用性、彈性、服務發現、CAP定理、領域驅動設計、斷路器模式、分散式快取機制、路由跟蹤等,不僅DevOps文化與微服務緊密結合,才能發揮微服務的全部功能,因此你需要了解CI / CD工具及其文化(自動部署)。團隊應該高效地驅動所有這些微服務,如果微服務部署在雲或容器中,團隊應該瞭解雲架構(PCF,亞馬遜,Bluemix等)或Container架構(Docker,Docker Swarm,Messos,Kubernetes等)。
3.組織架構:另一個重要的維度是組織基礎架構,在調整微服務之前總是檢查組織工作的模式,根據Conway康威定律,你公司的組織結構已經反映到了程式碼中,那麼首先請檢查,你的公司是否採用了敏捷技術?是否構建了跨技術團隊(如UI,中間層,資料庫),什麼是部署和QA測試模式?你的公司是否遵循手動部署和手動測試?或者他們已經或將要採用DevOps文化,其中待部署的釋出包是什麼? 公司有幾個伺服器?你可以在其中安裝應用程式伺服器並部署的釋出包?或準備使用雲?基於這些引數選擇你是否會採用微服務。
3.領域關鍵性:檢查你正在從事的領域性質,與業務分析師一起了解有很重要的,是否需要將領域拆分為子域,以便相關功能是否可以基於上下文的基礎上封裝,如果不是那就只好堅持單體了,因為不再需要建立上下文對映Context map並在有界上下文中封裝子域了。
4.專案預算:這是另一個重要的方面。想想專案的預算,專案的性質是固定出價還是TNM型別。微服務專案比巨石更昂貴,因為它需要更多的伺服器或雲基礎設施、自動化管道、資源數量,所有團隊都應該是跨技能團隊,因此在基礎設施和資源水平方面它比單體成本高得多,所以想想你的預算與你的專案保持一致(偷偷地我給一個提示給你,請不要向任何人釋出,作為一個優秀的忠誠架構師總是要考慮邊際收入,模組化的單體比微型服務更好,如果預算很少,它可以達到你的目的收入,而且在未來如果你想遷移到微服務也是可能的。)
結論 :現在,新手或中級開發人員認為單體是一個大爛泥塊,但如果你保持模組化的方法,它還是好的,在許多情況下,當我們的資源有限時,它比微服務更好。所以謹慎選擇不要順其自然,我總是建議首先使用單體,但是使其模組化,如果你使用Java9的模組,你可以從模組化開始採用SOA,當有實際需要時,比如模組邊界會洩漏,或者你無法維護模組之間的非迴圈圖(DAG),然後考慮在DDD上使用單體並且可以傾向於微服務。在此之前,我想說的是不要因為其他人正在採用微服務就用它,而是在你需要時採用它。 “偉大的力量來自偉大的責任”。
(banq注:該文滲透著一種對新技術和方法的恐懼和本能排斥,總是把新東西看得高大上,把很多新東西糅合成大爛泥塊阻嚇別人,微服務的好處是執行時的模組化和外掛化,單體的模組化只能做到開發時的模組化。)
“微服務”正成為是行業的流行語,現在除微服務設計外,其餘的設計被貼上“單體Monolith”標籤,但作為一名架構師,當嘗試基於某個領域開始建立新軟體設計時,會不進行任何判斷而直接採用微服務嗎?只是因為它是受歡迎的?每個人都應該只是停下來考慮一下自己公司基礎設施、員工專業知識、並在此基礎上選擇M微服務。
讓我們看看微服務和單體的比較:
1. 專案相關人力資源:當你接到一個專案時,首先要考慮的第一個問題是在這個專案中將會有多少員工?他們的經歷是什麼。如果你的實力很低,比如那就不要使用微服務,因為微服務意味著獨立的服務,而座右銘是“你建立它你就執行它”,所以應該有一個團隊擁有完整的微服務所有權,如果你人力數量少,每一個或兩個人將擁有兩個或三個微服務的所有權,微服務數量大於人員數量,會產生一個關鍵問題:知識會僅限於他們之間,他們將成為中樞員工,另一方面根據“開發人員應該只關注一小部分”座右銘,但是在這種情況下他們瞭解所有的服務了,破壞了這一規則。
2.微服務及其相關知識:微服務是一種新的架構,有各種與微服務相關的概念,如分散式架構規則,如高可用性、彈性、服務發現、CAP定理、領域驅動設計、斷路器模式、分散式快取機制、路由跟蹤等,不僅DevOps文化與微服務緊密結合,才能發揮微服務的全部功能,因此你需要了解CI / CD工具及其文化(自動部署)。團隊應該高效地驅動所有這些微服務,如果微服務部署在雲或容器中,團隊應該瞭解雲架構(PCF,亞馬遜,Bluemix等)或Container架構(Docker,Docker Swarm,Messos,Kubernetes等)。
3.組織架構:另一個重要的維度是組織基礎架構,在調整微服務之前總是檢查組織工作的模式,根據Conway康威定律,你公司的組織結構已經反映到了程式碼中,那麼首先請檢查,你的公司是否採用了敏捷技術?是否構建了跨技術團隊(如UI,中間層,資料庫),什麼是部署和QA測試模式?你的公司是否遵循手動部署和手動測試?或者他們已經或將要採用DevOps文化,其中待部署的釋出包是什麼? 公司有幾個伺服器?你可以在其中安裝應用程式伺服器並部署的釋出包?或準備使用雲?基於這些引數選擇你是否會採用微服務。
3.領域關鍵性:檢查你正在從事的領域性質,與業務分析師一起了解有很重要的,是否需要將領域拆分為子域,以便相關功能是否可以基於上下文的基礎上封裝,如果不是那就只好堅持單體了,因為不再需要建立上下文對映Context map並在有界上下文中封裝子域了。
4.專案預算:這是另一個重要的方面。想想專案的預算,專案的性質是固定出價還是TNM型別。微服務專案比巨石更昂貴,因為它需要更多的伺服器或雲基礎設施、自動化管道、資源數量,所有團隊都應該是跨技能團隊,因此在基礎設施和資源水平方面它比單體成本高得多,所以想想你的預算與你的專案保持一致(偷偷地我給一個提示給你,請不要向任何人釋出,作為一個優秀的忠誠架構師總是要考慮邊際收入,模組化的單體比微型服務更好,如果預算很少,它可以達到你的目的收入,而且在未來如果你想遷移到微服務也是可能的。)
結論 :現在,新手或中級開發人員認為單體是一個大爛泥塊,但如果你保持模組化的方法,它還是好的,在許多情況下,當我們的資源有限時,它比微服務更好。所以謹慎選擇不要順其自然,我總是建議首先使用單體,但是使其模組化,如果你使用Java9的模組,你可以從模組化開始採用SOA,當有實際需要時,比如模組邊界會洩漏,或者你無法維護模組之間的非迴圈圖(DAG),然後考慮在DDD上使用單體並且可以傾向於微服務。在此之前,我想說的是不要因為其他人正在採用微服務就用它,而是在你需要時採用它。 “偉大的力量來自偉大的責任”。
(banq注:該文滲透著一種對新技術和方法的恐懼和本能排斥,總是把新東西看得高大上,把很多新東西糅合成大爛泥塊阻嚇別人,微服務的好處是執行時的模組化和外掛化,單體的模組化只能做到開發時的模組化。)
相關文章
- 常見的webshell工具,你會選擇哪一個?Webshell
- iOS12和Android 9 Pie對比哪個好呢?: 你會選擇哪一個?iOSAndroid
- 如果你還在為選擇WordPress主機而糾結,選擇GoDaddy不會有錯!Go
- 微服務選擇哪個訊息代理:RabbitMQ、Kafka和Redis? - Payoda微服務MQKafkaRedis
- 獨享還是共享,你選擇哪一種鎖?
- 四款新 iPhone 12你選擇哪一款iPhone
- openSUSE Leap 與 Tumbleweed,我該選擇哪一個
- 微服務間如何選擇推送和拉取資料微服務
- [譯] Vue.js 還是 React?你會選擇哪一個?為什麼?Vue.jsReact
- 如果故障選擇了你……
- Python和Java,你會選擇哪個?PythonJava
- 選擇了軟體測試,你後悔嗎?
- 華碩主機板和技嘉主機板哪個好?看完你就不糾結了
- 單體和微服務幽默新解圖片微服務
- 因為你這個人,我選擇了這個公司
- 你以為在做的是微服務?不!你只是做了個比單體還糟糕的分散式單體!微服務分散式
- 學習程式設計,python和GO語言應該選擇哪一個?程式設計PythonGo
- 關鍵時刻不糾結的秘密:極簡選擇
- 微服務選擇Spring Cloud還是Dubbo?微服務SpringCloud
- 選擇IT行業的這些理由,哪一條戳中了你?行業
- 四款新 iPhone 12你會選擇買哪一款iPhone
- 8 種基本軟體開發模型:選擇哪一種?模型
- 架構之:微服務和單體服務之爭架構微服務
- 蘋果企業簽名和蘋果超級簽名選擇哪一個蘋果
- 微服務下的閘道器如何選擇微服務
- 微服務架構到底應該如何選擇?微服務架構
- 微服務下的註冊中心如何選擇微服務
- 微服務是什麼?帶你簡單瞭解微服務微服務
- cross-plateform 跨平臺應用程式-03-如果只選擇一個框架,應該選擇哪一個?ROSORM框架
- Redis、Kafka或RabbitMQ:選擇哪個作為微服務訊息代理? - otonomoRedisKafkaMQ微服務
- 微服務真的不挑資料庫嗎?如何選擇?微服務資料庫
- C++ 函式過載,函式模板和函式模板過載,選擇哪一個?C++函式
- 單體巨石、微服務和SOA關係與區別微服務
- 8 種方案解決重複提交問題!你選擇哪一種呀?
- 我選擇了MySQL和SpringData JPAMySqlSpring
- 不要從微服務開始!單體應用是你的朋友 - arnoldgalovics微服務
- 你當初為什麼選擇了前端?前端
- 單體架構、微服務和無伺服器架構架構微服務伺服器