微服务设计原则——高性能:批量

能批量就不要并发。

如果调用方需要调用我们接口多次才能进行一个完整的操作,那么这个接口设计就可能有问题。

比如获取数据的接口,如果仅仅提供getData(int id)接口,那么使用方如果要一次性获取 20 个数据,它就需要循环遍历调用我们接口 20 次,不仅使用方性能很差,也无端增加了我们服务的压力,这时提供一个批量拉取的接口getDataBatch(List<Integer> idList)显然是必要的。

对于批量接口,我们也要注意接口的吞吐能力,避免长时间执行。

还是以获取数据的接口为例:getDataList(List<Integer> idList),假设一个用户一次传 1w 个id进来,那么接口可能需要很长的时间才能处理完,这往往会导致超时,用户怎么调用结果都是超时异常,那怎么办?限制长度,比如限制长度为 100,即每次最多只能传 100 个 id,这样就能避免长时间执行,如果用户传的 id 列表长度超过 100 就报异常。

加了这样限制后,必须要让使用方清晰地知道这个方法有此限制,尽可能地避免用户误用。

有三种方法:

  • 改变方法名,比如getDataListWithLimitLength(List<Integer> idList)
  • 在接口说明文档中增加必要的注释说明。
  • 接口明确抛出超长异常,直白告知主调。
相关推荐
jiayong231 天前
微服务无感迁移上云方案深度解析
微服务·云原生·架构
万里侯1 天前
Kubernetes多租户管理:实现资源隔离与安全的完整指南
微服务·容器·k8s
努力发光的程序员1 天前
互联网大厂Java面试故事:Spring Boot与微服务全栈技术实战问答
java·spring boot·spring cloud·微服务·kafka·hibernate·面试技巧
万里侯1 天前
云原生数据库管理:在Kubernetes上运行数据库的完整指南
微服务·容器·k8s
未若君雅裁1 天前
微服务限流实战:Nginx 漏桶与网关令牌桶
java·nginx·微服务
努力发光的程序员1 天前
互联网大厂Java面试问答及技术分析(涵盖Spring Boot及微服务)
java·微服务·面试·springboot·技术问答
万里侯1 天前
云原生监控体系建设:打造全方位的可观测性平台
微服务·容器·k8s
牧羊狼的狼2 天前
浅谈电商下单微服务流程
spring·spring cloud·微服务
魏杨杨2 天前
被流量逼出来的架构:从一台服务器到云原生的 17 次蜕变 —— 集群、缓存、MQ、微服务、Docker、K8S 的前世今生
微服务·k8s·负载均衡·ddd·分部署
雨辰AI2 天前
完整版信创微服务国产化架构实战:Nacos+Seata+Redis + 人大金仓(生产可落地)
数据库·redis·微服务·架构·政务