首页
学习
活动
专区
圈层
工具
发布

面试题:设计限流器

在设计速率限制器时,我们要问自己的一个重要问题是:速率限制器应该在哪里实现,在服务器端还是在网关中?没有绝对的答案。这取决于您公司当前的技术堆栈、工程资源、优先级、目标等。...以下是一些建议: 评估你当前的技术栈,如程序设计语言,缓存服务等。确保您当前的程序设计语言能够有效地在服务器端实现速率限制。 识别适合您业务需求的速率限制算法。...但是,如果您使用第三方网关,您的选择可能会受到限制。 如果您已经使用微服务架构,并在设计中包含API网关来执行身份验证、IP白名单等,您可以在API网关中添加速率限制器。 建立自己的限速服务需要时间。...如果没有达到限制,请求被发送到API服务器。同时,系统增加计数器并将其保存回Redis。 第三步:深入设计细节 速率限制规则是如何创建的?规则存储在哪里? 如何处理速率受限的请求?...从磁盘中提取规则并将其存储在缓存中。 当客户端向服务器发送请求时,该请求首先被发送到速率限制中间件。 限流中间件从缓存加载规则。它从Redis缓存中获取计数器和最后一次请求时间戳。

82110

使用 Node.js 搭建一个 API 网关

在许多情况下,您需要同时支持它们。 当客户想要使用您的微服务时,您可以面对的另一个挑战来自于通用的共享逻辑(如身份验证),因为您不想在所有服务中重新实现相同的事情。...您还可以在您的 API 网关中定义与多个服务配合的新端点。 ? API 网关作为微服务入口点 网关设计的升级 API 网关方法也可以帮助您分解您的整体应用程序。...速率限制和缓存 在前面的例子中,您可以看到我们可以把通用的共享逻辑(如身份验证)放在 API 网关中。除了身份验证之外,您还可以在 API 网关中实现速率限制,缓存以及各种可靠性功能。...超负荷的 API 网关 在实现您的 API 网关时,您应避免将非通用逻辑(如特定数据转换)放入您的网关。 服务应该始终拥有他们的数据域的全部所有权。...Node.js API 网关 当您希望在 API 网关中执行简单的操作,比如将请求路由到特定服务,您可以使用像 nginx 这样的反向代理。但在某些时候,您可能需要实现一般代理不支持的逻辑。

