無服務器 NodeJS:應了解的一切

言鼎科技 2023-05-19 419

無服務器節(jié)點介紹

從以高維護和基礎設施成本管理服務器到部署無服務器應用程序,我們已經(jīng)走了這么遠。這種基于技術(shù)的加速將持續(xù)一段時間。事實上,據(jù) Globe NewsWire 報道,到 2032 年,無服務器架構(gòu)(云計算的一部分)市場預計將達到 900 億美元。

預期顯示了無服務器架構(gòu)的需求、增長和可靠性。敏捷開發(fā)、成本降低(與傳統(tǒng)方法相比)和可擴展性是您可以通過無服務器架構(gòu)獲得的實實在在的好處。

蛋糕上的櫻桃是無服務器 Nodejs,因為 Node.js 包含事件驅(qū)動的架構(gòu)。這種架構(gòu)以其快速響應而聞名,無論是傳感器讀取還是數(shù)據(jù)庫中的更改,甚至是對實時用戶操作的響應。

使用無服務器架構(gòu)和 Node.js 也可以構(gòu)建復雜且可擴展的應用程序。您準備好以最低成本構(gòu)建應用程序的計劃了嗎?但是等等,閱讀這篇文章有兩個原因:

  • 獲取有關(guān)無服務器 Nodejs 架構(gòu)的技術(shù)和信息信息。

  • 在截止日期之前,讓最好的 Node 開發(fā)人員掌握關(guān)于開發(fā)和部署的完善和最新的技術(shù)知識。

什么是無服務器節(jié)點及其工作原理?

Node Serverless 是 Node 程序員無需在基礎設施上管理和設置物理服務器即可開發(fā)和運行應用程序的地方。先進的現(xiàn)代化方法確保 Node 開發(fā)人員只專注于編寫和運行代碼。

與必須利用 express.js 作為服務器的傳統(tǒng) Node.js 應用程序開發(fā)不同,這種新時代技術(shù)不需要服務器或基礎設施。您所要做的就是利用其中一個云平臺,例如 Microsoft Azure Functions、AWS Lambda 或 Google Cloud Functions。利用云平臺將使可擴展性、可訪問性和負載平衡問題成為過去。

現(xiàn)在讓我們了解無服務器 Nodejs 的工作原理。

Node.js 無服務器架構(gòu)執(zhí)行 Node.js 函數(shù)以嘗試 HTTP 請求或事件。節(jié)點開發(fā)人員創(chuàng)建的所有任務都上傳到云服務提供商,如 AWS Lambda,它還負責管理服務器、基礎設施、流量負載和可擴展性。

現(xiàn)在讓我們看看 Node Serverless 工作模式的逐步功能:

第 1 步:編寫 Node.js 函數(shù)。

這是 Node 開發(fā)人員編寫函數(shù)來管理特定事件的第一步。

第二步:上傳無服務器平臺的函數(shù)。

功能寫好后,開發(fā)人員將其上傳到無服務器平臺。

第 3 步:響應事件觸發(fā)功能。

在用戶發(fā)生任何事件或 HTTP 請求時,無服務器平臺會觸發(fā)功能以響應事件或請求。

第 4 步:提供響應。

觸發(fā)指定函數(shù)后,它會產(chǎn)生響應或自動成為事件或 HTTP 請求的輸入。

一張簡單的圖表描述了部署在亞馬遜基礎設施上的無服務器架構(gòu)的分解。

無服務器 NodeJS:應了解的一切

?? NodeJs:我們使用NodeJS作為核心語言來編寫代碼來理解上圖。
?? Lambda:您的應用程序邏輯在這里實現(xiàn)。您可以在此處部署您的代碼,而無需指定要使用的服務器數(shù)量或它們的容量。您只需為請求的數(shù)量和處理它們所需的時間付費。
?? API 網(wǎng)關(guān): API 網(wǎng)關(guān)上的 HTTP 端點是您的 Lambda 函數(shù)公開的地方。它提供服務功能,包括數(shù)據(jù)轉(zhuǎn)換、速率限制、政策執(zhí)行、授權(quán)和亞馬遜完全管理的政策執(zhí)行。如果我們在后臺進程中使用它或者不將它用作 API,請確保我們可以在沒有 API 網(wǎng)關(guān)的情況下調(diào)用它。
??DynamoDB: DynamoDB 表容納動態(tài)數(shù)據(jù)。DynamoDB 是一種 NoSQL 數(shù)據(jù)存儲,具有無限可擴展的存儲和吞吐能力,其整個管理由 Amazon 負責。這只是一個例子:我們可以根據(jù)我們的用例使用任何其他數(shù)據(jù)庫。
?? S3: HTML、CSS、圖片和客戶端 JavaScript 都包含在存儲在 S3 存儲桶中的靜態(tài)內(nèi)容中,并直接從 S3 作為靜態(tài)網(wǎng)站提供。

