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

能批量就不要并发。

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

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

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

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

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

有三种方法:

  • 改变方法名,比如getDataListWithLimitLength(List<Integer> idList)
  • 在接口说明文档中增加必要的注释说明。
  • 接口明确抛出超长异常,直白告知主调。
相关推荐
Alex艾力的IT数字空间7 小时前
设计既保持高性能又兼顾可移植性的跨平台数据结构
数据结构·分布式·算法·微服务·中间件·架构·动态规划
不爱笑的良田8 小时前
从零开始的云原生之旅(十四):Ingress Controller 实战:Nginx Ingress 深度解析
微服务·云原生·istio
失散138 小时前
架构师级别的电商项目——2 电商项目核心需求分析
java·分布式·微服务·架构·需求分析
小坏讲微服务11 小时前
Spring Cloud Alibaba整合SkyWalking的监控完整使用
java·微服务·架构·springcloud·监控·skywalking·java微服务
周杰伦_Jay13 小时前
【基于 Spring Cloud Alibaba 的微服务电商项目】完整实现思路
微服务·云原生·架构
7***533413 小时前
微服务分布式事务解决方案
分布式·微服务·架构
S***q19213 小时前
后端服务架构设计:从单体到微服务
java·微服务·架构
T***u33313 小时前
微服务书籍
java·微服务·架构
pengzhuofan13 小时前
微服务初识:核心概念与SpringCloud生态
spring cloud·微服务·架构
油丶酸萝卜别吃16 小时前
什么是分布式?什么是微服务?什么是集群?什么是单体?这些都是什么?又有什么关联?
分布式·微服务·架构