無伺服器架構的核心價值在於讓開發者擺脫基礎設施管理的負擔,專注於業務邏輯的開發。這需要開發者具備更廣泛的技能,從程式碼撰寫到雲端服務的整合、安全設定、以及應用程式的監控和維護。隨著雲端技術的發展,無伺服器架構也從單純的 FaaS 延伸到更為複雜的技術生態系統,涵蓋了資料函式庫、訊息佇列、API 閘道器等多種服務。這也驅使工程團隊需要具備多樣化的技能,才能有效地應對各種挑戰。

瞭解無伺服器架構的基礎

無伺服器架構是一種根據事件驅動的開發模式,讓開發人員能夠專注於撰寫程式碼,而不需要管理基礎設施。這種架構模式已經成為了雲端計算中的重要趨勢。

資料庫存取控制

在無伺服器架構中,資料庫存取控制是一個重要的安全性考量。為了確保資料的安全性,我們可以使用IAM政策來限制存取許可權。例如,以下政策只允許存取具有特定字首的資料記錄:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowOrderStatus",
      "Effect": "Allow",
      "Action": [
        "dynamodb:GetItem",
        "dynamodb:Query"
      ],
      "Resource": [
        "arn:aws:dynamodb:...:table/Orders"
      ],
      "Condition": {
        "ForAllValues:StringEquals": {
          "dynamodb:LeadingKeys": [
            "STATUS"
          ]
        }
      }
    }
  ]
}

這個政策使用dynamodb:LeadingKeys條件來限制存取許可權,只允許存取具有STATUS字首的資料記錄。

事件驅動架構

事件驅動架構(EDA)是無伺服器架構中的重要概念。它允許開發人員將應用程式分解為小型、獨立的服務,這些服務之間透過事件、訊息和API進行互動。這種架構模式可以讓開發人員更容易地擴充套件和維護應用程式。

增量式和迭代式開發

增量式和迭代式開發是一種開發模式,讓開發人員可以在短時間內交付小型、可工作的軟體版本。這種模式可以讓開發人員更快速地回應客戶需求,並且可以更容易地適應變化的市場需求。

多技能和多元化的工程團隊

採用新技術會帶來變化和挑戰。在團隊採用新語言、資料函式庫、SaaS平臺、瀏覽器技術或雲端提供者時,往往需要對其他領域進行變化。例如,採用新程式語言可能需要修改開發、建置和佈署過程。同樣,將應用程式遷移到雲端可能會需要很多新的過程和技能。

圖表翻譯:

  graph LR
    A[無伺服器架構] --> B[事件驅動架構]
    B --> C[增量式和迭代式開發]
    C --> D[多技能和多元化的工程團隊]
    D --> E[雲端計算]

內容解密:

上述圖表展示了無伺服器架構、事件驅動架構、增量式和迭代式開發、多技能和多元化的工程團隊之間的關係。無伺服器架構是根據事件驅動的開發模式,事件驅動架構是無伺服器架構中的重要概念。增量式和迭代式開發是一種開發模式,讓開發人員可以在短時間內交付小型、可工作的軟體版本。多技能和多元化的工程團隊是採用新技術的必要條件,因為它需要對其他領域進行變化。最後,雲端計算是無伺服器架構的基礎設施。

瞭解 DevOps 文化對於伺服器無法(Serverless)工程師的影響

DevOps 的方法論消除了開發和營運之間的障礙,使得開發新產品變得更快,維護也更加容易。採用 DevOps 模型需要軟體工程師除了專注於開發應用程式外,也需要執行營運任務。這意味著工程師不再僅僅工作在一個孤立的軟體開發迴圈中,而是參與到其許多階段,例如持續整合和交付(CI/CD)、監控和可觀察性、佈署雲端基礎設施,以及應用程式安全等。

伺服器無法(Serverless)模型的進一步演進

採用伺服器無法模型將帶來更多挑戰。雖然它解放了您從管理伺服器的任務,但您現在需要編寫業務邏輯,使用管理服務組成應用程式,使用基礎設施即程式碼(IaC)將其串聯起來,並在雲端營運它們。僅僅知道如何編寫軟體是不夠的,您還需要保護您的應用程式免受惡意使用者的攻擊,使其24/7可供全球客戶使用,並觀察其營運特性以不斷改進。因此,要成為一名成功的伺服器無法工程師,需要開發一整套新的技能,並培養DevOps心態。

伺服器無法工程師的演進

考慮一個簡單的伺服器無法應用程式,例如一個Lambda函式讀寫DynamoDB表格。假設您精通TypeScript,並選擇Node.js作為Lambda執行環境。當您實作該函式時,您需要編碼與DynamoDB的互動。為了提高效率,您需要學習NoSQL概念,識別分割槽鍵(PK)和排序鍵(SK)屬性,以及適當的資料存取模式來編寫查詢等。此外,可能還需要資料複製、TTL、快取和其他要求。安全性也是一個問題,因此您需要學習AWS IAM、如何建立角色和策略,以及最重要的,最小許可權原則。

伺服器無法應用程式及其生態系統的組成部分

生態系統是一個地理區域,其中植物、動物和其他生物,以及天氣和景觀,一起工作形成一個生命泡沫。自然界中的生態系統包含了生存和非生存部分,也被稱為因素。每個生態系統中的因素都依賴於其他因素,直接或間接地。地球表面是一系列相互連線的生態系統。

這裡的生態系統類別比是故意的。伺服器無法經常被想象為一個架構圖或藍圖,但它遠不止於FaaS和一個簡單的框架。它既有技術元素,也有非技術元素與之相關聯。伺服器無法是一個技術生態系統!正如您早些時候在本章中所學,管理服務構成了伺服器無法應用程式的大部分。但是,它們單獨不能使應用程式活起來——還有許多其他因素參與其中。

