Serverless 架构是一种新兴的云计算架构,它彻底颠覆了传统的服务器架构。Serverless 架构通过将底层硬件和操作系统抽象化,实现了无服务器的部署和运行。这种架构极大地简化了开发和运维的工作,使得工程师能够更容易地集中精力于业务逻辑的开发,从而让他们更加快乐。
Serverless 架构的优点
Serverless 架构有以下几个主要优点:
无需管理底层基础设施
Serverless 架构的最大优点就是无需管理底层基础设施。在 Serverless 架构下,所有的基础设施都由云服务提供商负责,比如 AWS Lambda、Azure Functions、Google Cloud Functions 等。开发者不需要关注服务器、容器、网络等底层基础设施的部署和运维,他们只需要关注业务逻辑的实现即可。这极大地简化了开发和运维的工作,使得开发者更加快乐。
弹性扩展
在传统的服务器架构下,需要手动扩展服务器集群来满足更高的负载需求。而在 Serverless 架构下,云服务提供商会自动根据负载情况增加或减少资源。这种弹性扩展的特点可以帮助企业更好地应对流量高峰和波峰,同时可以大大降低运维成本。
按需付费
在传统的服务器架构下,开发者需要提前预估服务器的使用量,并支付一定的费用。但是在 Serverless 架构下,开发者只需要支付实际使用的资源,不需要支付固定费用。这种按需付费的方式可以大大降低成本,使得开发者更加快乐。
Serverless 架构的实现方式
在 Serverless 架构下,应用程序代码被打包成一个一个的函数,每个函数都被分配了一个资源配额,并根据需要分配计算资源,这些计算资源在需要时会被自动调用。下面通过一个简单的应用实例来说明 Serverless 架构的实现方式。
示例代码
// index.js exports.handler = async (event) => { console.log('Hello World!'); return { statusCode: 200, body: JSON.stringify('Hello World!') }; };
函数编写与部署
首先,我们需要编写一个函数。在上面的示例代码中,我们定义了一个函数 handler,当它被调用时,会输出“Hello World!”并返回一个包含“Hello World!”的 JSON 数据。
接下来,我们需要将这个函数部署到云服务提供商的 Serverless 平台上。以 AWS Lambda 为例,我们可以通过 AWS CLI 进行函数的部署。首先,我们需要将函数代码打包成一个 zip 文件:
$ zip -r function.zip index.js
然后,我们可以使用 AWS CLI 命令将函数部署到 AWS Lambda 上:
$ aws lambda create-function --function-name my-function \ --zip-file fileb://function.zip --handler index.handler \ --runtime nodejs14.x --role arn:aws:iam::123456789012:role/my-role
触发器与事件源
一旦函数部署成功,我们需要指定触发器和事件源。在 Serverless 架构下,事件源通常是文件上传、API 调用、定时任务等等。我们以 API Gateway 为例,API Gateway 可以将 HTTP 请求转发到 AWS Lambda,从而触发函数的执行。我们可以通过 AWS CLI 命令创建一个 API Gateway:
$ aws apigateway create-rest-api --name my-api \ --endpoint-configuration types=EDGE
然后,我们可以为该 API Gateway 创建一个资源和一个方法:
$ aws apigateway create-resource --rest-api-id {rest api id} \ --parent-id {parent resource id} --path-part my-resource $ aws apigateway put-method --rest-api-id {rest api id} \ --resource-id {resource id} --http-method GET \ --authorization-type NONE --apiKeyRequired false
接下来,我们需要将该方法和函数进行绑定。具体方法是通过 AWS CLI 命令将该方法和函数绑定成一个 REST 资源:
$ aws lambda add-permission --function-name my-function \ --source-arn arn:aws:execute-api:us-east-1:123456789012:{rest api id}/* \ --principal apigateway.amazonaws.com --statement-id statement-id-12345 $ aws apigateway put-integration --rest-api-id {rest api id} \ --resource-id {resource id} --http-method GET \ --type AWS_PROXY --integration-http-method POST \ --uri arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:my-function/invocations
最后,我们需要为该 API Gateway 部署一个部署:
$ aws apigateway create-deployment --rest-api-id {rest api id} \ --stage-name prod
至此,我们已经成功地在 AWS Lambda 和 API Gateway 上部署了一个函数,并通过 API Gateway 触发函数的执行。
总结
Serverless 架构彻底颠覆了传统的服务器架构,通过将底层基础设施抽象化,使得开发者更容易地集中精力于业务逻辑的开发,从而让他们更加快乐。Serverless 架构的优点包括无需管理底层基础设施、弹性扩展和按需付费等。在 Serverless 架构下,应用程序代码被打包成一个一个的函数,并通过触发器和事件源进行调用。希望本文能够对大家了解 Serverless 架构有所帮助。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654a7b737d4982a6eb49fcd7