單體應用、微服務和無服務並不是你想象的那樣

2024年2月6日 23点热度 0人点赞

你能區分單體模式與微服務嗎?微服務與無服務器呢? 歡迎看到最後!彩蛋!

技術術語隨著時間的推移而演變。有時,意義停留在過去。有時,並不是每個人都能理解當前的解釋。有時,其含義會受到誤解。

它是一個單體嗎?

單體架構隻是一個軟件塊,還是擴展到 SQL 數據庫?

  • 如果分發事件會怎樣?
  • 如果 UI 從同一容器提供,該怎麼辦?
  • 如果水平擴展一個巨大的容器以滿足需求,會怎麼樣?
  • 如果你的工作線程是與你的 API 相同的容器的實例,該怎麼辦?

它仍然是一個單體嗎?

有人說,“你不能水平擴展一個單體。你隻能垂直擴展它。” 這看起來很愚蠢,因為我已經在數百臺小型服務器上擴展了巨大的單體。

它是否是一個單體與應用程序的大小或如何擴展它無關。

如果多個應用程序在一個應用程序發生變化時必須一起重新部署,那麼它們就不是微服務。它們是分佈式單體的一部分。

Web 應用程序幾乎總是多組件系統。

即使是最簡單的單體UI -> web server -> application -> SQL也不是單個軟件塊。

是什麼使它成為一個單體?

  • 不是它有多少個存儲庫。
  • 不是它有多少個容器。
  • 不是它有多少個 lambda。
  • 不是有多少個團隊。

緊密耦合使其成為一個單體!

它們是微服務嗎?

微服務是完全隔離的,還是可以共享數據庫?

  • 如果是同一個數據庫服務器怎麼辦?
  • 如果是同一個邏輯數據庫怎麼辦?
  • 如果他們使用不同的表怎麼辦?
  • 如果他們使用同一桌面管理怎麼辦?

它們還是微服務嗎?

有人說,“如果它們共享同一個數據庫服務器,它們就不是微服務。” 這看起來很愚蠢,因為每個微服務運行一個數據庫服務器成本高昂且維護起來很復雜。

如果你使用DynamoDB並且每個微服務都有一個單獨的表,該怎麼辦?他們使用同一臺服務器嗎?它們在同一臺機器上運行嗎?你不知道也不關心。

是否是微服務與它們是否共享相同的數據庫服務器無關。

重要的是服務與依賴項、彼此之間以及它們管理的數據的耦合程度如何。

如果多個應用程序擁有相同的數據,那麼它們就不是微服務。如果每個應用程序擁有的數據與其他服務擁有的數據隔離,那麼它們可能是微服務。

數據庫有不同的邏輯分離數據的方式,包括邏輯數據庫、命名空間和表。

是什麼使它成為微服務?

  • 不是它有多少個存儲庫。
  • 不是它有多少個數據庫。
  • 不是它有多少個 lambda。
  • 不是有多少團隊。

松耦合和高內聚使其成為微服務!

它們是無服務(serverless)嗎?

它是否是無服務的,因為功能是按需構建和運行的?

  • 如果代碼在容器中運行怎麼辦?
  • 如果容器是預先構建的怎麼辦?
  • 如果是微服務呢?
  • 如果它是一個整體怎麼辦?

仍然是無服務嗎?

有人說,“隻有 Function as a Service 才是無服務器的。” 這看起來很愚蠢,因為我已經使用了包含單體、微服務、數據庫和機器學習的無服務器解決方案,而無需擔心單個服務器。

它是否是無服務器與是否按需構建或是否使用AWS Lambda或Google Cloud Functions等 FaaS 無關。

重要的是你不必管理服務器。實例可以擴展到零或者沒有實例需要考慮。它會隨著需求而擴大。你隻需按使用量付費。

OpenFaaS使用預構建的容器。AWS Fargate和Google Cloud Run為你管理和運行容器。S3 是無服務器存儲。AWS Aurora是無服務器 Postgres 數據庫。

單體應用、微服務、數據庫、存儲、API 網關、事件總線,甚至機器學習模型等復雜軟件都可以是無服務器的。

是什麼讓它成為無服務器的?

  • 不是它建造的地方。
  • 如果使用函數則不然。
  • 如果使用容器則不然。
  • 不是它公開了多少 API。

基礎設施管理的抽象使其成為無服務器的!

(因為“Serverless”最初與 FaaS 相關聯,所以現在人們使用“Serverless Functions”和“Serverless Containers”來區分 Serverless 架構的類型。)

(“無服務器”實際上可以追溯到更早的時候。它最初的意思是“隻有客戶端”,就像點對點一樣。這一切都在 2014 年 re:Invent 上發生了變化,當時亞馬遜宣佈了 Lamba )


-------------------------------------最美分割線
--------------------------------------

以上摘自一帖子(
https://blog.devdetails.com/p/monoliths-microservices-and-serverless)

文章總結:一百個人心中有一百個哈姆雷特

單體架構:緊密耦合使其成為一個整體!

微服務架構:松耦合和高內聚使其成為微服務。

Serverless:基礎設施管理的抽象使其成為無服務器。

你認為呢?

延伸閱讀:我的理解,歡迎閱讀!

Serverless 架構概述

什麼是微服務架構?