当前位置: 首页 > news >正文

下载网站cms做华为网站的还有哪些功能

下载网站cms,做华为网站的还有哪些功能,怎么制作网站教程视频,中国科技成就作文素材排比句您可能正在开发某种形式的#xff08;Web / RESTful#xff09;API#xff0c;并且如果它是面向公众的#xff08;甚至是内部的#xff09;#xff0c;通常您希望以某种方式对其进行速率限制。 即#xff0c;限制一段时间内执行的请求数#xff0c;以节省资源并防止滥用… 您可能正在开发某种形式的Web / RESTfulAPI并且如果它是面向公众的甚至是内部的通常您希望以某种方式对其进行速率限制。 即限制一段时间内执行的请求数以节省资源并防止滥用。 这可能可以通过一些聪明的配置在Web服务器/负载均衡器级别上实现但是通常您希望速率限制器是特定于客户端的即API的每个客户端都应具有单独的速率限制以及客户端的方式被确定是不同的。 可能仍然可以在负载均衡器上执行此操作但是我认为将其放在应用程序级别上是有意义的。 我将使用spring-mvc作为示例但是任何Web框架都有插入拦截器的好方法。 因此这是一个spring-mvc拦截器的示例 Component public class RateLimitingInterceptor extends HandlerInterceptorAdapter {private static final Logger logger LoggerFactory.getLogger(RateLimitingInterceptor.class);Value(${rate.limit.enabled})private boolean enabled;Value(${rate.limit.hourly.limit})private int hourlyLimit;private MapString, OptionalSimpleRateLimiter limiters new ConcurrentHashMap();Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {if (!enabled) {return true;}String clientId request.getHeader(Client-Id);// let non-API requests passif (clientId null) {return true;}SimpleRateLimiter rateLimiter getRateLimiter(clientId);boolean allowRequest limiter.tryAcquire();if (!allowRequest) {response.setStatus(HttpStatus.TOO_MANY_REQUESTS.value());}response.addHeader(X-RateLimit-Limit, String.valueOf(hourlyLimit));return allowRequest;}private SimpleRateLimiter getRateLimiter(String clientId) {if (limiters.containsKey(clientId)) {return limiters.get(clientId);} else {synchronized(clientId.intern()) {// double-checked locking to avoid multiple-reinitializationsif (limiters.containsKey(clientId)) {return limiters.get(clientId);}SimpleRateLimiter rateLimiter createRateLimiter(clientId);limiters.put(clientId, rateLimiter);return rateLimiter;}}}PreDestroypublic void destroy() {// loop and finalize all limiters} } 这将按需初始化每个客户端的速率限制器。 另外在启动时您可以遍历所有已注册的API客户端并为每个客户端创建一个速率限制器。 如果速率限制器不允许更多请求tryAcquire返回false则取消“ Too many requests”太多请求并中止请求的执行从拦截器返回“ false”。 这听起来很简单。 但是有一些问题。 您可能想知道上面的SimpleRateLimiter在哪里定义。 我们将到达那里但首先让我们看看我们对速率限制器实现有哪些选择。 最受欢迎的似乎是番石榴RateLimiter 。 它具有简单的工厂方法可为您提供指定速率每秒允许的速率限制器。 但是它不能很好地适应Web API因为您无法使用预先存在的许可数量初始化RateLimiter。 这意味着在限制器允许请求之前应经过一段时间。 还有另一个问题–如果您每秒的许可数量少于一个例如如果您希望的速率限制为“每小时200个请求”则可以传递一个分数hourlyLimit / secondsInHour但仍然无法达到您的目的可以预期因为内部有一个“ maxPermits”字段可以将许可证数量的上限限制为比您想要的要少得多。 此外速率限制器不允许突发-您每秒恰好有X个许可但您不能长时间分散它们例如在一秒钟内有5个请求然后在接下来的几秒钟内没有请求。 实际上上述所有问题都可以解决但遗憾的是可以通过您无法访问的隐藏字段来解决。 多年来存在多个功能请求但是Guava不会更新速率限制器从而使其不适用于API速率限制。 使用反射您可以调整参数并使限制器工作。 但是这很丑陋并且不能保证它会按预期工作。 我在这里展示了如何使用每小时X许可爆破性和完整的初始许可来初始化番石榴速率限制器。 当我认为这样做的时候我看到tryAcquire()有一块tryAcquire() synchronized(..)块。 这是否意味着在简单地检查是否允许发出请求时所有请求都会彼此等待 那太可怕了。 因此实际上番石榴RateLimiter并不旨在用于网络API速率限制。 也许保持功能贫乏是Guava劝阻人们不要滥用它的方法吗 这就是为什么我决定根据Java信号量自己实现一些简单的事情。 这是朴素的实现 public class SimpleRateLimiter {private Semaphore semaphore;private int maxPermits;private TimeUnit timePeriod;private ScheduledExecutorService scheduler;public static SimpleRateLimiter create(int permits, TimeUnit timePeriod) {SimpleRateLimiter limiter new SimpleRateLimiter(permits, timePeriod);limiter.schedulePermitReplenishment();return limiter;}private SimpleRateLimiter(int permits, TimeUnit timePeriod) {this.semaphore new Semaphore(permits);this.maxPermits permits;this.timePeriod timePeriod;}public boolean tryAcquire() {return semaphore.tryAcquire();}public void stop() {scheduler.shutdownNow();}public void schedulePermitReplenishment() {scheduler Executors.newScheduledThreadPool(1);scheduler.schedule(() - {semaphore.release(maxPermits - semaphore.availablePermits());}, 1, timePeriod);} } 它需要一定数量的许可允许的请求数量和一段时间。 时间段为“ 1 X”其中X可以是每秒/分钟/小时/每天-取决于您希望如何配置限制-每秒每分钟每小时每天。 调度程序每1 X补充所获得的许可证。 无法控制突发事件客户端可以用快速连续的请求来花费所有许可没有热身功能没有逐步的补充。 根据您的需要这可能并不理想但这只是一个基本的速率限制器它是线程安全的没有任何阻塞。 我编写了一个单元测试以确认限制器的行为正确并且还对本地应用程序进行了性能测试以确保遵守限制。 到目前为止它似乎正在工作。 有其他选择吗 好吧是的–像RateLimitJ这样的库使用Redis来实现速率限制。 但是这意味着您需要设置和运行Redis。 对于“简单地”进行限速似乎是开销。 另一方面限速将如何在一组应用程序节点中正常工作 应用程序节点可能需要一些数据库或八卦协议来共享有关剩余的每个客户端许可请求的数据 不必要。 解决此问题的一种非常简单的方法是假设负载平衡器在节点之间平均分配负载。 这样您只需要将每个节点上的限制设置为等于总限制除以节点数即可。 它不是很精确但是您很少需要做到这一点–允许5-10个以上的请求不会终止您的应用程序允许5-10个以下的请求对用户来说并不算太大。 但是那将意味着您必须知道应用程序节点的数量。 如果您使用自动缩放例如在AWS中则节点数可能会根据负载而变化。 在这种情况下通过调用AWS或其他云提供商API来获取节点中的节点数而不是配置硬编码的许可数补给排定的作业可以即时计算“ maxPermits”。当前的自动缩放组。 这比仅支持Redis部署要简单得多。 总的来说我很惊讶没有一种“规范的”方式来实现速率限制在Java中。 也许限制速率的需求并不像看起来那样普遍。 或者它是手动实施的-通过暂时禁止使用“资源过多”的API客户端。 翻译自: https://www.javacodegeeks.com/2017/07/basic-api-rate-limiting.html
http://wiki.neutronadmin.com/news/397064/

