提高 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