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 流程

  1. 终端用户登录到前端 Web 应用
  2. 登录凭证发送到身份服务
  3. 在成功认证,JWT token 发行并返回
  4. 前端进行 API 调用带 JWT 在 Authorization 头部
  5. API 网关拦截请求并验证 JWT(签名、过期和声明)
  6. 如果有效,网关发送验证响应
  7. 验证请求转发到用户认证服务
  8. 服务处理请求并与数据库交互返回结果

API Key 流程

  1. 第三方开发者注册在开发者门户
  2. 门户发行 API Key
  3. 密钥也存储在安全密钥存储为后续验证
  4. 开发者应用发送未来 API 请求带 API Key 在头部
  5. API 网关拦截请求并发送密钥到 API Key 验证服务
  6. 验证服务验证密钥从密钥存储并响应
  7. 为有效 API keys,网关转发请求到公共 API 服务
  8. 服务处理它并访问数据库需要

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

版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。