API的计量与限速 | 将一个Web API纳入API管理 |API Management学习第二篇

前言

本文仅代表作者的个人观点;

本文的内容仅限于技术探讨,不能作为指导生产环境的素材;

本文素材是红帽公司产品技术和手册;

本文分为系列文章,将会有多篇,初步预计将会有26篇。

一、实验背景

在本文中,我们将针对:API Management学习第一篇中编写的Restful API,进行纳管。

参考阅读:

通过Swagger管理API:API Management学习第一篇

在上一小节,我创建了一个restful API,运行在一个pod里,另外一个pod提供数据库。

测试product API服务是否接受请求并返回正确的响应:

返回结果:

二、3scale的安装

在本实验中,我们会利用3 scale做三件事情:

  • 使用3scale AMP公开Products API REST服务
  • 为基本和高级用户创建应用程序计划
  • 为基本用户应用速率限制以控制对API的访问

接下来,我们在现有的OCP上安装3 scale:

oc new-project $OCP_PROJECT_PREFIX-3scale-amp \ --display-name="3scale-amp" \ --description="3scale AMP component"

部署完毕后,pod如下:

登录刚安装好的3scale管理界面:

三、3scale上的基本配置

首先,定义一个API Service,该服务管理上一个实验中配置的Products API业务服务的访问权限。

接下来,创建application plan:

application plan用于授予对特定API和端点的访问权限,限制流量以及通过API使用获利。通过应用程序计划,您可以通过指定速率限制和定价规则来配置API的访问权限。所有申请必须与计划相关联。可以为API定义多个自定义应用程序计划。

接下来,创建另外一个application plan:

接下来,发布两个plan,并设置默认的plan:

定义帐户和用户

接下来,创建应用。

点击创建以后,app key会自动生成:

四、3scale上创建方法和映射

在本系列文章第一篇中,我们通过:http://editor.swagger.io,分析了api的swagger文件。接下来,我们可以使用对Products API的这种理解来定义3scale中的方法,并将这些方法映射到Products API公开的资源。

与此同时,在本实验的后续部分中,我们将使用这些方法来定义速率限制并收集每个Product API资源的利用率指标。

找到刚才创建的API,选择集成:

接下来,选择增加应用的URL。

定义新的metric和method:

增加新的method:

输入信息,创建新的方法:

按照同样的方法,再增加三个方法:

添加成功后,是这个样子:

接下来,创建mapping:

增加mapping如下:

接下来,再为剩下的三个方法增加映射:

增加完效果如下:

远程客户端将通过分配给的apicast阶段和生产服务的路由调用您的Products API。

3scale的默认安装包括到您的apicast服务的通用路由。 我们将删除这些通用路由,并替换为Products API更具体的路由。

创建edge路由:

分配API endpoint.

Private base URL: Route into the products API business service endpoint

这是其实是API 这个pod server的FQDN。

echo -en "\n\nhttp://products-api.david-products-api.svc.cluster.local:8080\n\n"

http://products-api.david-products-api.svc.cluster.local:8080

Staging public base URL: Route to the products APIcast staging endpoint

https://products-staging-apicast-david.apps.example.com:443

Production public base URL: Route to the products APIcast production endpoint

https://https://products-production-apicast-david.apps.example.com:443

API client:

成功:

五、限速

利率限制允许限制对API资源的访问。可以通过使用应用程序计划为单独的开发人员细分配置不同的限制。

一旦有了速率限制,这些限制就会控制开发人员在使用3scale对后端服务进行授权请求调用时收到的响应。限制在管理门户中配置,并在服务调用期间由APIcast网关强制执行。网关从3scale后端接收配置信息,其中包含每个服务中不同应用程序计划的速率限制。

步骤顺序如下:

  • APIcast每5分钟(或配置)从后端刷新最新的API配置。
  • APIcast为授权密钥和指标实现本地内存缓存。
  • 对于后端服务的每个入站请求,APIcast使用异步传输在3scale中向后端侦听器API发出authrep请求。
  • 来自3scale后端的authrep响应更新本地apicast缓存。
  • 如果后端确定已超过速率限制,则APIcast拒绝所有后续入站请求。

