首页 > 编程知识 正文

gateway统一filter,开源网关 api gateway

时间:2023-05-06 11:05:45 阅读:161089 作者:3602

一.微服务

二. API网关

三. Kong的使用

一. 微服务

在以往的一些大型项目中,新人熟悉系统需要花费成本(因为整个系统作为整体相互有一定的关系),项目繁重等,传统方法存在一些缺点

启动时间长,难以重建,可能需要重新进行整个项目。 不能轻易更换新技术,整个项目会慢慢变成巨无霸。

所以有微服务这个概念。一个服务实现一个不同的特性或者功能。每一个独立的微服务都是一个小型应用。有些微服务器可能会暴露一些api给你

还有其他的微服务和客户。 以下图1 (分割各项业务) :

图1

关于微服务,目前Netflix、亚马逊、ebay等正在使用。

当然,微服务也有一定的缺陷。 例如,如果每个服务(每个APP应用程序)都有一个数据库,如何维护数据库事务? 例如,可以在服务之间调用

如果由于网络的原因而无法到达,就必须将请求失败的代码添加到代码中。

二. Api Gateway

api网关或api网关。 所有请求首先通过这个网关。 这类似于前端控制器模式和Facade模式。 如下图2所示:

图2

由于所有的请求会先经过这个 api 网关,所以 可以在 这里做 权限控制,安全,负载均衡,请求分发,监控等等

        那么,为什么要用 这个 api gateway 这个东西,主要原因在于 一个客户可以直接请求每一个服务。每一个服务都有一个 url。这些url 会和 负载均

衡设备相映射。为了得到产品信息,客户需要发很多的 request 请求。这样就不是很好。另外一个问题就是 可能协议不同,不一定是 http,比如说可能

由于防火墙或者什么的限制,可能需要用到其他的协议。再另外,以后重构的时候可能要拆分接口,或者合并接口,由于客户端和 API 直接打交道,所以

比较难。

        所以说,如上 图1 加入了 api gateway 就可以变为 如下图3所示:

图3

        当然,任何技术都有缺陷, api gateway 也是一样,比如说 容易成为性能瓶颈。


三. Kong 的使用

        Kong 是一个现成 的 api gateway 的解决方案,它在 nginx 上进行了开发。

        api gateway 的实现方式有很多种,比如说 JVM 上可以用基于NIO 的框架比如Netty,Vertx,Spring Reactor,JOSS Undertow。现在一个比较流程的没有基于 JVM 的就是 NodeJs。其他的还有 Nginx Plus。

        以下介绍 Kong 的使用。

3.1 安装 Kong

3.2 加入 API

3.1 安装 Kong

    参考:https://getkong.org/install/ ,里面写得比较详细了,但是要预先安装一个 Cassandra 数据库(介绍:http://cassandra.apache.org/)。安装之后,Kong 项目会监控两个端口,一个是 8000,一个是 8001。 8000端口是可以给用户访问,就是说用户发送请求先到 Kong 项目的 8000 端口,然

后Kong 项目帮你转到你的后端应用api。 8001 端口是管理端口,比如说,管理员可以通过 8001端口来得到你加入过的 api。


3.2 加入 API

        参考文档:https://getkong.org/docs/0.5.x/admin-api/ , 里面介绍了 api 的管理,包括 增删查改。下面介绍我第一次 使用时 还有有些不清楚的点:

3.2.1  列出 所加过的 api

curl localhost:8001/apis/


3.2.2 加入 api

单个加入:

curl -i -X POST --url http://localhost:8001/apis/ --data 'upstream_url=http://camp.uats.cc' --data 'request_path=login'
上面这段命令表示:

--url:http://localhost:8001/apis/ 固定的,加入 api 就得写这个,表示给 kong管理。

upstream_url:表示我们的网站。相当于一个请求前缀。

request_path:就是具体我们的 api。

   利用request_host 部署全部的 api:

curl -i -X POST --url http://localhost:8001/apis/ --data 'upstream_url=http://183.131.76.124:4100/' --data 'request_host=183.131.76.122'
3.2.3 删除 api

curl -i -X DELETE localhost:8001/apis/00f90ca9-cf2d-4830-c842-3b90f6cd08af后面 这个串表示 加入的api的 id。

四. 参考:

1. API Gateway 模式: http://microservices.io/patterns/apigateway.html

2. Nginx: https://www.nginx.com/blog/introduction-to-microservices/

3. Kong 项目官网:https://getkong.org/






版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。