首页 > 其他分享 >起搏速率限制 API

起搏速率限制 API

时间:2022-08-31 03:44:06浏览次数:80  
标签:请求 起搏 API 起搏器 速率 执行

起搏速率限制 API

今天,大多数应用程序都是 API 驱动的。无论是创建天气预报、金融行情、体育比分提醒,还是翻译当地语言,您都需要连接 3rd 方 API 来访问您需要的数据。 API 通常被计量并限制使用。

设置场景

假设您要检索所有人的天气预报 19000 印度的(大约)邮政编码 (PIN)。一个请求只包含一个邮政编码的预测,最大API调用率为每秒50次。

你不能打 19000 立即请求检索数据。我们需要建立一种按节奏请求的机制。

这篇文章将演示如何创建一个 Pacer(在 Typescript 中),它可以接收所有对 pin 码的请求并以适当的速率访问 API。浏览器和节点端都将与代码兼容。

‍ 编码

最好将 API 调用逻辑和起搏逻辑分开。然后可以在不同的上下文中应用起搏。起搏逻辑很可能包含在一个类中。

起搏器界面

类步行者 接受请求并以给定的速度处理它们。它提供了一种接受请求的方法。请求包含执行它的可执行代码,Pacer 决定何时运行该代码。

使用起搏器

要添加请求,我们必须使用 步伐 实例化后的方法 起搏器 以所需的速率。

实施起搏器

首先,我已经展示了 步伐 方法实现为:

使用上述实现时,pace 方法会在接收到请求后立即执行,类似于没有 pacing 的代码。因此,我们需要更进一步。

微配料

请求必须被批处理并每秒执行一次以进行适当的实施。这种技术被称为微批处理:小批量,频繁执行。为了以可控的方式完成请求,我们需要一个 Queue 和一个 Executor。

队列

一个请求将是 一收到就排队。 我们还需要返回请求结果的 Promise。但是我们不能在不执行请求的情况下解决承诺。

一个 代理承诺, 它将在执行时捕获请求的结果,将被返回。我们需要将其解析和拒绝引用与请求一起存储。

执行

一个可靠的设计选择是将请求执行保持在一个单独的函数中,该函数执行多个排队的请求。现在,我们需要每秒触发一次。

设置超时() 是合理的构造使用比 设置间隔 (),与 设置超时 我们可以控制下一次执行。

调度逻辑

  1. 当一个请求被接受时,它可能会立即被处理,如果没有安排执行,它可能会延迟几毫秒。
  2. 在执行端,在触发请求后,我们检查队列大小,以便以 1s 的延迟调度下一次执行。

Scheduling Logic | Image is partly created using https://www.nomnoml.com

如果请求在一秒钟内完成,则执行工作;在现实世界中几乎不是这种情况。为了使其更有效,我们必须跟踪正在处理的请求数量并相应地调整速度。

下一步是什么?

这是实际的实施。另一种选择是包括重试或失败机制。我还没有想过实现这个功能;感谢您的反馈以改进它。

该代码可在以下位置访问:

[

GitHub - DM8tyProgrammer/api-pacer

您目前无法执行该操作。您使用另一个选项卡或窗口登录。您在另一个选项卡中退出或...

github.com

](https://github.com/DM8tyProgrammer/api-pacer)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/2062/34133103

标签:请求,起搏,API,起搏器,速率,执行
From: https://www.cnblogs.com/amboke/p/16641583.html

相关文章

  • VUE3.0+Antdv+Asp.net WebApi开发学生信息管理系统(完)
    在B/S系统开发中,前后端分离开发设计已成为一种标准,而VUE作为前端三大主流框架之一,越来越受到大家的青睐,Antdv是Antd在Vue中的实现。本系列文章主要通过Antdv和Asp.netWebA......
  • 【ElasticSearch】常用的JAVA API(长期更新)
    背景主要介绍和整理ElasticSearch常用的API环境SpringBoot2.1+MavenMaven依赖<dependency><groupId>org.elasticsearch</groupId>......
  • 【Azure API 管理】如何修改Azure APIM的管理员邮箱和组织名称
    问题描述当创建一个新的APIM服务时,会要求输入组织名称(Organizationname)和管理员邮箱(Administratoremail:Setthee-mailaddresstoreceiveallsystemnotificatio......
  • 手机在网状态API推荐
    APISpace的手机在网状态API我在这里推荐给大家,传入手机号码,查询该手机号的在网时长,返回时间区间,支持移动、电信、联通手机号码。应用场景话务中心电话营销。手机号......
  • 好用的日出日落API推荐
    今天给大家推荐一款很不错的API——APISpace的日出日落API,支持国内3400+个城市以及国际4万个城市,获取指定城市/地点每日日出时间、日落时间。 APISpace上面还有很......
  • C# Web Api HTTP Get (result as a string)
    为了方便调用,通常封装成一个通用的函数,如下:///<summary>///GetHttpasstringresult///</summary>///<paramname="url">RequestUrl.......
  • String常见API
    在最近Java的学习中,我发现了在日常的编程中会使用好多常见的String的API,现在准备做一个小分类。1.字符串的比较(equals与equalsIgnorecase)根据最近所学,我发现两个不同的S......
  • drf快速生成5个基本的api接口
    序列化器serializer:fromrest_frameworkimportserializersfrom.modelsimportStudentclassStudentModelSerializer(serializers.ModelSerializer):classM......
  • 【MindSpore易点通】如何将PyTorch源码转成MindSpore低阶APIP,并在Ascend芯片上实现单
    文章来源:华为云论坛_云计算论坛_开发者论坛_技术论坛-华为云1 概述本文将介绍如何将PyTorch源码转换成MindSpore低阶API代码,并在Ascend芯片上实现单机单卡训练。下图展......
  • 集合相关api (常用,方便查阅使用)
    说明:此笔记针对常用的集合操作,注重实际开发,方便开发中常规查阅,故文档会不断更新,形成集合表单。1.List转SetSet<String>stringList=newHashSet<String>(Arrays.as......