在本实验中,您将在Products API的上下文中检查速率限制。

您将创建一个名为ProductsBasicPlan的ApplicationPlan。此应用程序计划仅启用产品API的某些方法。

在本课程的后续实验中,我们会创建一个不同的应用程序计划(名为ProductsPremiumPlan),该计划将启用产品API的所有方法。

在Red Hat管理员门户的3scale中,验证您是否已登录,然后单击API选项卡。

展开Products API。

单击已发布的应用计划

选择ProductsBasicPlan:

我们可以看到添加的

接下来,我们限制创建和删除

对get product限速:

每个小时最多访问5次:

给getallproduct也创建限速:

更新plan:

测试限速:

通过curl测试:

curl "https://products-staging-apicast-david.apps.example.com:443/rest/services/products?user_key=da52bbc0240a9e56cbb6d70d77364a3f"

curl第二次的时候,会有报错,因为限速是一分钟一次:

访问另外一个endpoint的限速效果类似:

魏新宇

  • 红帽资深解决方案架构师
  • 专注开源云计算、容器及自动化运维在金融行业的推广
  • 拥有MBA、ITIL V3、Cobit5、C-STAR、TOGAF9.1(鉴定级)等管理认证。
  • 拥有红帽RHCE/RHCA、VMware VCP-DCV、VCP-DT、VCP-Network、VCP-Cloud、AIX、HPUX等技术认证。

原文发布于微信公众号 - 大魏分享(david-share)

原文发表时间:2018-07-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏风火数据

高级Java研发师在解决大数据问题上的一些技巧

众所周知, Java 在处理数据量比较大的时候,加载到内存必然会导致内存溢出,而在一些数据处理中我们不得不去处理海量数据,在做数据处理中,我们常见的手段是分解,...

14220
来自专栏FH云彩

折腾一下,用CentOS在B站直播

14040
来自专栏進无尽的文章

基础篇-服务器工作实现的浅析

对于一个前端开发的人员来说,了解服务器的基础知识,个人觉得是非常必要的,于是就有一个这篇侧重于Java的服务器相关知识的文章,只是简单介绍对于我也是一个拓展。

15420
来自专栏北京马哥教育

实战精华 | 搭建服务器的之后总结的一些个人经验

最近帮实验室装了两台服务器,计算用的服务器放在内网,通过一台堡垒机与外界相连。碰到很多小问题,在这里记录一下。 组建内网 这一部分没有太多好说的,堡垒机需要有两...

31340
来自专栏IT笔记

SVN自动化部署全流程之架构之美

公司一直没有一个完善的部署流程,基本都是通过上线打包以后SSH手动拖拽部署项目。 当然网上也有现成的持续集成工具,比如jenkins。Jenkins是一个开源软...

42070
来自专栏Java架构沉思录

基于Netty的百万级推送服务设计要点

最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题。问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可...

33420
来自专栏陈龙涛的专栏

分布式锁服务关键技术和常见解决方案

网络通信的时延和不可靠,加上分布式环境中各种故障的常态化发生,导致实现一个可靠的分布式锁服务需要考虑更多更复杂的问题。

1.1K40
来自专栏coding

django2.0入门教程第一节启动开发模式下的服务器

17220
来自专栏新智元

入坑搞定Python多种任务,Go 1.11 新版本正式发布!

新版本在工具链、运行时和库等方面有很多变化和改进,兼容性方面也依然会兼容旧版本。此外,新版本增加了两个最激动人心的新特性:对模块(modules)和WebAss...

17010
来自专栏高性能服务器开发

(八)高性能服务器架构设计总结1——以flamigo服务器代码为例

这篇文章算是对这个系列的一个系统性地总结。我们将介绍服务器的开发,并从多个方面探究如何开发一款高性能高并发的服务器程序。

18020

扫码关注云+社区

领取腾讯云代金券