3.2K80
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    标准化API设计流程!

    当您需要在独立的服务/应用程序之间使用简单、统一的接口时,可以很好地工作。 缓存策略很容易实现。 缺点是它可能需要多次往返才能从不同的端点收集相关数据。...出于安全原因,我们需要在API网关中设置适当的规则。 我们需要在外部服务注册正确的URL。 如何提高API性能? 下图显示了提高API性能的5个常用技巧 分页 当结果的大小很大时,这是一种常见的优化。...像Redis这样的缓存将数据存储在内存中,因此数据访问比数据库快得多。 有效载荷压缩 可以使用gzip等压缩请求和响应,以便传输的数据大小要小得多。这加快了上传和下载的速度。...连接池 在访问资源时,我们经常需要从数据库中加载数据。打开正在关闭的数据库连接会增加大量开销。所以我们应该通过一个开放连接池连接到数据库。连接池负责管理连接生命周期。 如何设计安全有效的API?...在API网关中设计适当的HTTP头字段或设计有效的速率限制规则同样重要。

    1.1K10

    生产最佳实践

    如果您希望在使用量超过一定金额时收到通知,您可以通过使用限制页面设置通知阈值。当达到通知阈值时,组织所有者将收到电子邮件通知。...您还可以设置一个月度预算,以便一旦达到月度预算,任何后续的API请求都将被拒绝。请注意,这些限制是尽力而为的,使用量和限制之间可能会有5到10分钟的延迟。...您的应用程序需要设计为尽可能使用缓存数据,并在添加新信息时使缓存失效。您可以通过几种不同的方式来实现这一点。例如,您可以根据您的应用程序的实际情况将数据存储在数据库、文件系统或内存缓存中。...管理速率限制在使用我们的API时,理解和规划速率限制至关重要。提高延迟请查看我们关于延迟优化的最新指南。延迟是请求被处理并返回响应所需的时间。...在这种情况下,通过使用11.作为停止序列,您可以生成一个只有10个项目的列表,因为当达到11.时,完成将停止。阅读我们的帮助文章以了解有关如何执行此操作的更多上下文。

    69810

    【可用性设计】 GCP 面向规模和高可用性的设计

    一些应用程序垂直扩展,您可以在单个 VM 实例上添加更多 CPU 内核、内存或网络带宽来处理负载的增加。这些应用程序的可扩展性受到严格限制,您必须经常手动配置它们以应对增长。...您的服务流程有助于确定您是否应该过度宽容或过于简单化,而不是过度限制。...但是,控制对用户数据的访问的权限服务器组件最好关闭失败并阻止所有访问。当配置损坏时,此行为会导致服务中断,但可以避免在打开失败时泄露机密用户数据的风险。...当许多服务副本在崩溃或例行维护后重新启动时,副本会急剧增加启动依赖项的负载,尤其是当缓存为空且需要重新填充时。 在负载下测试服务启动,并相应地提供启动依赖项。...考虑通过保存从关键启动依赖项中检索到的数据的副本来优雅降级的设计。此行为允许您的服务使用可能过时的数据重新启动,而不是在关键依赖项出现中断时无法启动。

    1.7K20

    微服务网关——设计篇

    (如Guava的RateLimiter、nginx的limitreq模块,限制每秒的平均速率) 控制远程接口调用速率 控制MQ的消费速率 根据网络连接数、网络流量、CPU或内存负载等来限流。...如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。令牌桶算法通过发放令牌,根据令牌的rate频率做请求频率限制,容量限制等。...缓存 考虑到网关是集群化部署,所以优先使用集中式缓存方式,即网关中所有需要缓存的数据都集中进行缓存。使用常用的分布式缓存中间件即可,例如redis。...即经过一段时间,逐渐把请求压力增加到预设的值。 另外,当一个服务下线时,不能直接关闭服务,需要先关闭该服务的对外接口,当该服务处理完所有正在处理的请求并返回后,方可关闭服务。...对于网关自身也类似,当网关需要关闭时,不是直接结束网关进程,而是先关闭监听套接字,但是继续为当前连接的客户提供服务,当所有客户端的服务都完成后,再把进程关闭。

    69910

    【搜索引擎】提高 Solr 性能

    不,当您进一步阅读时,您会发现更多信息。 文档与磁盘大小 假设我们有大约 1000 万个文档。假设平均文档大小为 2 kb。...最初,您的磁盘空间将至少占用以下空间: 分片 一个集合拥有多个分片并不一定会产生更具弹性的 Solr。当一个分片出现问题而其他分片无论如何都可以响应时,时间响应或阻塞器将是最慢的分片。...让我们快速了解一下 Solr 是如何使用内存的。首先,Solr 使用两种类型的内存:堆内存和直接内存。直接内存用于缓存从文件系统读取的块(类似于 Linux 中的文件系统缓存)。...Solr 使用直接内存来缓存从磁盘读取的数据,主要是索引,以提高性能。 当它被暴露时,大部分堆内存被多个缓存使用。 JVM 堆大小需要与 Solr 堆需求估计相匹配,以及更多用于缓冲目的。...此行为是实例上可用内存问题的明确证据。 我们还可以监控一些高 CPU 实例进程,发现在 searcherExecutor 线程使用 100% 的 CPU 时占用了大约 99% 的堆。

    1K10

    系统设计:设计一个API限流器

    2.API可以通过集群访问,所以应该考虑不同服务器之间的速率限制。当单个服务器或多个服务器的组合中超过定义的阈值时,用户应该会收到一条错误消息。 非功能要求: 1.系统应具有高可用性。...节流是在给定的时间段内控制客户对API的使用的过程。节流可以在应用程序级别和/或API级别定义。当超过限制时,服务器返回HTTP状态“429-请求过多”。...读取总是可以先命中缓存;这将是非常有用的,一旦用户已经达到了他们的最大限度和速率限制器将只读取数据没有任何更新。 对于我们的系统来说,最近最少使用(LRU)是一个合理的缓存逐出策略。...基于IP的节流最大的问题是,当多个用户共享一个公共IP时,就像在网吧或使用同一网关的智能手机用户一样。一个坏用户可能会导致其他用户的限制。...缓存基于IP的限制时可能会出现另一个问题,因为黑客甚至可以从一台计算机上获得大量IPv6地址,所以让服务器耗尽跟踪IPv6地址的内存是很简单的! 用户:在用户身份验证之后,可以对API进行速率限制。

    5K102

    【STM32F407】第3章 RTX5操作系统介绍

    比如此时某个任务正在调用系统API函数,而且此时中断正好关闭了,也就是进入到了临界区中,这个时候如果有一个紧急的中断事件被触发,这个中断就不能得到及时执行,必须等到中断开启才可以得到执行,如果关中断时间超过了紧急中断能够容忍的限度...合作式 - 每个任务将一直运行,直到指示其将控制权传递给另一个任务或遇到阻塞式API函数。可以在要求固定执行顺序的应用程序中使用这种调度方式。 确定性的行为 - 并非每个 RTOS 都具有确定性。...RTX 提供完全确定性的行为,这意味着在预定义时间内(期限)处理事件和中断。您的应用程序可以依赖于一致且已知的进程计时。...这种方法非常适合小系统,但对较为复杂的应用程序会有限制。...确定性的行为 - 在定义的时间内处理事件和中断。 更短的 ISR - 实现更加确定的中断行为。 任务间通信 - 管理多个任务之间的数据、内存和硬件资源共享。

    97310

    【STM32H7】第3章 RTX5操作系统介绍

    比如此时某个任务正在调用系统API函数,而且此时中断正好关闭了,也就是进入到了临界区中,这个时候如果有一个紧急的中断事件被触发,这个中断就不能得到及时执行,必须等到中断开启才可以得到执行,如果关中断时间超过了紧急中断能够容忍的限度...合作式 - 每个任务将一直运行,直到指示其将控制权传递给另一个任务或遇到阻塞式API函数。可以在要求固定执行顺序的应用程序中使用这种调度方式。 确定性的行为 - 并非每个 RTOS 都具有确定性。...RTX 提供完全确定性的行为,这意味着在预定义时间内(期限)处理事件和中断。您的应用程序可以依赖于一致且已知的进程计时。...这种方法非常适合小系统,但对较为复杂的应用程序会有限制。...确定性的行为 - 在定义的时间内处理事件和中断。 更短的 ISR - 实现更加确定的中断行为。 任务间通信 - 管理多个任务之间的数据、内存和硬件资源共享。

    98230

    【STM32F429】第3章 RTX5操作系统介绍

    Ucos-II,Ucos-III和FreeRTOS内核的很多地方关中断操作,关中断操作对实时性有哪些危害呢?...比如此时某个任务正在调用系统API函数,而且此时中断正好关闭了,也就是进入到了临界区中,这个时候如果有一个紧急的中断事件被触发,这个中断就不能得到及时执行,必须等到中断开启才可以得到执行,如果关中断时间超过了紧急中断能够容忍的限度...合作式 - 每个任务将一直运行,直到指示其将控制权传递给另一个任务或遇到阻塞式API函数。可以在要求固定执行顺序的应用程序中使用这种调度方式。 确定性的行为 - 并非每个 RTOS 都具有确定性。...RTX 提供完全确定性的行为,这意味着在预定义时间内(期限)处理事件和中断。您的应用程序可以依赖于一致且已知的进程计时。...确定性的行为 - 在定义的时间内处理事件和中断。 更短的 ISR - 实现更加确定的中断行为。 任务间通信 - 管理多个任务之间的数据、内存和硬件资源共享。

    2.1K20

    系统设计面试的行家指南(上)

    之前的一项研究展示了网飞如何实施异步多数据中心复制[11]。 测试和部署:对于多数据中心设置,在不同位置测试您的网站/应用程序非常重要。...在设计速率限制器时,我们要问自己的一个重要问题是:应该在哪里实现速率限制器,在服务器端还是在网关中?没有绝对的答案。这取决于您公司当前的技术堆栈、工程资源、优先级、目标等。...如果没有达到限制,请求被发送到 API 服务器。同时,系统递增计数器并将其保存回 Redis。 第三步——设计深潜 图 4-12 中的高层设计没有回答以下问题: 限速规则是如何创建的?...避免被费率限制。用最佳实践设计您的客户端: 使用客户端缓存避免频繁的 API 调用。 了解限制,不要在短时间内发送太多请求。 包含捕捉异常或错误的代码,以便您的客户端能够从容地从异常中恢复。...当内存缓存已满或达到预定义的阈值时,数据将被刷新到磁盘上的 SSTable [9]中。注意:排序字符串表(SSTable)是一个由键值对组成的排序列表。

    1.1K11

    猫头鹰的深夜翻译:API网关的重要性

    网关提供了一种防御机制来识别DDoS攻击,例如当请求轰炸服务器时能防止中断核心服务。 你可以进行多层保护。比如,AWS提供AWS护盾的服务,在请求到达网关或者ELB之前识别使用峰值。...API控制和管理 请求限制和配额 你的API请求可能来自多个渠道,你可能希望根据与渠道或客户的服务协议对请求进行限制。...编排 您可能希望与来自不同微服务的不同API进行交互,然后聚合信息。您可以通过卸载组合服务的编排来在网关中编写实现此逻辑。...很多商业的Saas工具都提供管理软件的丰富的功能。这一切都取决于你如何设计系统并使其适合微服务架构。 当选择网关时,需要考虑如可扩展性,高可用性和弹性等因素。 开源网关如何?...另一种常见做法是将CDN设置为网关前的静态内容缓存层。 ? 网关反模式 我们已经讨论了很多关于API网关及其特性的问题,现在让我们来看看一些网关反模式。 确保API网关不会成为单点故障。

    1.1K10

    微服务架构入门(Micro-Architecture)

    Micro-Gateway微网关——以一种与微服务兼容的方式运行您的API网关。 所有这些架构都可以被归类到“微服务”的概念下,并被称为“微架构”。...在这篇文章中,我将介绍微型架构以及如何在这样的体系结构中使用微API网关。 ? Figure 1: 微服务架构 如上图所示,微型架构与任何类型的基础设施、供应商或技术无关。...然后,通过服务网格的控制来完成服务网格的配置。 我们还有三个菱形,它们演示了API微网关功能,这些网关提供了如安全、缓存、节流、速率限制和分析等功能,以供上层的微服务层使用。...如果我们使用服务网格的功能,它有一些功能,如负载平衡、服务发现和断路器,这些功能已经在微网关中可用。重要的是要了解这些功能可用于内部的、内部的微服务通信,而微网关则使用这些功能来对外公开服务。...另一方面,不推荐使用微API网关作为服务网格或微集成层的替代,尽管在某些情况下它可以达到目的。当您的系统在将来增长时,这种方法将引入更多的复杂性。

    1.5K50

    企业级风控架构:基于 Go 微服务集成借贷行为验证API构建实时决策引擎

    当大促流量洪峰到来时,我们需要在毫秒级时间内,调用第三方数据接口,评估用户的共债压力。借贷行为验证API(JRZQ8203)提供了极具价值的T0(当前)至T11(过去11个月)的时间序列数据。...本文将通过实战代码,演示如何构建一个高性能的借贷行为验证微服务。.../api/v1/JRZQ8203>"AccessID="您的Access-Id"AccessKey="您的16位Access-Key"//必须16字节)//===1.加密工具函数(AES-CBC-PKCS7...过去一年的总次数,用于判断用户是否为“老哥”或常贷客。4.应用价值分析:高并发风控网关利用Go的协程特性,我们可以将API集成到高性能的风控网关中。...时效性:结合API提供的T0-T11时间轴数据,您可以构建实时的“借贷压力监控仪表盘”。

    17610

    Redis的过期策略和内存淘汰策略配置说明

    在使用Redis作为LRU缓存,或者为实例设置了硬性内存限制的时候(使用 "noeviction" 策略)的时候,这个选项通常是很有用的。...You can select among(在...中) five behaviors: 最大内存策略:当内存大小达到最大限制时,redis是在下面五种行为中选择: volatile-lru -> Evict...当内存不足以容纳新写入数据时,新写入操作会报错。...此行为确保主节点和从节点保持一致,并且是您所希望的状态,但是,如果您的从节点是可写的,或者您希望从节点具有不同的内存设置, 并且您确定对从节点执行的所有写入都是等幂的,则可以更改此默认值(但请确保了解您正在执行的操作...因此,你要确保你的从节点监控器和有足够大的内存空间,确保在主节点在未达到最大内存限制前,从节点不会出现内存不足的情况。

    2.3K20

    Gradle 5.0 新特性介绍

    我们将最近版本中的主要改进分为以下几类: 更快的构建 细粒度的传递依赖关系管理 编写Gradle构建逻辑 更高效的内存级别执行 新的Gradle调用选项 新的Gradle任务和插件api 在文章末尾,您可以进一步了解如何升级到...细粒度的传递依赖关系管理 Gradle 5.0提供了几个新的特性来定制如何选择依赖项,以及改进的POM和BOM支持: 依赖约束允许您定义版本或版本范围来限制直接和传递依赖版本(Maven不支持)。...没有使用 Worker API 使用 Worker API 2.Improved task I/O 正确声明输入和输出对于正确的增量构建和构建缓存行为至关重要...当只执行一些操作时,配置所有这些操作是没有意义的。这就是Gradle 5.0的新配置避免api的帮助之处。通过在自定义任务中采用这些配置,大型项目可以节省高达10%的配置时间。 ?...Gradle 5.0为嵌套DSL元素提供了一流的api,在考虑用户如何配置任务时提供了更大的灵活性。 Gradle 5.0为计算(或延迟)任务输入和输出提供了额外的API便利。

    3.5K30

    【API 管理】什么是 API 管理,为什么它很重要?

    通过在整个 API 生命周期中简化访问并减少技术负担,API 管理支持可扩展性。 更严格的安全性 当多方(从内部开发人员到合作组织和客户)都可以访问 API 时,安全性成为关键焦点。...当您的应用程序是分布式和断开连接时,管理数据访问可能会很棘手。 您需要采取一切可能的措施来保护敏感数据,并确保正确分配和管理权限。...多个 API 实现和版本之间的一致性。 提高应用程序性能的内存管理和缓存机制。 保护 API 不被滥用并确保将正确权限授予正确人员的安全程序和策略。...通过考虑可靠性、灵活性、API 行为质量、速度和成本等因素来衡量 API 管理的成功与否。...您不必处理许可限制,例如用户限制、交易或处理能力。Agama API 中没有这样的限制。 API 已经在塑造我们的数字生态系统方面发挥着关键作用。

    2.6K40

    MySQL DBA之路 | 性能配置调优篇

    一、简介 数据库服务器需要CPU、内存、 磁盘和网络才能运行,了解这些资源对于DBA来说非常重要,因为任何的超载行为都可能成为限制因素,导致数据库服务器性能不佳。...另一方面,vm.dirty_ratio是可用于缓存脏页面的内存的硬限制。如果由于写入活动较高,后台进程无法快速刷新数据以跟上新的修改,则可以达到该目的。...对于更大的内存块 - mmap(),重要的是要记住,当涉及到这些变量时,任何变化都必须以基准为后盾,以确认新的设置确实是正确的。否则,你可能会降低它的表现,而不是增加它。...在其他变量的情况下,如果我们讨论的是争用问题,那么你可能会增加这些数据结构的实例/分区的数量,但是没有关于如何实现的规则,因此您需要观察工作量并决定此时争用不再是问题。...当每个InnoDB表都有一个单独的表空间时,管理MySQL会容易得多。例如,对于单独的表空间,可以通过删除表或分区来轻松回收磁盘空间。

    2.3K60

    Redis的键驱逐策略及数据过期删除策略

    Redis允许你指定驱逐策略,当该高速缓存的大小超过设定的内存限制时,自动驱逐键。每当客户端运行一个新的命令向该高速缓存添加更多数据时,Redis会检查内存使用情况。...请注意,当一个命令向该高速缓存添加大量数据时(例如,将一个大的集合交集存储到一个新的键中),这可能会暂时超过限制的大量数据。...以下各节说明了如何配置该高速缓存的内存限制,还介绍了可用的回收策略以及何时使用这些策略。...内存达到限制时键驱逐策略 当 Redis 的内存使用量达到 `maxmemory` 设置的限制时,Redis 会根据配置的 `maxmemory-policy` 参数决定如何处理。...常见的策略包括: • noeviction:默认策略,当达到内存使用限制且客户端尝试执行可能会使用更多内存的命令时返回错误。

    49210
    领券