Apache APISIX介绍

API网关的需求
两个基本功能,突出了对API的需求,即普通网络服务器无法提供的东西。

1)复杂的速率限制

速率限制是一种通用的能力,可以保护自己的信息系统免受DDoS攻击。然而,当你区分消费者时,例如免费与付费,你需要从简单的费率转移到更复杂的业务逻辑规则。
2)计费

如果支付了订阅费用,可能会访问一个有常规内容的资源。然而,当你的业务是销售数据时,你可能会根据数量消费来销售它们。虽然服务本身有可能嵌入计费功能,但它阻止了更多的分布式架构,即依靠几个服务来提供所需的数据。在这一点上,只有一个中央接入点可以可靠地测量和收取使用费。

3)负载均衡


image

Apache APISIX
目前行业中的API网关的一个非详尽列表包括:

Apache APISIX
Kong Gateway
Tyk
Gloo
Ambassador
Gravitee

APISIX于2019年6月捐赠给Apache基金会,并在2020年7月成为一个顶级项目。在技术方面,APISIX是基于流行的Nginx网络服务器,上面有一个Lua引擎(OpenResty)和一个插件架构。

KLzzEa4Bp

APISIX提供了几个核心对象:

Upstream

虚拟主机抽象,根据配置规则在一组给定的服务节点上执行负载均衡

Consumer

客户端的身份

Route

路由通过定义规则匹配客户的请求,然后根据匹配结果加载和执行相应的插件,并将请求转发给指定的Upstream

Service

一个可重复使用的对象,它同时绑定了一组插件和一个Upstream

apisix-objects-479x510

对象被存储在etcd中,这是一个分布式的键值存储,也被Kubernetes使用。Apache APISIX暴露了一个REST API,这样你就可以以一种技术无关的方式访问配置。在这里,我们请求所有现有的路由。

curl http://apisix:9080/apisix/admin/routes -H 'X-API-KEY: xyz' # 1

配置访问默认是受保护的。需要传递API密钥。

使用其他对象的对象可以定义它们或指向现有的引用。例如,人们可以将一个独立的Route定义为:

curl http://apisix:9080/apisix/admin/routes/1 -H 'X-API-KEY: xyz' -X PUT -d '
{
   "uri": "/foo",
   "upstream": {
     "type": "roundrobin",
     "nodes": {
       "127.0.0.1:8080": 1
     }
   }
}'

定义upstream

curl http://apisix:9080/apisix/admin/upstreams/1 -H 'X-API-KEY: xyz' -X PUT -d '
{
   "type": "roundrobin",
   "nodes": {
     "127.0.0.1:8080": 1
   }
}'

现在我们可以在一个新的Route中引用新创建的Upstream:

curl http://apisix:9080/apisix/admin/routes/2 -H 'X-API-KEY: xyz' -X PUT -d '
{
   "uri": "/bar",
   "upstream_id": 1
}'

初试牛刀

尝试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
https://github.com/Eficode/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

我们现在可以创建一个简单的路由。我们将代理http://httpbin.org/ 服务:

#!/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

image

从 API 网关核心功能点出发:

image

详细比较:

image

在API时代,网络服务器已经达到了另一个阶段。API网关。Apache APISIX就是这样一个网关。它不仅具有友好的Apache v2许可证,而且是Apache基金会的一部分。

使用Apache APISIX很容易。使用Docker,加上APISIX和Etcd镜像,就可以开始了。


今天先到这儿,希望对云原生,技术领导力, 企业管理,系统架构设计与评估,团队管理, 项目管理, 产品管管,团队建设 有参考作用 , 您可能感兴趣的文章:
领导人怎样带领好团队
构建创业公司突击小团队
国际化环境下系统架构演化
微服务架构设计
视频直播平台的系统架构演化
微服务与Docker介绍
Docker与CI持续集成/CD
互联网电商购物车架构演变案例
互联网业务场景下消息队列架构
互联网高效研发团队管理演进之一
消息系统架构设计演进
互联网电商搜索架构演化之一
企业信息化与软件工程的迷思
企业项目化管理介绍
软件项目成功之要素
人际沟通风格介绍一
精益IT组织与分享式领导
学习型组织与企业
企业创新文化与等级观念
组织目标与个人目标
初创公司人才招聘与管理
人才公司环境与企业文化
企业文化、团队文化与知识共享
高效能的团队建设
项目管理沟通计划
构建高效的研发与自动化运维
某大型电商云平台实践
互联网数据库架构设计思路
IT基础架构规划方案一(网络系统规划)
餐饮行业解决方案之客户分析流程
餐饮行业解决方案之采购战略制定与实施流程
餐饮行业解决方案之业务设计流程
供应链需求调研CheckList
企业应用之性能实时度量系统演变

如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:

MegadotnetMicroMsg_thumb1_thumb1_thu[2]

作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 该文章也同时发布在我的独立博客中-Petter Liu Blog。

posted on 2022-04-17 10:53  PetterLiu  阅读(1254)  评论(0编辑  收藏  举报