提高 API 性能的 5 大常见方法

提高 API 性能的 5 大常见方法

  • 结果分页

此方法用于通过将大型结果集流式传输回客户端来优化大型结果集,从而增强服务响应能力和用户体验。

  • 异步日志记录

这种方法涉及将日志发送到无锁缓冲区并立即返回,而不是在每次调用时处理磁盘。日志会定期刷新到磁盘,从而显著减少 I/O 开销。

  • 数据缓存

经常访问的数据可以存储在缓存中以加快检索速度。客户端在查询数据库之前检查缓存,Redis 等数据存储解决方案由于内存存储而提供更快的访问速度。

  • 有效负载压缩

为了减少数据传输时间,可以压缩请求和响应(例如,使用 gzip),从而加快上传和下载过程。

  • 连接池

此技术涉及使用打开连接池来管理数据库交互,从而减少每次需要加载数据时打开和关闭连接的开销。池管理连接的生命周期,以实现资源的高效使用。

REST API 与 GraphQL

在 API 设计方面,REST 和 GraphQL 各有优缺点。

  • REST API

使用 GET、POST、PUT、DELETE 等标准 HTTP 方法进行 CRUD作。

当您需要在单独的服务/应用程序之间建立简单、统一的接口时,效果很好。

缓存策略易于实现。

缺点是可能需要多次往返才能从单独的端点组装相关数据。

  • GraphQL

为客户端提供单一端点,以准确查询他们需要的数据。

客户端指定嵌套查询中所需的确切字段,服务器返回仅包含这些字段的优化有效负载。

支持用于修改数据的突变和用于实时通知的订阅。

非常适合聚合来自多个来源的数据,并且可以很好地满足快速发展的前端需求。

但是,它将复杂性转移到客户端,如果保护不当,可能会允许滥用查询

缓存策略可能比 REST 更复杂。

REST 和 GraphQL 之间的最佳选择取决于应用程序和开发团队的具体要求。GraphQL 非常适合复杂或频繁变化的前端需求,而 REST 则适合首选简单且一致的合约的应用程序。

令牌与 API 密钥

令牌(例如 JWT)和 API 密钥都用于身份验证和授权,但它们的用途不同。让我们了解两者的简化流程。

令牌流

  • 最终用户登录到前端 Web 应用程序。

  • 登录凭据将发送到身份服务。

  • 身份验证成功后,将颁发并返回 JWT 令牌。

  • 前端使用 Authorization 标头中的 JWT 进行 API 调用。

  • API 网关拦截请求并验证 JWT(签名、到期和声明)。

  • 如果有效,网关将发送验证响应。

  • 经过验证的请求将转发到用户身份验证的服务。

  • 该服务处理请求并与数据库交互以返回结果。

API 密钥流

  • 第三方开发人员在开发人员门户上注册。

  • 门户颁发 API 密钥。

  • 密钥还存储在安全密钥存储中,以供以后验证。

  • 开发者应用发送未来的 API 请求,并在标头中包含 API 密钥。

  • API 网关拦截请求并将密钥发送到 API 密钥验证服务。

  • 验证服务验证密钥存储中的密钥并做出响应。

  • 对于有效的 API 密钥,网关会将请求转发到公共 API 服务。

  • 服务会根据需要处理它并访问数据库。

AWS 技术堆栈

  • 前端

静态网站托管在 S3 上,并通过 CloudFront 在全球范围内提供服务,以实现低延迟。支持前端开发的其他服务包括 Amplify、Cognito 和 Device Farm。

  • API 层

API Gateway 和 AppSync 公开了具有内置安全性和限制功能的 REST 和 GraphQL API。在该领域工作的其他服务包括 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 Gateway 则处理安全流量。AWS Backup 提供跨区域的灾难恢复。

使数据库查询超快的 5 种数据结构

  • B-Tree 索引B-Tree

索引使用平衡的树结构,其中键和数据指针存在于内部节点和叶节点中。它们通过有序遍历支持高效的范围和点查询。

  • B+ 树索引

B+ 树索引将所有数据指针存储在叶节点中,而内部节点仅保存用于指导搜索的键。叶节点通过顺序访问链接以进行快速范围查询。

  • 哈希索引

哈希索引将哈希函数应用于搜索键,以直接定位指向数据行的指针的存储桶。它们针对相等搜索进行了优化,但不针对范围查询进行了优化。

  • 位图索引位

图索引使用每个可能值的位数组表示列值,从而允许通过按位运算进行快速筛选。它们非常适合低基数分类数据。

  • 倒排索引

倒排索引将每个唯一术语映射到包含该术语的行 ID 列表,从而实现快速全文搜索。

https://blog.bytebytego.com/p/ep172-top-5-common-ways-to-improve
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值