场景:
现在需要开发一个前后端分离的应用,后端采用 RESTful API 最为方便,但是如果这个后端服务会在一天中的某些时候有高并发的情况,使用什么样的架构最为简单呢?
刚思考这个问题的时候我想到的解决方案可能有以下几种:
使用CDN内容分发网络,减少主服务器的压力
使用LVS服务器负载均衡
使用缓存
硬件层 提高带宽,使用SSD 硬盘,使用更好的服务器
代码层,优化代码(使用性能更好的语言等
但以上的几个方法都需要关注服务器的存储和计算资源,以便随时调整以满足更高的性能,并且高并发的请求也是分时段的,配置了更高性能的服务器在访问量变低的时候也是资源浪费。
这个时候可以使用 FaaS(Functions as a Service) 架构,跟传统架构不同在于,他们运行于无状态的容器中,可以由事件触发,短暂的,完全被第三方管理,功能上FaaS就是不需要关心后台服务器或者应用服务,只需关心自己的代码即可。其中AWS Lambda是目前最佳的FaaS实现之一。
AWS Lambda
AWS Lambda 是一项计算服务,使用时无需预配置或管理服务器即可运行代码。AWS Lambda 只在需要时执行代码并自动缩放。借助 AWS Lambda,几乎可以为任何类型的应用程序或后端服务运行代码,而且无需执行任何管理。现在 AWS Lambda 支持 Node.js、Java、C# 和 Python。
使用场景
Lambda 常见的应用场景有以下几种:
将Lambda 作为事件源用于 AWS 服务(比如音频上传到 s3后,触发 Lambda 音频转码服务,转码音频文件
通过 HTTPS (Amazon API Gateway) 实现的按需 Lambda 函数调用(配合 API Gateway创建简单的微服务
按需 Lambda 函数调用(使用自定义应用程序构建您自己的事件源)
计划的事件(比如每天晚上12点生成报表发送到指定邮箱
下图是将Lambda 作为事件源用于 AWS 服务案例的一个执行流程图:
用户将对象上传到 S3 存储桶(对象创建事件)。
Amazon S3 检测到对象创建事件。
Amazon S3 调用在存储桶通知配置中指定的 Lambda 函数。
AWS Lambda 通过代入您在创建 Lambda 函数时指定的执行角色来执行 Lambda 函数。
Lambda 函数执行。
这篇文章主要介绍 将 Lambda 作为事件源用于 AWS 服务 和 配合 API Gateway 创建简单的微服务。
如何使用 Lambda
接下来将使用一个案例介绍如何使用 Lambda。
将 AWS Lambda 与 Amazon API Gateway 结合使用(按需并通过 HTTPS)
步骤 1:设置 AWS 账户和 AWS CLI
注册 AWS 账户并在该账户中创建管理员用户
设置 AWS Command Line Interface (AWS CLI)
步骤 2:创建 HelloWorld Lambda 函数和探索控制台
创建 Hello World Lambda 函数
登录 AWS 管理控制台并打开 AWS Lambda 控制台。
选择 Get Started Now。(仅当未创建任何 Lambda 函数时,控制台才显示Get Started Now 页面。如果您已创建函数,则会看到 Lambda > Functions 页面。在该列表页面上,选择 Create a Lambda function 转到Lambda > New function 页面。下图是这种情况
这里选择从头开始创作,填写函数名、选择角色,点击创建函数
配置创建好的Lambda函数