无服务器(Serverless),指的是云计算中无需管理服务器、操作系统、数据库等底层设施的一种编程模型,使得开发者能够专注于业务逻辑的实现,而非底层技术的维护。其基于事件驱动、按需自动扩展和函数计算等技术,具有高可用性、低成本和高效性的特点。
对于我这个前端工程师而言,无服务器相当于云计算下的前端架构,可以提高生产力,减少团队之间的落差,消除基础设施的管理问题,直接面向业务逻辑编写回调函数,大大加速了项目开发速度。
今年的春节假期,我和我的团队决定去日本旅行。一路上,我们领略了不同的文化风情,尤其是感受到了人民友好淳朴的热情。在东京逛了几天之后,我们开始着手解决一些工程问题,这时我给大家介绍了无服务器的概念。
AWS Lambda 是亚马逊公司提供的一个无服务器计算平台,它可以自动管理底层的计算资源,并按需扩展执行环境。AWS Lambda 通过事件触发机制来调用函数,并提供用于创建、更新、测试和部署函数的工具。
在架构设计中,我们使用了 AWS Lambda + API Gateway 的模式,用于替代传统 Web 服务器的框架。API Gateway 比较灵活,可以做很多转发、过滤等操作,而 AWS Lambda 就只需要专注于业务逻辑本身的实现。
为了简化架构,我们先使用人脸检测作为案例来实现 Serverless 架构设计。具体来说,我们将人脸检测服务放在 Lambda 里面,把 API Gateway 作为对外的接口实现转发。
首先,我们使用 AWS CLI 工具创建一个函数,并为其添加代码文件。下面是一个简单的 Node.js 函数:
exports.handler = function(event, context, callback) {
// TODO implement
callback(null, 'Hello from Lambda');
};
然后,我们创建一个 API Gateway,绑定到这个 Lambda 函数上面。在 API Gateway 的 Console 页面上,我们可以设置请求路径、响应类型等属性。下面是一个简单的配置示例:
{
"swagger": "2.0",
"info": {
"version": "1.0",
"title": "Web API"
},
"host": "api.example.com",
"basePath": "/v1",
"schemes": [
"https"
],
"paths": {
"/face/detect": {
"get": {
"summary": "Detect faces",
"operationId": "face.detect",
"produces": [
"application/json"
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object"
}
}
},
"x-amazon-apigateway-integration": {
"type": "aws",
"httpMethod": "POST",
"uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:face-detect/invocations",
"passthroughBehavior": "when_no_match"
}
}
}
}
}
实际上,我们在旅途中开发的无服务器项目比想象中简单得多。相比传统的 Web 服务器框架,我们几乎不需要关心底层设施的问题,可以直接编写简单的回调函数,快速实现业务逻辑。
通过无服务器构建项目,使得我们可以快速迭代,减少等待时间。因为 Serverless 模式下的 Lambda 可以自动扩展,无需像传统的集群模式下一样需要人工配置节点数目。
Serverless 是一种新的架构设计方式,可以让前端开发者更专注于业务逻辑的实现,并减少传统 Web 服务器框架下面临的基础设施管理问题。在我和我的团队去日本旅游的过程中,我们使用了 AWS Lambda 构建一个人脸检测服务,实现了 Serverless 架构设计。目前,无服务器已经成为越来越多企业的首选开发模式。