本文介绍了在 AWS 无服务器架构上实现 RESTful API 的过程。它详细概述了架构、数据流和可使用的 AWS 服务。本文还介绍了无服务器架构与传统方法相比的优势。
什么是无服务器架构?
无服务器架构,又称无服务器计算或功能即服务,是一种软件设计方法,允许开发人员在不管理底层基础设施的情况下构建和运行应用程序。云服务提供商负责管理和扩展云基础设施,包括配置服务器以运行应用程序、数据库和存储。
无服务器架构的重要性
- 企业只需为其使用的计算资源(如请求数量、执行时间和消耗的资源)付费,因此没有硬件或软件的前期成本。这样就无需为闲置的基础设施付费,从而大大节省了成本。
- 无服务器架构可根据工作负载自动扩大或缩小规模。这可确保应用程序能够处理不同水平的流量。
- 每个功能都可以独立扩展,确保根据需求有效分配资源。
- 无服务器架构非常适合事件驱动型应用,即通过 HTTP 请求、数据库更改或消息队列更新等特定事件触发功能。
用于实施的 AWS 服务
以下 AWS 服务可用于 REST API 的实施。下面的列表列出了 AWS 服务及其在应用程序接口实施中的用途。
路由 53
Route53 可用于域名注册、DNS 路由、流量、流量管理、健康检查和监控。
API 网关
使用 API Gateway 可在任何规模上创建、发布、维护、监控和保护 REST API。
可在 API 网关下创建 HTTP 方法(GET、POST、PUT、DELETE、PATCH、OPTION)。这些方法可以集成到相应的前端控制器 Lambda 函数中。
WAF
AWS WAF(网络应用程序防火墙)可帮助您防范常见的网络攻击和僵尸程序,这些攻击和程序会影响可用性、破坏安全性或消耗过多资源。我们可以将 WAF 与 API 网关关联起来,以过滤恶意请求。
通过 WAF,我们可以配置以下内容:
网络 ACL - 确定允许流量的规则和规则组
自定义规则 - IP 设置匹配条件、字符串和 regex 匹配条件、地理匹配条件、基于速率的规则
僵尸控制
Lambda
用于授权的 Lambda 函数
Lambda 授权器将调用者的身份作为输入,并将 IAM 策略作为输出返回。使用 Lambda 授权器实现自定义身份验证和授权。
经过身份验证和授权的 Lambda 会向 API Gateway 返回两种策略:
允许
拒绝
用于业务逻辑的 Lambda 函数
用于实现业务逻辑、调用其他 lambda 函数、下游服务和数据库的 Lambda 函数。
其他 AWS 服务
CloudWatch - 使用 AWS CloudWatch 监控应用程序,并存储日志、仪表板和警报,这些也可用于创建报告和主动监控。
SQS 和 SNS - 使用 AWS SQS 存储异步消息,使用 SNS 向 lambda 函数推送通知。
Dynamo DB 或 RDS - 应用程序数据库
IAM - 身份和访问管理服务,用于定义角色和 AWS 资源访问权限
VPC、子网、安全组 - VPC 在安全网络中隔离 AWS 资源,子网划分 VPC 的组织,安全组使用防火墙规则控制流量。
架构和数据流
下面的架构图描述了所使用的 AWS 服务集、数据流以及与其他服务的集成。
在高层,客户端向亚马逊 API 网关发送 HTTP 请求,从而触发 AWS Lambda 函数。Lambda 函数处理请求,必要时与其他 AWS 服务交互(如用于数据存储的 DynamoDB),然后将响应返回给 API Gateway,API Gateway 再将响应发送给客户端。
数据流步骤
- 用户向带有有效授权标头(如 JWT 标记、API 密钥等)的 API 发出 HTTP 请求。
- 路由 53 会将请求转发到 API 网关,API 网关会被网络应用程序防火墙拦截。
- 网络应用程序防火墙配置了不同的规则,以保护应用程序免受网络攻击。如果防火墙检测到任何此类恶意请求,它会立即阻止该请求,否则就会将其转发到 API 网关。
- 与 API Gateway 一起配置的 Lambda Authorizer 会拦截请求,并对用户请求进行验证和授权。如果用户被授权访问底层资源,请求将被转发到前端控制器 lambda。
- 前端控制器 lambda 会将请求委托给相应的服务 lambda 函数。
- 根据业务逻辑,服务 lambda 会处理请求并向客户端返回相应的响应。
- 在处理请求时,服务 lambda 函数可以调用下游 REST API 或数据库。服务 lambda 函数还可以监听 SNS 队列或订阅 SNS。
- 身份和访问管理(IAM)服务用于为资源定义角色,并为这些角色提供访问权限。
- 所有资源都会将应用程序日志推送到 CloudWatch,用于监控和故障排除。
典型用例
- 无服务器架构可用于需要实时处理数据的事件驱动型应用,如数据流或通知处理。
- 微服务可以在无服务器架构上独立、隔离地实施和部署,以获得更好的可扩展性。
- 处理预定任务的应用程序可以在无服务器架构上实施和部署,并可根据特定时间触发。
- 成本是关键因素的所有用例都可以采用无服务器架构。
基础设施调配和部署
在企业中,除了用于开发和测试目的的生产环境外,还有多个可用环境。在不同的环境中创建同一套资源并手动跟踪配置更改是一项具有挑战性的任务,而且可能会引入错误。为了解决这个问题,可以使用 Terraform(基础设施即代码)。Terraform 有助于将资源从一个环境复制到另一个环境。此外,它还能跟踪基础设施的状态。 任何 CI/CD 工具(如 Jenkins 或 GitLab)都可以使用 Terraform 自动进行部署。
结论
总之,利用 AWS 无服务器架构开发 REST API 在可扩展性、成本效益和易管理性方面具有多重优势。通过采用无服务器方法,开发人员可以更加专注于构建强大的 API,而无需管理服务器的开销。AWS Lambda 的事件驱动模型可实现无缝扩展,确保您的 API 能够高效处理不同的工作负载。
今天先到这儿,希望对云原生,技术领导力, 企业管理,系统架构设计与评估,团队管理, 项目管理, 产品管理,信息安全,团队建设 有参考作用 , 您可能感兴趣的文章:
构建创业公司突击小团队
国际化环境下系统架构演化
微服务架构设计
视频直播平台的系统架构演化
微服务与Docker介绍
Docker与CI持续集成/CD
互联网电商购物车架构演变案例
互联网业务场景下消息队列架构
互联网高效研发团队管理演进之一
消息系统架构设计演进
互联网电商搜索架构演化之一
企业信息化与软件工程的迷思
企业项目化管理介绍
软件项目成功之要素
人际沟通风格介绍一
精益IT组织与分享式领导
学习型组织与企业
企业创新文化与等级观念
组织目标与个人目标
初创公司人才招聘与管理
人才公司环境与企业文化
企业文化、团队文化与知识共享
高效能的团队建设
项目管理沟通计划
构建高效的研发与自动化运维
某大型电商云平台实践
互联网数据库架构设计思路
IT基础架构规划方案一(网络系统规划)
餐饮行业解决方案之客户分析流程
餐饮行业解决方案之采购战略制定与实施流程
餐饮行业解决方案之业务设计流程
供应链需求调研CheckList
企业应用之性能实时度量系统演变
如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:
作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
该文章也同时发布在我的独立博客中-Petter Liu Blog。