昨天在20:20 UTC,我们发布了我们API的2.5.5版呢除了一些依赖性升级和DEVEX改进/修复外,此版本还带来关于匿名API请求的重要更改。在v2.5.5之后,进行的任何媒体搜索都没有APIAPI或应用程序编程接口是一种软件中介机构,允许程序相互交互并以有限的,明确定义的方式共享数据。密钥不能每页要求超过20个结果。
为了减轻我们在API上看到的行为而进行了此更改开放式开放式是公开许可媒体的搜索引擎,包括照片,音频和视频。Openverse也是收藏的名称相关代码存储库组成了项目。,以及我们的能力部署从本地开发环境启动代码到生产Web服务器,以便访问者可以使用。API的新更改。
我们的API服务条款状态:
- 用户必须遵守所有费率限制,注册要求,并遵守OpenVerse API文档中的所有要求;
- 用户不得在Openverse目录中刮擦内容;
- 用户不得使用多台机器来规避费率限制,或者采取措施绕过我们的技术或安全措施;
- 用户不得以对API的其他用户产生负面影响或阻碍WordPress基金会提供其服务的能力的方式操作;
背景
从5月18日左右开始,我们看到了交通的大幅增加。
在过去30天内,对API.Openverse.openverse.
虽然数字人口统计(浏览器,用户代理,操作系统,设备类型等)却相当多,但一项功能删除了 - 这些请求都是通过使用page_size = 500
范围。
提出的总请求Api.openverse.Teangering在过去的30天中使用page_size = 500
范围
在过去30天的过程中,这些请求占我们总流量的近80%!虽然我们的应用程序旨在处理许多请求,但这是不是旨在处理每个请求查询,每页500个结果(默认页面大小为20)。因此,这对我们的Elasticsearch集群造成了重大压力,并最终造成了API服务结果能力的破坏。下图结合了我们的一些监视工具,以显示page_size = 500
请求和我们的Elasticsearch资源利用。
与Elasticsearch资源利用相比,请求计数
甚至在此版本之前,我们的应用程序都设置为节气门个体,匿名用户1请求/第二。这些page_size = 500
请求来自无数不同的主人。发起者能够通过使用大量机器来绕过单个节气门(也称为僵尸网络)。这些机器也主要绑在一个数据中心和一个单一的数据中心asn,这使我们相信这是由单个用户精心策划的。
这种行为显然违反了我们的服务条款,因为这是:
- 不使用注册的API键进行大规模使用
- 从Openverse刮擦数据
- 使用多台机器绕过应用程序节气门
- 消耗足够的大量资源,以影响开放式的其他用户
减轻
如上所述,我们部署从本地开发环境启动代码到生产Web服务器,以便访问者可以使用。现在可以返回的更改401未经授权对于任何对API的匿名请求,包括页面大小
大于20的违约。部署后几乎立即看到这种缓解措施在观察请求行为时生效:
总数page_size = 500
在6个小时的过程中提出的请求,通过退货状态代码分开
在上图中,您可以看到我们部署的v2.5.5(〜13:00 PST) - 数量200好
响应减少,数量401未经授权
反应大大增加了!最终所有page_size = 500
请求被拒绝为未经授权。
通过这种更改,我们能够成功减轻僵尸网络并将我们的资源消耗归还典型级别。通过一些Elasticsearch指标可以轻松地看到这一点:
Elasticsearch指标在过去12个小时内
尽管OpenVerse背后的意图是使公开许可的媒体易于访问,但我们目前没有能力使用户一次访问整个数据集。我们确实计划将来探索此选项。
我们很高兴这种缓解成功,我们将继续保持警惕,以确保用户不间断地访问OpenVerse!
#开放式,,,,#基础设施,,,,#API