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

能批量就不要并发。

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

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

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

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

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

有三种方法:

  • 改变方法名,比如getDataListWithLimitLength(List<Integer> idList)
  • 在接口说明文档中增加必要的注释说明。
  • 接口明确抛出超长异常,直白告知主调。
相关推荐
indexsunny22 分钟前
互联网大厂Java面试实战:Spring Cloud微服务与Redis缓存在电商场景中的应用
java·spring boot·redis·spring cloud·微服务·消息队列·电商
天远云服30 分钟前
Fintech硬核架构:解析天远贷前风险报告接口在Go微服务中的解析策略
微服务·架构·golang
indexsunny1 小时前
互联网大厂Java求职面试实战:Spring Boot与微服务在电商场景中的应用解析
java·数据库·spring boot·微服务·面试·消息队列·电商
没有bug.的程序员1 小时前
中台与微服务的关系:从技术迷雾到组织协同的深度解构
运维·微服务·devops·架构设计·数字化转型·中台架构·组织协同
小坏讲微服务1 小时前
微服务是个啥?SpringCloud又是弄啥嘞?
spring cloud·微服务·架构
oMcLin21 小时前
在RHEL 8系统上如何实现基于Docker的微服务架构,并进行自动化部署?
docker·微服务·架构
没有bug.的程序员21 小时前
技术中台的职责边界:基础能力抽象、统一组件平台与过度封装风险深度解析
微服务·云原生·研发效能·架构设计·中台架构·技术中台·sdk设计
马达加斯加D1 天前
微服务治理 --- 核心维度及常用技术栈组件
微服务·云原生·架构
叽里咕噜怪1 天前
docker与微服务的课程-CICD
docker·微服务·容器
DeepVis Research1 天前
【NLP/Microservices】2026年度语义逻辑编译与分布式微服务架构基准索引 (Benchmark Index)
算法·微服务·自然语言处理·架构·数据集·编译原理