微服務架構簡介(單一架構VS微服務架構)
- 2019 年 12 月 10 日
- 筆記
原文鏈接:https://dzone.com/articles/microservices-1-introduction-monolithic-vs-microse 作者:Jahid Akhtar 譯者:康仔
了解單一架構的劣勢,以及如何使用微服務解決這些劣勢。
最近,關於微服務有很多爭論。幾乎所有的IT公司都在討論微服務。當我們將微服務跟傳統的單一架構比較時,可以很容易理解它。
幾乎每個企業應用都有相似的分層架構:
1.表現層:用戶的交互介面。
2.業務邏輯:應用的內在業務邏輯。
3.資料庫訪問:幾乎所有的應用都需要訪問資料庫,SQL或NoSQL都行。
4.應用集成:應用之間交互是相當常見的。這些通常是通過Web服務調用(SOAP或REST)或消息傳遞來實現的。
即使應用有清晰的、邏輯上模組化架構,但是,大部分應用會被作為單一架構打包和發布。這麼做是有一定優勢的。

單一架構的優勢
1.開發相當簡單。
2.測試也非常簡單。僅僅啟動應用,然後開始端對端的測試。我們也能毫無困難的使用Selenium進行自動化測試。
3.部署單一應用程式是很簡單;只需將打包的應用程式複製到伺服器。
4.擴展是很簡單的。我們僅僅需要增加單一架構的新實例。並通過負載均衡器將負載分配到新實例上,但是,隨著整體應用程式的規模增長,可伸縮性將成為一個嚴重的問題。
單一架構的劣勢
1.靈活性:單一架構不夠靈活。我們不能使用不同的技術。技術堆棧從一開始就決定了,並自始至終遵循。一旦開發成熟,有時就很難升級技術堆棧版本,更不用說增量地採用新技術了。
2.可靠性:不可靠。如果一個特性出現故障,整個應用程式可能會出現故障。
3.開發速度:單一架構的開發非常緩慢。對於新的團隊成員來說,理解和修改大型單一架構應用程式的程式碼是很困難的。程式碼品質會隨著時間的推移而下降。隨著程式碼庫的增大,IDE會過載,速度會變慢。應用程式越大,啟動時間越長。所有這些因素都會對開發人員的生產力產生巨大的影響。
4.構建複雜應用:由於技術方面的限制,很難構建複雜的應用程式。
5.可伸縮性:單一架構的應用程式一旦變大,就很難擴展。我們可以創建新的單體實例,並要求負載均衡器將流量分配給新的實例,但是整體架構不能隨著負載的增加而擴展。應用程式實例的每個副本都將訪問所有數據,這將降低快取的效率,並增加記憶體消耗和I/O流量。而且,不同的應用程式組件有不同的資源需求——一個可能是CPU密集型組件,而另一個可能是記憶體密集型組件。使用單一架構,我們不能獨立地擴展每個組件。
6.持續部署:持續部署極其困難。大型單一架構的應用程式實際上是頻繁部署的一個障礙。為了更新一個組件,我們必須重新部署整個應用程式。
由於上述單一架構應用程式的缺點,微服務體系結構正日益受到人們的歡迎。那麼什麼是基於微服務的體系結構呢?
簡而言之,微服務體系結構風格是一種將單一架構應用程式開發為一組小服務的方法,每個小服務都在自己的流程中運行,並與輕量級機制通訊(通常通過RESTful web服務或消息傳遞)。這些服務是圍繞業務功能構建的,可以通過完全自動化的部署機制獨立部署。這些服務的集中化管理非常少,它們可能使用不同的程式語言開發,使用不同的數據存儲技術。微服務是小型的、可獨立部署的、支援雲計算的單元。

微服務架構如何解決單一架構的缺點
1.靈活性:微服務體系結構非常靈活。不同的微服務可以用不同的技術開發。由於微服務更小,程式碼基礎就更少了,所以升級技術堆棧版本並不是那麼困難。而且,我們可以毫無困難地逐步採用新技術。
2.可靠性:微服務體系結構可以非常可靠。如果一個功能崩潰,整個應用程式就不會崩潰。我們可以在相應的微服務中修復這個問題並立即部署它。
3.開發速度:微服務體系結構中的開發非常快。由於微服務的程式碼量要小得多,因此新團隊成員理解和修改程式碼並不困難。他們從一開始就很有成效。程式碼品質維護良好。IDE要快得多。微服務的啟動時間要短得多。所有這些因素都大大提高了開發人員的生產力。
4.構建複雜的應用程式:使用微服務體系結構,很容易構建複雜的應用程式。如果正確地分析應用程式的特性,我們可以將其分解為獨立的組件,這些組件可以獨立部署。然後,甚至獨立組件也可以進一步分解為小的獨立任務,這些任務可以作為微服務獨立部署。確定微服務的邊界非常具有挑戰性。這實際上是一個漸進的過程,但是一旦我們決定使用微服務,就很容易開發,因為在技術上沒有限制。
5.可伸縮性:可伸縮性是微服務體系結構中的一個主要優點。每個微服務可以單獨縮放。由於單個微服務的大小要小得多,因此快取變得非常有效。
6.持續部署:持續部署變得更容易。為了更新一個組件,我們只需要重新部署那個特定的微服務。
正如我前面提到的,當我們將微服務體系結構與傳統的單一體系結構進行比較時,可以很容易地理解它,但是在微服務之前,已經有類似的體系結構可用。是的,我說的是SOA(面向服務的體系結構)。SOA已經存在了20年。如果您已經使用過SOA並熟悉它的概念,那麼理解SOA和微服務體系結構之間的差異可能會非常令人困惑。事實上,兩者的共同點多於不同點。在下一篇關於微服務的文章中,我將介紹SOA、SOA和微服務體系結構之間的相似性,當然還有它們之間的區別。