5 种提高 API 性能方法
1. 结果分页(Result Pagination)
- 这个方法用于优化大结果集通过流式传输它们回客户端
- 增强服务响应能力和用户体验
2. 异步日志(Asynchronous Logging)
- 这个方法涉及发送日志到无锁缓冲区并立即返回
- 不是处理磁盘在每个调用
- 日志定期刷新到磁盘
- 显著减少 I/O 开销
3. 数据缓存(Data Caching)
- 频繁访问数据可以存储在缓存加速检索
- 客户端检查缓存先查询数据库
- 数据存储解决方案如 Redis 提供更快速访问由于内存存储
4. 负载压缩(Payload Compression)
- 为减少数据传输时间,请求和响应可以压缩(例如,使用 gzip)
- 使上传和下载过程更快
5. 连接池(Connection Pooling)
- 这个技术涉及使用开放连接池管理数据库交互
- 减少开销关联打开和关闭连接每次数据需要加载
- 池管理连接生命周期为高效资源使用
REST vs. GraphQL
REST
- 使用标准 HTTP 方法如 GET、POST、PUT、DELETE 为 CRUD 操作
- 工作良好当你需要简单、统一接口在单独服务/应用之间
- 缓存策略直接实现
- 缺点是需要多次往返组装相关数据从单独端点
GraphQL
- 提供单个端点为客户端查询精确数据它们需要
- 客户端指定确切字段需要在嵌套查询,服务器返回优化负载包含只那些字段
- 支持 Mutations 为修改数据和 Subscriptions 为实时通知
- 伟大为聚合数据从多个来源并工作良好与快速演进前端需求
- 然而,它转移复杂性到客户端并可以允许滥用查询如果不适当保护
- 缓存策略可以更复杂比 REST
最佳选择取决于应用具体需求和开发团队。GraphQL 是好 fit 为复杂或频繁变化前端需求,而 REST 适合应用简单和一致合同首选。
Token vs. API Key
Token 流程
- 终端用户登录到前端 Web 应用
- 登录凭证发送到身份服务
- 在成功认证,JWT token 发行并返回
- 前端进行 API 调用带 JWT 在 Authorization 头部
- API 网关拦截请求并验证 JWT(签名、过期和声明)
- 如果有效,网关发送验证响应
- 验证请求转发到用户认证服务
- 服务处理请求并与数据库交互返回结果
API Key 流程
- 第三方开发者注册在开发者门户
- 门户发行 API Key
- 密钥也存储在安全密钥存储为后续验证
- 开发者应用发送未来 API 请求带 API Key 在头部
- API 网关拦截请求并发送密钥到 API Key 验证服务
- 验证服务验证密钥从密钥存储并响应
- 为有效 API keys,网关转发请求到公共 API 服务
- 服务处理它并访问数据库需要
AWS 技术栈
前端
- 静态网站托管在 S3 并通过 CloudFront 服务全球为低延迟
- 其他服务支持前端开发包括 Amplify、Cognito 和 Device Farm
API 层
- API Gateway 和 AppSync 暴露 REST 和 GraphQL APIs 有内置安全和节流
- 其他服务工作在这个区域是 Lambda、ELB 和 CloudFront
应用层
- 这个层托管业务逻辑
- 一些服务重要在这个层是 Fargate、EKS、Lambda、EventBridge、Step Functions、SNS 和 SQS
媒体和文件处理
- 媒体上传到 S3,转码通过 Elastic Transcoder,分析使用 Rekognition 为审查
- CloudFront 签名 URL 确保安全交付视频和文件到认证用户
数据层
- 主要服务为这个层是 Aurora、DynamoDB、ElastiCache、Neptune 和 OpenSearch
安全和身份
- 一些 AWS 服务帮助在这个层是 IAM、Cognito、WAF、KMS、Secrets Manager 和 CloudTrail
可观察性和监控
- CloudWatch 监控日志、指标和警报
- X-Ray 提供请求路径追踪
- CloudTrail 捕获 API 调用
- Config 确保合规,GuardDuty 检测安全威胁
CI/CD 和 DevOps
- 关键服务使用在这个层是 CodeCommit、CodeBuild、CodeDeploy、CodePipeline、CloudFormation、ECR 和 SSM
多区域网络
- Route 53 和 Global Accelerator 确保快速 DNS 和全球路由
- VPC 分割网络而 NAT 和 Transit Gateways 处理安全流量流
- AWS Backup 提供灾难恢复跨区域
数据库索引类型
数据结构关键为数据库索引因为它们决定如何高效数据可以搜索、插入和检索,直接影响查询性能。
B-Tree 索引
- B-Tree 索引使用平衡树结构其中键和数据指针存在内部和叶子节点
- 支持高效范围和点查询通过有序遍历
B+ Tree 索引
- B+ Tree 索引存储所有数据指针在叶子节点,而内部节点只保存键引导搜索
- 叶子节点链接为快速范围查询通过顺序访问
Hash 索引
- Hash 索引应用哈希函数到搜索键直接定位桶带指针到数据行
- 它们优化为相等搜索但不为范围查询
Bitmap 索引
- Bitmap 索引表示列值使用位数组为每个可能值
- 允许快速过滤通过位操作
- 它们理想为低基数分类数据
Inverted 索引
- Inverted 索引映射每个唯一术语到行 ID 列表包含那个术语
- 启用快速全文搜索
本文为学习目的的个人翻译,译文仅供参考。
原文链接:EP172: Top 5 common ways to improve API performance。
版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。