伺服器無法技術生態系統的核心元素

  • 雲端平臺:這是伺服器無法生態系統的啟動器——在我們的情況下是AWS。雲端主機環境提供了所需的計算、儲存和網路資源。
  • 管理雲端服務:管理服務是伺服器無法的基本構建塊。您透過事件運輸、訊息傳遞、資料儲存和各種其他活動組成您的應用程式。
  • 架構:這是描述您伺服器無法應用程式目的和行為的藍圖。定義和同意於架構是伺服器無法開發中最重要的活動之一。
  • 基礎設施定義:基礎設施定義,也被稱為基礎設施即程式碼(IaC),並以描述性指令碼表示,就像您的應用程式的電路圖一樣。它以適當的特性、依賴關係、許可和存取控制將一切串聯起來。在雲端上,IaC一旦被執行,就有能力使您的伺服器無法應用程式活起來或將其摧毀。
  • 開發和測試工具:您的FaaS的執行環境決定了程式語言、函式庫、外掛、測試框架以及其他許多開發者輔助工具。這些工具可能會根據產品域和工程團隊的偏好而有所不同。
  • 倉函式庫和管道:倉函式庫是所有您的工件版本化儲存,管道執行將您的伺服器無法應用程式從開發環境帶到目標客戶的動作,途中經過各種檢查點。基礎設施定義在此過程中發揮著關鍵作用。
  • 可觀察性工具:可觀察性工具和技術就像一面鏡子,反映了您應用程式的營運狀態,提供了更深入的見解,以瞭解它如何對其預期目的進行表現。一個不可觀察的系統不能被維持。

什麼是無伺服器應用程式的最佳實踐?

為了確保無伺服器應用程式的安全性、可擴充套件性和觀察性,同時也能夠在面臨意外中斷時保持韌性,您需要一套良好的架構原則和最佳實踐來作為指導。AWS Well-Architected Framework是一個重要的最佳實踐,我們稍後會在本章中進行探討。

誰是無伺服器應用程式生態系統的一部分?

除了工具和技術之外,人們在無伺服器生態系統中扮演著重要角色。這包括提出應用程式需求的人、設計、建構和營運應用程式的人。人們在做出正確的決定和執行必要的行動方面發揮著關鍵作用,就像我們在環境生態系統中所做的一樣。

為什麼AWS是無伺服器應用程式的理想平臺?

雖然「無伺服器」這個術語最早出現在2012年,但直到2014年AWS Lambda的推出,才真正引起了廣泛關注。在那之前,AWS已經有一些完全受管理的無伺服器服務在為客戶提供服務。例如,Amazon SQS是在2014年之前就已經推出的,而Amazon S3則是在2006年就已經問世了。

AWS早期就跳入了雲端計算領域,並提供了容器服務和完全受管理的無伺服器服務,使得Amazon能夠比其他提供商更快速地推出新產品。許多早期採用者迅速地實作了自己的商業理念,並在AWS上推出了自己的應用程式。即使雲端市場正在迅速增長,AWS仍然是全球最大的雲端服務提供商。

AWS無伺服器服務的受歡迎程度

透過與客戶密切合作並關注產業趨勢,AWS能夠快速地迭代想法並推出許多重要的無伺服器服務,涉及API、函式、資料儲存、資料流、AI、機器學習、事件傳輸、工作流程和協調等領域。

什麼是AWS服務名稱中的「Amazon」和「AWS」字首?

當您檢視AWS服務名稱時,您會注意到混合使用「Amazon」和「AWS」字首,例如Amazon DynamoDB和AWS Step Functions。這種命名方式可能會令每個人感到困惑,包括Amazon的員工。事實上,這不是隨機選擇,而是一種根據服務的基本特性來區分服務的方法。

最流行的理論是,具有「Amazon」字首的服務可以獨立工作(獨立服務),而具有「AWS」字首的服務則支援其他服務(公用服務),不打算獨立使用。例如,AWS Lambda可以被觸發。但是,隨著服務隨時間推移而演變並新增新的功能,您可能會發現例外情況,其中這種區分不再成立。

無伺服器架構的崛起徹底改變了軟體開發和佈署模式。深入剖析無伺服器架構的核心概念,可以發現它並非單純的技術選型,而是一個涵蓋開發流程、團隊組織、甚至商業模式的整體轉型。無伺服器架構的優勢在於降低維運負擔、提升開發效率,並允許企業更專注於核心業務邏輯。然而,技術限制依然存在,例如供應商鎖定、冷啟動延遲以及除錯的複雜性等挑戰。

多維比較分析顯示,相較於傳統伺服器架構,無伺服器架構在彈性擴充套件和成本效益方面具有顯著優勢,尤其適用於事件驅動型應用程式和微服務架構。然而,對於需要精確控制底層資源或有嚴格延遲要求的應用,則需謹慎評估。此外,團隊技能的提升和DevOps文化的建立也是成功實踐無伺服器架構的關鍵。

展望未來,無伺服器技術將持續朝向更細粒度的資源排程、更完善的開發工具鏈和更廣泛的應用場景發展。預計未來3-5年內,無伺服器架構將與邊緣計算、AI/ML等技術深度融合,催生更多創新應用。隨著雲端原生生態系統的蓬勃發展,無伺服器架構的應用門檻將進一步降低,成為更多企業數位轉型的首選方案。玄貓認為,掌握無伺服器架構的核心概念和最佳實踐,對於提升技術競爭力至關重要。對於有意願擁抱雲端原生未來的企業而言,現在正是積極探索和實踐無伺服器技術的最佳時機。