`
m635674608
  • 浏览: 5043435 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

微服务,ApiGateway 与 Kong

 
阅读更多

一. 微服务

二. Api Gateway

三. Kong 的使用

 

一. 微服务

        对于一些传统的 大型项目,传统的方式会有一些缺陷,比如说 新人熟悉系统成本高(因为整个系统作为一个整体,彼此会有一定的牵连),项目重

启时间长,重构困难(对于一个新技术的引入,可能需要对整个项目推到重来),不易于更换新的技术,并且整个项目会慢慢变成巨无霸。

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

其他的一些微服务或者是客户。如下图1(把各个业务拆分):

图1

 

        对于微服务,目前 像Netflix ,亚马逊,ebay 等都有应用。

        当然,微服务也有一定的缺陷,比如说 每个服务(每个应用) 如果都有一个 数据库的话,那么如何维持 数据库事务。再比如说,服务之间的调用可

能会由于 网络的原因变得不可达,那么 代码中要额外增加 请求失败的代码。

 

二. Api Gateway

        api gateway 即 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

 

[html] view plain copy
 
  1. curl localhost:8001/apis/  

 

 

3.2.2 加入 api

单个加入:

[html] view plain copy
 
  1. 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:

 

 

[html] view plain copy
 
  1. 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

 

 

[html] view plain copy
 
  1. 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/

 

 

http://blog.csdn.net/pzxwhc/article/details/49873623

分享到:
评论

相关推荐

    谈谈微服务中的APIGateway-Savorboard-博客园1

    在微服务架构中,API Gateway 是一个至关重要的组件,它...在实际应用中,常见的API Gateway实现包括Kong、Netflix Zuul、Amazon API Gateway等,它们提供了丰富的功能和高度的可定制性,能够适应各种业务场景的需求。

    KONG OPENRESTY.pdf

    Kong 是一个开源的 API 管理层,用于保护、管理和扩展 API 和微服务。它提供了一种灵活的方式来管理 API 流量、身份验证、速率限制、分析和插件等功能。 API Gateway 模式是微服务架构中的一种常见模式,它作为一个...

    kong-docs-cn:微服务Api网关Kong最新文档中文版

    Kong是企业级的API网关,它提供了一个强大的平台,用于管理和保护微服务API。Kong的核心是基于Nginx,结合了OpenResty的Lua脚本能力,使其能够处理复杂的路由、认证、限流等任务。以下是关于Kong的一些关键知识点: ...

    银行核心系统用ESB,还是用微服务API网关好.docx

    关于金融行业的微服务API网关,目前有多种实现,如Spring Cloud的Kong、Orange、Netflix Zuul和SpringCloud Gateway等。虽然框架层面并未区分专门的金融和非金融应用,但在实际应用中,金融行业可能需要更严格的安全...

    Kong入门指南.pdf

    另一种是通过RESTful API,这是一个内部API,可用于管理Kong Gateway的配置和状态。RESTful API命令可以在集群中的任何节点上运行,确保了配置的一致性。 Kong还支持基于插件的模块化系统,允许开发者通过安装和...

    微服务Api网关框架1-10.7z

    网关技术选型.mp4):这部分可能会讨论不同的API网关选择,包括开源的Zuul、Spring Cloud Gateway、Kong等,以及自定义实现的可能性。Nginx因其高性能和灵活性,经常被选为API网关的实现工具。 3. **Nginx下载安装**...

    PyPI 官网下载 | tencentcloud-sdk-python-apigateway-3.0.553.tar.gz

    《PyPI官网下载的tencentcloud-sdk-python-apigateway-3.0.553.tar.gz详解》 PyPI(Python Package Index)是Python开发者的重要资源库,它提供了丰富的Python库,供全球开发者免费下载使用。本文将深入探讨在PyPI...

    微服务技术调研与实践

    通过API Gateway,可以简化客户端的交互,避免直接与多个服务通信的复杂性,同时提供额外的安全性和性能优化。 Kong是一个流行的开源API Gateway,基于Nginx和Lua插件,能够处理多种API管理和路由需求。不过,对于...

    微服务技术图谱.rar

    Zuul 和 Kong 是常用的API Gateway实现,它们可以作为微服务的统一接口,减轻了后端服务的压力。 4. **服务间通信**:服务间通信是微服务架构的关键,通常采用RESTful API或者RPC(远程过程调用)方式。Spring ...

    CentOS 7.1 离线安装API -kong所需依赖包

    在IT行业中,API(应用程序编程接口)是软件系统之间交互的关键工具,而Kong则是一个流行的微服务和API网关,提供安全、管理和分析等功能。本文将深入探讨如何在CentOS 7.1环境下离线安装Kong API网关及其依赖包。 ...

    百亿流量API网关的设计与实现.pdf

    我们从百亿流量交易系统 API 网关(API Gateway)的现状和面临问题出发,阐述微服务架构与 API 网关的关系,理顺流量网关与业务网关的脉络,带来最全面的 API 网关知识与经验。内容涉及: 百亿流量交易系统 API ...

    Kong入门指南.zip

    1. **Kong Gateway**: 主要处理API请求和响应,执行各种操作如认证、限速、缓存等。 2. **Kong DB**: 用于存储API配置、消费者、插件配置等数据,可以使用内置的Cassandra或PostgreSQL数据库。 3. **Kong Admin API*...

    WK系列开发框架-V6至V8 Java微服务+API网关+Vue3 Element-Plus 前后端分离.zip

    在WK框架中,可能采用了 Zuul、Kong 或 Gateway 等流行的API网关解决方案,以实现高效的数据传输和保护内部微服务的安全。 3. **Vue3**: Vue3 是一个前端JavaScript框架,以其易用性、高性能和强大的生态系统著称...

    微服务之应用网关

    应用网关(API Gateway)是微服务架构中的关键组件之一,负责将多个服务集成到一起并提供统一的接口。应用网关的功能包括: * 统一接入 * 流量管控 * 协议适配 * 安全维护 常见的应用网关包括: * Nginx+Lua * ...

    毕业设计Python基于Django的微服务的设计与实现项目源代码

    6. **API Gateway**:作为对外统一入口,处理路由、认证、限流等,如使用Zuul或Kong。 7. **消息队列**:可能用到RabbitMQ或Kafka等,实现服务间的异步通信和解耦。 8. **持续集成/持续部署(CI/CD)**:如Jenkins或...

    PyPI 官网下载 | pulumi_kong-2.7.0.tar.gz

    Kong API Gateway是一个流行的开源API管理平台,用于构建、运行和保护微服务和API。它支持多种云环境,并提供包括身份验证、速率限制、缓存等功能。Pulumi Kong库将Kong的强大功能与Pulumi的灵活性相结合,使开发者...

    lagom用于创建基于微服务系统的框架

    虽然 Lagom 不直接提供 API Gateway 功能,但可以与其他解决方案(如 Kong 或 Netflix Zuul)集成,以实现统一的入口点,处理身份验证、路由和限流等需求。 ### 7. **服务生命周期** Lagom 提供了一套完整的服务...

    PyPI 官网下载 | python-kong-0.4.0.tar.gz

    总之,python-kong-0.4.0是Python开发者与Kong API Gateway交互的重要工具,它简化了API管理和微服务网关的配置工作。无论是新手还是经验丰富的开发者,都可以借助这个库,更高效地利用Kong的功能来提升项目质量。

    kong-client:快速将Spring项目集成到kong api网关

    kong-client是kong的java sdk,它是一种高性能且可扩展的微服务API网关 先决条件 Spring3.2.5+ JDK 1.7以上 Kong2.0.1+ 特征 与springMVC的快速集成:适用于所有spring Web应用程序,只需较少的配置即可工作 服务...

    一个用Go编写的Kong插件集合.zip

    Go是一种流行的、静态类型的编程语言,因其高效、简洁和强大的并发支持而被广泛用于后端服务和微服务架构,包括开发API Gateway的插件。 在压缩包内的“说明.txt”文件,可能是对这个插件集合的详细文档,包括如何...

Global site tag (gtag.js) - Google Analytics