這就是 Node.js 無服務器的工作原理?,F(xiàn)在問題來了,您是否應該選擇使用具有無服務器架構(gòu)的節(jié)點來開發(fā)應用程序?在下一節(jié)中查看它。

想要利用我們的 Node Js 開發(fā)服務使您現(xiàn)有的應用程序完美無缺且可擴展嗎?
聘請我們的 Node.js 開發(fā)人員探索 Node 的效率和性能,以更少的資源實現(xiàn)預期的結(jié)果

您應該利用無服務器 Node.js 嗎?

是的,您必須利用無服務器 Node.js,因為它已經(jīng)為企業(yè)主提供了充足的好處,并且在下一節(jié)中有真實的示例。但在此之前,讓我們先了解一下無服務器 Node 框架可以帶來哪些優(yōu)勢。

無限的可擴展性

使用無服務器架構(gòu),運行服務器超時或長時間停機將成為過去。為什么?由于其在需要時按比例放大和縮小的性質(zhì)。無服務器架構(gòu)旨在處理任何流量,無論大小。

幾乎為零的停機時間

正如上一點所討論的,停機問題對你來說只是一個詞,因為無服務器永遠不會面臨任何類型的故障。如果仍然存在,任何問題仍然存在,將由云服務提供商及時解決。

安全升級

由于云服務提供商管理的是無服務器的 Node.js,因此整個安全控制權(quán)也掌握在他們手中。無論是 AWS Lambda、Microsoft Azure 還是 Google Cloud;每個人都保持他們的安全控制是最新的。

在您的競爭對手之前進入市場。

任何 Node 程序員的全部注意力都將放在專門編寫和運行代碼上,這使他們無需擔心管理服務器或可擴展性。聘請 Node.js 開發(fā)人員以更快的速度和最短的時間無服務器地構(gòu)建您的下一個應用程序。

資源的最佳利用

使用無服務器 Nodejs,您可以最佳地利用資源,因為您為使用的資源付費。云服務提供商管理服務器、在需要時擴展、平衡網(wǎng)站/應用程序負載等。它還可以幫助您節(jié)省資金并更好地利用可用資源。

無基礎設施成本

由于無需物理管理服務器,因此基礎架構(gòu)成本也將為零。云服務提供商管理、擴展和維護基礎架構(gòu)和服務器。

有哪些使用 Node.js 構(gòu)建的無服務器應用程序?

使用 Nodejs serverless 構(gòu)建的應用程序有幾個,如下所示:

可口可樂公司

可口可樂使用無服務器 Node.js 發(fā)起了數(shù)字營銷活動“Share a Coke”。借助無服務器,可口可樂公司無需擔心流量和服務器管理。

工作

為了管理后端流程,Upwork是一個雇傭自由職業(yè)者進行設計、開發(fā)和其他數(shù)字服務的平臺,它利用無服務器 Nodejs 框架來管理來自知名自由職業(yè)者平臺的大量請求。

喧囂數(shù)碼集團

名單上的另一個大牌是來自紐約的一家媒體公司,該公司使用無服務器 Node Js 框架構(gòu)建了自己的應用程序。Bustle digital group 利用該技術(shù)簡化了數(shù)字出版物的后端流程。

諾德斯特龍

Nordstrom 是一家在線時尚零售連鎖店,它利用 Node.js 無服務器部署新功能并根據(jù)要求擴展網(wǎng)站。此外,無服務器 Node js 也已成為 Nordstrom 不可或缺的一部分,允許它集成第三方服務以進行支付和運輸流程。

擋泥板

Fender 是一家生產(chǎn)吉他的公司。他們的目標是在線教授吉他課程,為此他們使用無服務器 Node.js 創(chuàng)建了一個網(wǎng)站。由于會有更多的注冊,網(wǎng)站會自動擴大和縮小。

現(xiàn)在您已經(jīng)了解構(gòu)建的 NodeJS 無服務器應用程序列表,讓我們了解構(gòu)建任何應用程序的技術(shù)方面。

開始使用無服務器 Node.js

從無服務器節(jié)點開始意味著優(yōu)先考慮云服務提供商并推進其他技術(shù)方面。那么,讓我們從它開始吧。

選擇云提供商。

一些云提供商提供 NodeJS 無服務器服務,例如 AWS Lambda、Google Cloud Functions 和 Microsoft Azure Functions。選擇具有最佳功能、定價和學習曲線的提供商。當我們采用 Amazon 基礎設施時,我們將使用相同的基礎設施繼續(xù)學習,直到本文結(jié)束。

