無服務器架構:云計算的演變
隨著無服務器架構在cloudscape上的發(fā)展,下面是基于MongoDB談談對無服務器架構的看法,以及它們如何適應變化的時代。
介紹
自從計算機問世以來,構建軟件一直是一個復雜的過程。在過去的十年中,出現了新的基礎設施方法(IaaS和PaaS)、軟件體系結構(SOA和微服務)和方法(敏捷、持續(xù)交付和DevOps),以減輕應用程序開發(fā)的復雜性。雖然微服務在過去幾年中一直是熱門趨勢,但無服務器架構通過提供一種新的方法來構建可伸縮且具有成本效益的應用程序而獲得了發(fā)展勢頭。無服務器計算通過自動提供服務器和存儲、維護基礎設施、升級軟件和只對消耗的資源收費,將開發(fā)人員從構建應用程序的傳統成本中解放出來。
什么是無服務器計算?
無服務器計算是云計算中的下層抽象狀態(tài)。這并不意味著沒有服務器,而是底層的基礎設施(物理和虛擬主機、虛擬機、容器),以及操作系統,都是從開發(fā)人員那里想象出來的。應用程序是在事件觸發(fā)的無狀態(tài)計算容器中運行的(例如,用戶上傳的照片觸發(fā)了對他/她的追隨者的通知)。開發(fā)人員創(chuàng)建應用,并依賴基礎設施分配適當的資源來執(zhí)行應用。如果應用上的負載增長,基礎設施將創(chuàng)建應用的副本,并進行擴展以滿足需求。
無服務器計算支持多種語言,因此開發(fā)人員可以選擇他們最喜歡的工具。用戶只對運行時和應用消耗的資源(例如RAM)收費;因此,不再存在供應不足或過剩的概念。
例如,如果一個應用的運行時間為500ms,并且消耗了15mb的RAM,那么用戶只需要為500ms的運行時間和使用15mb RAM的成本付費。
無服務器體系結構是微服務的自然擴展。與微服務類似,無服務器體系結構應用程序被分解為特定的核心組件。微服務可以將類似的功能分組到一個服務中,而無服務器應用程序將功能劃分為更細粒度的組件。自定義代碼是作為運行在無狀態(tài)計算服務中的獨立、自治、細粒度應用開發(fā)和執(zhí)行的。
為了說明這一點,讓我們看一個簡單的例子,說明微服務和無服務器體系結構的不同之處。
在圖1中,客戶機與“User”微服務交互。容器預先配置了容器中“User”服務的所有功能。該服務由不同的應用(update_user、get_user、create_user、delete_user)組成,并根據整個服務的總體負載進行伸縮。服務將在空閑時消耗硬件資源,并且用戶仍將為未充分利用的資源付費。
圖片
對于無服務器架構,“用戶”服務將被分成更細粒度的功能。在圖 2 中,每個 API 接口對應一個特定的應用和文件。當客戶端發(fā)起“創(chuàng)建用戶”請求時,“用戶”服務的整個代碼庫不必運行;相反,只有 create_user.js 會執(zhí)行。無需預先配置容器,因為獨立功能僅在需要時消耗資源,并且用戶只需為其功能的實際運行時間付費。這種粒度還有助于并行開發(fā)工作,因為可以獨立測試和部署功能。
圖片
無服務器計算的好處
成本隨使用而增加:
無服務器計算的最大好處之一是您只需為應用的運行時間付費。沒有“空閑”資源的概念,因為如果不執(zhí)行該功能,則不會向您收費。這對于每小時僅使用幾次的應用程序特別有用,這意味著任何專用硬件、VM 或容器在大部分時間都處于閑置狀態(tài),并且用戶需要為未充分利用的資源付費。借助無服務器計算,企業(yè)可以構建整個基礎架構,并且在客戶開始使用該應用程序之前無需為任何計算資源付費。
彈性可擴展性:
無服務器架構的彈性可擴展性也很簡單。如果應用需要擴展,基礎設施將制作應用的副本來處理負載。這方面的一個例子可能是響應天氣請求的聊天機器人。在無服務器架構中,聊天機器人功能將通過檢索用戶的位置并響應溫度來處理響應。對于少數請求,這不是問題,但是如果聊天機器人服務每秒充斥著數千個請求,會發(fā)生什么。對于這種情況,聊天機器人功能將通過實例化該功能的數千個副本來自動擴展。一旦請求平息,環(huán)境將終止空閑實例并縮減,從而允許成本與用戶需求成比例地擴展。
快速開發(fā)和迭代:
無服務器計算非常適合需要快速開發(fā)、原型和迭代的公司。開發(fā)速度更快,因為對 IT 運營沒有任何依賴。應用是單線程的,這使得調試和部署應用更簡單。構建過程也被分解成更小、更易于管理的塊。這增加了可以通過持續(xù)交付管道推送的更改數量,從而實現快速部署和更多迭代反饋。迭代速度快,因為架構有利于快速進行大量代碼更改,從而產生更多客戶反饋和更好的產品市場契合度。
更少的系統管理:
無服務器并不意味著您完全消除了基礎設施的操作元素,但它確實意味著更少的系統管理。無需管理、配置和擴展服務器,也無需修補和升級。服務器自動部署在多個可用區(qū),提供高可用。支持也得到了簡化;如果在半夜出現問題,則云提供商有責任解決問題。
開發(fā)人員生產力:
通過使用無服務器架構,開發(fā)人員可以更專注于編寫代碼,而不必擔心管理應用程序的操作任務。這使他們能夠開發(fā)創(chuàng)新功能并專注于對業(yè)務最重要的核心業(yè)務邏輯。
MongoDB Atlas 和無服務器計算
借助MongoDB Atlas,用戶可以從無服務器環(huán)境中利用 MongoDB 的豐富功能——富有表現力的查詢語言、靈活的架構、永遠在線的可用性、分布式橫向擴展。
MongoDB Atlas 是一種數據庫即服務,提供數據庫的所有功能,而無需設置操作任務的繁重工作。開發(fā)人員不再需要擔心供應、配置、修補、升級、備份和故障恢復。Atlas 提供了彈性的可擴展性,無論是通過在一系列實例大小上擴展還是通過自動分片進行擴展,所有應用程序都不會停機。
設置 Atlas 很簡單。
圖片
選擇適合您的應用程序需求的實例大小,然后單擊“CONFIRM & DEPLOY”。根據實例大小,可以在幾秒鐘內配置 MongoDB 集群。
圖片
MongoDB Atlas 為那些有興趣構建無服務器架構的人提供了許多好處:
供應商獨立性:
云供應商通常只提供特定于該供應商的數據庫,這可能不符合開發(fā)人員的需求。MongoDB Atlas 提供獨立于底層云提供商的能力,并使開發(fā)人員能夠根據自己的需求選擇合適的工具。開發(fā)人員可以利用MongoDB查詢語言的豐富功能和靈活的數據模型,無需擔心管理數據庫的操作任務。如果您決定轉移到另一個云提供商,您將不必使用不同的數據庫技術重新填充您的數據。MongoDB Atlas 目前僅在 AWS 上可用,即將支持 Microsoft Azure 和 Google Cloud Platform (GCP)。
MEAN 堆棧:
無服務器架構加速了將業(yè)務邏輯從后端轉移到前端的趨勢。這使得前端框架的選擇變得更加重要。AngularJS非常適合此要求,并且是無服務器架構的流行前端。AngularJS 是動態(tài) Web 應用程序的結構化 Javascript 框架,它提供交互功能和 AJAX(用于創(chuàng)建快速和動態(tài)網頁的技術)豐富的組件。結合NodeJS、ExpressJS和 MongoDB,這些工具形成了 MEAN 堆棧(MongoDB、ExpressJS、AngularJS、NodeJS)。在整個無服務器堆棧中使用 JavaScript 和 JSON 有巨大的優(yōu)勢。從事前端工作的人可以輕松理解應用(后端)代碼和數據庫查詢。此外,在整個堆棧中使用相同的語法和對象可以讓您的團隊從理解多種語言的最佳實踐中解放出來,并降低理解代碼庫的門檻,從而提高軟件性能和開發(fā)人員的生產力。
快速部署:
使用 MongoDB Atlas,可以在幾分鐘甚至幾秒鐘內調配和部署 MongoDB 集群。開發(fā)人員不再需要擔心配置或管理服務器。將 MongoDB Atlas 集成到無服務器平臺需要您將連接字符串傳遞到無服務器應用程序中。
圖片
MongoDB Atlas 具有廣泛的功能來防御、檢測和控制對 MongoDB 的訪問,提供任何現代數據庫中最完整的安全控制:
· 用戶權限管理:使用行業(yè)標準機制在數據庫級別進行身份驗證和授權,控制對敏感數據的訪問
· 加密:保護網絡上的動態(tài)數據和持久存儲中的靜態(tài)數據
為確保開箱即用的安全系統,自動啟用身份驗證和 IP 地址白名單。
IP 地址白名單是 MongoDB Atlas 的一項關鍵安全功能,它添加了一個額外的層來防止第 3 方訪問您的數據。除非客戶端的 IP 地址已添加到MongoDB Atlas 組的IP 白名單,否則客戶端將無法訪問數據庫。
對于 AWS,MongoDB Atlas 的 VPC Peering 正在開發(fā)中,即將推出,提供簡單、強大的解決方案。它將允許將包含您的應用程序服務器的 VPC 中的整個 AWS 安全組列入白名單。
可擴展性:
您應該期望您的無服務器功能能夠向外擴展,因此需要對下游設置進行架構以跟上您的功能并進行擴展。關系數據庫往往會因這種模型而崩潰。MongoDB Atlas 的設計以可擴展性為核心原則。當您的集群達到某個閾值時,MongoDB Atlas 會提醒您,您可以一鍵配置新服務器。
靈活的架構:
由于無服務器架構是事件驅動的,因此許多用例都圍繞著物聯網 (IoT) 和移動設備展開。MongoDB 非常適合這些用例以及更多用例,因為其靈活的文檔模型使您能夠存儲和處理任何類型的數據:事件、地理空間、時間序列、文本、二進制和其他任何類型。向文檔結構添加新字段很簡單,可以輕松處理由事件驅動的應用程序生成的更改數據。開發(fā)人員花更少的時間修改模式,更多的時間用于創(chuàng)新。
原文連接:
https://dzone.com/articles/serverless-architectures-the-evolution-of-cloud-c