Apache APISIX介绍
API网关的需求
两个基本功能,突出了对API的需求,即普通网络服务器无法提供的东西。
1)复杂的速率限制
如果支付了订阅费用,可能会访问一个有常规内容的资源。然而,当你的业务是销售数据时,你可能会根据数量消费来销售它们。虽然服务本身有可能嵌入计费功能,但它阻止了更多的分布式架构,即依靠几个服务来提供所需的数据。在这一点上,只有一个中央接入点可以可靠地测量和收取使用费。
3)负载均衡
目前行业中的API网关的一个非详尽列表包括:
Apache APISIX
Kong Gateway
Tyk
Gloo
Ambassador
Gravitee
APISIX于2019年6月捐赠给Apache基金会,并在2020年7月成为一个顶级项目。在技术方面,APISIX是基于流行的Nginx网络服务器,上面有一个Lua引擎(OpenResty)和一个插件架构。
APISIX提供了几个核心对象:
Upstream
虚拟主机抽象,根据配置规则在一组给定的服务节点上执行负载均衡
Consumer
客户端的身份
Route
路由通过定义规则匹配客户的请求,然后根据匹配结果加载和执行相应的插件,并将请求转发给指定的Upstream
Service
一个可重复使用的对象,它同时绑定了一组插件和一个Upstream
对象被存储在etcd中,这是一个分布式的键值存储,也被Kubernetes使用。Apache APISIX暴露了一个REST API,这样你就可以以一种技术无关的方式访问配置。在这里,我们请求所有现有的路由。
配置访问默认是受保护的。需要传递API密钥。
使用其他对象的对象可以定义它们或指向现有的引用。例如,人们可以将一个独立的Route定义为:
定义upstream
现在我们可以在一个新的Route中引用新创建的Upstream:
初试牛刀
尝试Apache APISIX的最快捷方式是通过Docker。Apache APISIX的配置依赖于etcd,所以让我们使用Docker Compose:
version: "3"
services:
apisix:
image: apache/apisix:2.12.1-alpine
command: sh -c "/opt/util/wait-for etcd:2397 -- /usr/bin/apisix init && /usr/bin/apisix init_etcd && /usr/local/openresty/bin/openresty -p /usr/local/apisix -g 'daemon off;'"
volumes:
- ./apisix_log:/usr/local/apisix/logs
- ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro
- ./util:/opt/util:ro
ports:
- "9080:9080"
- "9091:9091"
- "9443:9443"
depends_on:
- etcd
etcd:
image: bitnami/etcd:3.5.2
environment:
ETCD_ENABLE_V2: "true"
ALLOW_NONE_AUTHENTICATION: "yes"
ETCD_ADVERTISE_CLIENT_URLS: "http://0.0.0.0:2397"
ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2397"
ports:
- "2397:2397"
引用了wait-for
我们在config.yaml文件中配置了Apache APISIX。一个最小的配置文件看起来像这样:
apisix:
node_listen: 9080
allow_admin:
– 0.0.0.0/0
admin_key:
– name: “admin”
key: edd1c9f034335f136f87ad84b625c8f1
role: admin
etcd:
host:
– “http://etcd:2397″
prefix: “/apisix”
timeout: 30!/bin/sh
curl http://localhost:9080/apisix/admin/routes -H ‘X-API-KEY: edd1c9f034335f136f87ad84b625c8f1’ -X POST -d ‘
{
“name”: “Route to httpbin”,
“uris”: [“/*”],
“upstream”: {
“type”: “roundrobin”,
“nodes”: {
“httpbin.org”: 1
}
}
}’
我们现在可以测试这个路由了,http://httpbin.org/ 提供了几个端点。命名合适的/anything端点返回请求数据中传递的任何内容。我们可以使用这个端点来检查与测试所有的工作是否符合预期:
curl ‘localhost:9080/anything?foo=bar&baz’ -X POST -d ‘{ “hello”: “world” }’ -H ‘Content-Type: application/json’
输出结果应与以下内容非常相似:
{
“args”: {
“baz”: “”,
“foo”: “bar”
},
“data”: “{ \”hello\”: \”world\” }”,
“files”: {},
“form”: {},
“headers”: {
“Accept”: “/“,
“Content-Length”: “20”,
“Content-Type”: “application/json”,
“Host”: “localhost”,
“User-Agent”: “curl/7.79.1”,
“X-Amzn-Trace-Id”: “Root=1-6239ae8e-633a33fb0d5fe44e354c9149”,
“X-Forwarded-Host”: “localhost”
},
“json”: {
“hello”: “world”
},
“method”: “POST”,
“origin”: “172.21.0.1, 176.153.7.175”,
“url”: “http://localhost/anything?foo=bar&baz”
}
对比KONG
从 API 网关核心功能点出发:
详细比较:
在API时代,网络服务器已经达到了另一个阶段。API网关。Apache APISIX就是这样一个网关。它不仅具有友好的Apache v2许可证,而且是Apache基金会的一部分。
使用Apache APISIX很容易。使用Docker,加上APISIX和Etcd镜像,就可以开始了。
今天先到这儿,希望对云原生,技术领导力, 企业管理,系统架构设计与评估,团队管理, 项目管理, 产品管管,团队建设 有参考作用 , 您可能感兴趣的文章:
如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:
Original: https://www.cnblogs.com/wintersun/p/16155175.html
Author: PetterLiu
Title: Apache APISIX云原生网关介绍
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/553934/
转载文章受原作者版权保护。转载请注明原作者出处!