安裝無服務器框架

Serverless Framework 是一個開源工具,可以簡化服務器的部署和管理

無服務器 NodeJS:應了解的一切
npm install -g 無服務器

無服務器應用程序。通過運行以下命令使用 npm 在本地計算機上安裝它:

創(chuàng)建一個新的無服務器項目。

通過運行以下命令,使用 Serverless Framework 創(chuàng)建一個新的 Serverless Node js 項目:

無服務器 NodeJS:應了解的一切
無服務器創(chuàng)建 --template aws-nodejs --path my-service

此命令將在名為“my-service”的目錄中創(chuàng)建一個新的無服務器項目,并使用 AWS NodeJS 模板作為起點。

編寫您的 Node.js 函數(shù)。

在 my-service 目錄中,您會找到一個名為 handler.js 的文件。此文件包含一個由 HTTP 請求觸發(fā)的示例 NodeJS 函數(shù)。將此文件的內(nèi)容替換為您自己的 NodeJS 函數(shù),這些函數(shù)可以為您的應用程序執(zhí)行所需的任務。

無服務器 NodeJS:應了解的一切
// 這是一個返回問候消息的簡單 Node.js 函數(shù)exports.handler = 異步(事件)=> {
 常量名稱 = event.queryStringParameters.name || '世界';
 const message = `你好,${name}!`;
 返回 {
   狀態(tài)碼:200,
   正文:JSON.stringify({
     消息:消息
   })
 };};

配置您的無服務器部署。

無服務器框架使用`無服務器.yml`文件來配置無服務器應用程序的部署。使用必要的配置更新此文件,例如 AWS 區(qū)域和任何環(huán)境變量。

無服務器 NodeJS:應了解的一切
服務:我的服務供應商:
 名稱:aws
 運行時:nodejs14.x功能:
 你好:
   處理程序:app.handler
   事件:
     - HTTP:
         路徑:/你好
         方法:獲取

這不足以開始。讓我用 crud actions 詳細說明這個例子。為此,創(chuàng)建 app.js

無服務器 NodeJS:應了解的一切
const AWS = require('aws-sdk');const dynamoDb = new AWS.DynamoDB.DocumentClient();exports.create = 異步(事件)=> {
 const { id, name, email } = JSON.parse(event.body);
 常量參數(shù) = {
   表名:'用戶',
   物品: {
     ID,
     姓名,
     電子郵件
   }
 };
 等待 dynamoDb.put(params).promise();
 返回 {
   狀態(tài)碼:201,
   正文:JSON.stringify({
     message: '用戶創(chuàng)建成功'
   })
 };};exports.read = 異步(事件)=> {
 const { id } = event.pathParameters;
 常量參數(shù) = {
   表名:'用戶',
   鑰匙: {
     ID
   }
 };
 const user = await dynamoDb.get(params).promise();
 如果(!用戶。項目){
   返回 {
     狀態(tài)碼:404,
     正文:JSON.stringify({
       消息:'找不到用戶'
     })
   };
 }
 返回 {
   狀態(tài)碼:200,
   正文:JSON.stringify(user.Item)
 };};exports.update = 異步(事件)=> {
 const { id } = event.pathParameters;
 const { 姓名,電子郵件 } = JSON.parse(event.body);
 常量參數(shù) = {
   表名:'用戶',
   鑰匙: {
     ID
   },
   UpdateExpression: 'set #n = :name, #e = :email',
   表達式屬性名稱:{
     '#n': '姓名',
     '#e': '電子郵件'
   },
   表達式屬性值:{
     ':名稱':名稱,
     ':電子郵件':電子郵件
   }
 };
 等待 dynamoDb.update(params).promise();
 返回 {
   狀態(tài)碼:200,
   正文:JSON.stringify({
     message: '用戶更新成功'
   })
 };};exports.delete = 異步(事件)=> {
 const { id } = event.pathParameters;
 常量參數(shù) = {
   表名:'用戶',
   鑰匙: {
     ID
   }
 };
 等待 dynamoDb.delete(params).promise();
 返回 {
   狀態(tài)碼:200,
   正文:JSON.stringify({
     message: '用戶刪除成功'
   })
 };};

這里是`無服務器-yaml`這個 app.js 的文件。

無服務器 NodeJS:應了解的一切
服務:我的服務供應商:
 名稱:aws
 運行時:nodejs14.x功能:
 創(chuàng)造:
   處理程序:app.create
   事件:
     - HTTP:
         路徑:/用戶
         方式:郵寄
 讀:
   處理程序:app.read
   事件:
     - HTTP:
         路徑:/用戶/{id}
         方法:獲取
 更新:
   處理程序:app.update
   事件:
     - HTTP:
         路徑:/用戶/{id}
         方法:放
 刪除:
   處理程序:app.delete
   事件:
     - HTTP:
         路徑:/用戶/{id}
         方法:刪除

