知识卡片

批量调用解决不了结果之间存在依赖的场景

普通读书笔记卡 · 1808.d

内容

面对多次远程调用往返开销大的问题,最直接的补救是批量调用接口,一次打包发送多个独立方法调用。但硬伤是批量内每个调用必须彼此独立,不能用一个调用结果当另一个的输入——先取好友列表再拿详情,第二步依赖第一步还没执行完就打包发出的结果,行不通。减少往返次数和支持调用依赖是两个层次的问题,后者需把逻辑推到服务器端执行。

参考来源

- 位置:《架构之美》第6章《数据增长:Facebook平台的架构》6.3.1节《批量方法调用》(源文件:程序之美系列套装(6册)团队之美、项目管理之美、架构之美、数据之美、测试之美、安全之美/_epub-src/OEBPS/Text/part0150.xhtml) - 结论依据:原文明确"这些批量操作很有效,但这也揭示了这种批量操作的主要问题。问题是,每次调用必须与其他调用的结果无关……有一种常见的情况仍然不能处理,即使用一次调用的结果作为下次调用的输入",并给出反例代码。 - 原始内容:这些批量操作很有效,但这也揭示了这种批量操作的主要问题。问题是,每次调用必须与其他调用的结果无关……当客户端发出users_getInfo请求时,$friends的内容显然还不存在。