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

能批量就不要并发。

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

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

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

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

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

有三种方法:

  • 改变方法名,比如getDataListWithLimitLength(List<Integer> idList)
  • 在接口说明文档中增加必要的注释说明。
  • 接口明确抛出超长异常,直白告知主调。
相关推荐
lpfasd12317 小时前
gRPC 协议及其在 Nacos 微服务注册与配置中心中的应用
微服务·云原生·架构
编程彩机18 小时前
互联网大厂Java面试:从微服务到分布式事务的技术深度解析
java·spring cloud·微服务·分布式事务·saga·电商平台
Roye_ack18 小时前
【微服务 Day6】SpringCloud实战开发(RabbitMQ高级篇 + 死信交换机、延迟消息)
spring cloud·微服务·rabbitmq·mq
indexsunny18 小时前
互联网大厂Java求职面试实战:Spring Boot、微服务与Redis缓存技术解析
java·spring boot·redis·微服务·面试·电商·技术栈
编程彩机1 天前
互联网大厂Java面试:从Spring WebFlux到微服务的技术场景深度解析
微服务·java面试·resilience4j·技术解析·spring webflux
数据与后端架构提升之路1 天前
论微服务架构在电商交易系统中的设计与应用
微服务·架构·软考
十月南城1 天前
压测方法论——目标、场景、指标与容量评估的闭环
运维·web安全·ci/cd·微服务·云计算
梵高的代码色盘1 天前
互联网大厂Java求职面试实录与技术深度解析
java·spring·缓存·微服务·面试·互联网大厂·技术深度
代码写到35岁2 天前
【Java 单体架构改造 微服务 网关遇坑之 跨域配置】
java·微服务·架构
indexsunny2 天前
互联网大厂Java面试实战:从Spring Boot到微服务架构的三轮提问
java·spring boot·微服务·eureka·kafka·mybatis·spring security