這個無服務器應用程序定義了四個 NodeJS 函數(shù),它們對名為 users 的 DynamoDB 表執(zhí)行 CRUD 操作。serverless.yml 文件指定服務名稱、提供程序和運行時以及函數(shù)名稱、處理程序和事件源。

部署您的無服務器應用程序。

通過運行以下命令,使用無服務器框架將您的應用程序部署到云提供商:

無服務器 NodeJS:應了解的一切
無服務器部署

此命令將打包您的應用程序,將其上傳到云提供商,并配置必要的資源,例如 AWS Lambda 函數(shù)和 API 網(wǎng)關(guān)端點。無服務器 NodeJS 函數(shù)

測試您的無服務器應用程序。

部署應用程序后,您可以通過向 API 網(wǎng)關(guān)端點發(fā)送請求或觸發(fā)適當?shù)氖录ɡ鐢?shù)據(jù)庫更改或消息隊列事件)來測試它。

無服務器 Node.js 開發(fā)的 7 個最佳實踐

選擇無服務器架構(gòu)時,請在您的應用程序開發(fā)過程中實施這些最佳實踐。

優(yōu)化冷啟動時間。

如果您網(wǎng)站的任何功能花費太多時間,那是因為冷啟動時間慢。這種緩慢的啟動時間會對您的客戶體驗產(chǎn)生負面影響。要優(yōu)化冷啟動時間并使其快速,您必須利用 AWS Lambda 預配置并發(fā)或 Azure Functions Warm 來快速執(zhí)行任何功能。

利用微小的功能。

性能提升總是依賴于微小的功能,因此建議將更重要的功能分解成更小的功能。這將有助于無服務器節(jié)點實現(xiàn)更小的功能并擴展它們的功能。

消除依賴性。

依賴性會阻礙功能的大小和性能,最終導致糟糕的客戶體驗。要提升專業(yè)知識并降低網(wǎng)站的跳出率,您必須減少對開發(fā)人員依賴性的依賴。并且只添加那些對你的功能來說是必須的依賴。

利用環(huán)境變量。

由于環(huán)境變量有助于保護機密和敏感信息,因此每個開發(fā)人員都應該利用它們。您甚至可以針對特定用途使用多個環(huán)境。

確保緩存的實施。

緩存是 Node 無服務器的另一個最佳實踐,因為它優(yōu)化了無服務器功能的性能。它減少了 API 或外部服務請求的數(shù)量。由于緩存增強了Node 性能,程序員使用 Redis 或 Memcached 等工具來確保存儲經(jīng)常使用的數(shù)據(jù)。

確保重試的實施。

由于該應用程序構(gòu)建在無服務器架構(gòu)上,因此所有功能也構(gòu)建在同一架構(gòu)上。這些函數(shù)可能會偶爾無法響應,例如網(wǎng)絡錯誤、API 錯誤或會話超時。此類故障會影響您的網(wǎng)站流量,這就是為什么實施重試很重要的原因,并且采用回退策略也是如此。它將定期簡化功能。

確保日志記錄和監(jiān)控的實施。

無服務器應用程序的優(yōu)化取決于日志記錄和監(jiān)控,因為這些功能詳細說明了性能、錯誤和使用情況。大多數(shù)節(jié)點開發(fā)人員實施 AWS CloudWatch 或 Azure Monitor 來跟蹤應用程序性能。

養(yǎng)成測試和調(diào)試的習慣。

在將應用程序部署到云端之前,您必須測試您的無服務器應用程序的功能,以及時糾正任何錯誤或錯誤。它甚至可以節(jié)省時間并防止品牌形象受到阻礙。節(jié)點開發(fā)人員必須利用 Azure Functions Core 工具或 AWS SAM CLI 來測試和調(diào)試使用 Node.js 構(gòu)建的無服務器應用程序。

結(jié)論

由于無服務器 Node.js 是一項新時代的技術(shù),您必須利用它來構(gòu)建您的以下可擴展網(wǎng)站或應用程序。這將是一項預算友好的投資,因為它將降低您的運營和基礎設施成本。實施博客中提到的最佳實踐將消除您應用中的大部分錯誤和錯誤。如果您需要任何應用程序開發(fā)幫助,請聯(lián)系我們的 Node.js 專業(yè)人員,他們擁有多年為客戶構(gòu)建可擴展應用程序的實踐經(jīng)驗。此外,它們會根據(jù)最新趨勢和技術(shù)進行更新,確保您的所有功能都是使用安全的 API 和第三方服務構(gòu)建的。

言鼎科技

The End