一. 微服务

二. 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

  1. curl localhost:8001/apis/

3.2.2 加入 api

单个加入:

  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:

  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

  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 与 Kong的更多相关文章

  1. 微服务架构中API网关的角色

    [上海尚学堂的话]:本文主要讲述了Mashape的首席技术执行官Palladino对API网关的详细介绍,以及API网关在微服务中所起的作用,同时介绍了Mashape的一款开源API网关Kong. A ...

  2. AspNetCore微服务下的网关-Kong(一)

    Kong是Mashape开源的高性能高可用API网关和API服务管理层.它基于OpenResty,进行API管理,并提供了插件实现API的AOP.Kong在Mashape 管理了超过15,000 个A ...

  3. 微服务架构中APIGateway原理

    背景 我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest ...

  4. Kong 微服务网关在 Kubernetes 的实践

    来源:分布式实验室译者:qianghaohao本文主要介绍将 Kong 微服务网关作为 Kubernetes (https://www.alauda.cn)集群统一入口的最佳实践,之前写过一篇文章使用 ...

  5. 谈谈微服务中的 API 网关(API Gateway)

    前言 又是很久没写博客了,最近一段时间换了新工作,比较忙,所以没有抽出来太多的时间写给关注我的粉丝写一些干货了,就有人问我怎么最近没有更新博客了,在这里给大家抱歉. 那么,在本篇文章中,我们就一起来探 ...

  6. 微服务中的 API 网关(API Gateway)

    API 网关(API Gateway)提供高性能.高可用的 API 托管服务,帮助用户对外开放其部署在 ECS.容器服务等云产品上的应用,提供完整的 API 发布.管理.维护生命周期管理.用户只需进行 ...

  7. API Gateway微服务

    微服务中的 API 网关(API Gateway)   前言 又是很久没写博客了,最近一段时间换了新工作,比较忙,所以没有抽出来太多的时间写给关注我的粉丝写一些干货了,就有人问我怎么最近没有更新博客了 ...

  8. 微服务SpringCloud+Docker入门到高级实战(教程详情)

    第一章 课程介绍和学习路线 1.微服务架构SpringCloud课程介绍 简介:课程介绍和课程大纲讲解,讲课风格和重点内容理解技巧 2.技术选型和学后水平 简介:课程所需基础和技术选型讲解,学完课程可 ...

  9. 小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介

    笔记 ============================================= SpringCloud课程笔记.txt 第一章 课程介绍和学习路线 1.微服务架构SpringClou ...

随机推荐

  1. SQL Server connect to MySQL SQL Server通过LinkServer访问MySQL数据库,并操作mysql数据库代码

    SQL Server 中需要访问MySQL的数据,可以通过调用MySQL的ODBC驱动,在SQL Server中添加LinkServer的方式实现. 1.从MySQL网站下载最新的MySQL ODBC ...

  2. 9、java5线程池之定时任务线程池newScheduledThreadPool与newSingleThreadScheduledExecutor

    JDK文档描述 newSingleThreadScheduledExecutor() 创建一个单线程执行程序,它可安排在给定延迟后运行命令或者定期地执行.(注意,如果因为在关闭前的执行期间出现失败而终 ...

  3. java 自增和自减运算符

    /** 自增和自减运算符: ++: 如果是++b,则表示先对变量b+1,再执行其他的操作: 如果是b++,则表示先执行表达式操作,再对变量自身+1 --: 用法和++相同 */ //Test.java ...

  4. XPages访问关系型数据库技术与最佳实践

    XPage 对于 Domino 开发人员的一大好处就是能够很方便和高效的访问关系型数据库.本文通过实例代码展现了在 XPage 中访问关系型数据库的具体步骤 , 同时讲解了一些在 XPage 中高效访 ...

  5. ssh无法登录,提示Pseudo-terminal will not be allocated because stdin is not a terminal.

    当远程通过ssh登录主机时出现Pseudo-terminal will not be allocated because stdin is not a terminal. 错误   字面意思是伪终端将 ...

  6. Publish to a Linux Production Environment

    Publish to a Linux Production Environment By Sourabh Shirhatti In this guide, we will cover setting ...

  7. \u Unicode和汉字转化

    介绍 \uxxxx这种格式是Unicode写法,表示一个字符,其中xxxx表示一个16进制数字,范围所0-65535. Unicode十六进制数只能包含数字0-9.大写字母A-F或者小写字母A-F.需 ...

  8. Dockerfile 构建google-chrom应用

    cat Dockerfile.chrome FROM centos MAINTAINER zh******ech.cn ENV LANG en_US.UTF-8 RUN /bin/cp /usr/sh ...

  9. Jetty安装配置

    1) 从官方网站下载绿色版的jetty 下载地址:http://download.eclipse.org/jetty/ 我下载的是 jetty-distribution-7.5.4.v20111024 ...

  10. VC设置视图背景颜色方法

    视图的背景一般来说是白色的,在缺省情况下,它和系统定义的颜色COLOR_WINDOW是一致的.设计者一般会希望自己的程序可以让用户轻松地改变窗口背景颜色,或是用漂亮的图片来充填背景.我们可以用Wind ...