相关文章:

  • 长春 网站 设计公司深圳黄页信息网
  • 刚做还网站第一时间抓取vscode怎么做网页
  • 企业网站建设内容规划wordpress 游戏网页
  • 微信官方网站首页成都网站建设 冠辰网站建设
  • 好看的网站色彩搭配wordpress主题tstyle
  • 自适应网站是什么五易网络
  • 郑州响应式建站高新区规划建设局网站
  • 重庆网站备案公司新丝路网站建设
  • 网站统计 中文域名去大连需要下载哪些软件
  • 学编程做网站wordpress迁移修改域名
  • 叫外包公司做网站不肯给源代码的网站开发如何找甲方
  • php网站开发实战教程安徽外经建设集团网站
  • 多用户智能网站建设源码在线教育网站开发文档
  • 关于网站开发的文献设计素材网站情人节
  • 凡科网做网站贵吗怎么自己创建一个网站
  • 纺织面料做哪个网站好山西建设注册中心网站
  • 齐齐哈尔企业网站排名优化合肥市蜀山区做个网站多少钱
  • 武邑网站建设价格app开发定制开发
  • 网站用户反馈托管管理系统app
  • 网站升级建设费用吗福州哪里会网站制作的
  • 手机靓号网站建设线上线下相结合的营销模式
  • 网站开发用什么系统比较好360免费wifi怎么安装
  • 南通做网站优化个人网站备案能做什么内容
  • 自己做电视视频网站关于网站建设的论坛
  • 建设银行长沙招聘网站wordpress get_most_viewed
  • 杭州 电子商务网站建设 网络服务网站建设有哪几种形式
  • 网站开发与设计多少钱一个网站什么是嵌入式软件工程师
  • 标准网站是哪个创建网页的三种方法
  • 如何诊断网站为何被降权文化建设包括哪些
  • 专业做家电经销的网站如何建设购物网站