博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
API Gateway(API网关)介绍
阅读量:2065 次
发布时间:2019-04-29

本文共 1667 字,大约阅读时间需要 5 分钟。

API Gateway是一个服务器,也可以说是进入系统的唯一节点。这跟面向对象设计模式中的Facade模式很像。API Gateway封装内部系统的架构,并且提供API给各个客户端。它还可能有其他功能,如授权、监控、负载均衡、缓存、请求分片和管理、静态响应处理等。

 

API Gateway负责请求转发、合成和协议转换。所有来自客户端的请求都要先经过API Gateway,然后路由这些请求到对应的微服务。API Gateway将经常通过调用多个微服务来处理一个请求以及聚合多个服务的结果。它可以在web协议与内部使用的非Web友好型协议间进行转换,如HTTP协议、WebSocket协议。

API Gateway可以提供给客户端一个定制化的API。它暴露一个粗粒度API给移动客户端。以产品最终页这个使用场景为例。API Gateway提供一个服务提供点(/productdetails?productid=xxx)使得移动客户端可以在一个请求中检索到产品最终页的全部数据。API Gateway通过调用多个服务来处理这一个请求并返回结果,涉及产品信息、推荐、评论等。

 

总结:API Gateway负责请求转发、请求合成和协议转换。它提供给应用客户端一个自定义的APIAPI Gateway可以通过返回缓存或者默认值的方式来掩盖后端服务的错误。

以下分别介绍两种不同的实现。

1. Kong

1.1 介绍

Kong 是一个可扩展开源的 API 层工具(也可以叫API网关或者API中间件). Kong 运行在任何 RESTful API 的前端,并且可以通过插件方式扩展,这个插件它提供了超越核心平台的额外的功能和服务的。

具有以下特点:                                        

  •  可扩展性: Kong 通过简单的增加机器节点,可以很容易的水平扩展,它通过简单的增加机器节点.
  •  模块化: Kong 可以通过插件方式扩展,这个插件可以很容易的通过一个RESTful管理API来配置.
  •  可以运行在任何基础架构: Kong 可以处处运行. 您可以在云或内部部署环境,包括单个或多个数据中心的设置,私有或者邀请受限APIs.
  •  编程语言:Nginx+Openresty+Lua
  •  存储:Cassandra 分布式Nosql数据库
  •  提供Rest API接口
  •  每个节点是无状态的也就是说可以无限扩容
  •  提供 Authentication(认证)Security(安全)Traffic Control(频率限制)Transformations(请求转化)的插件&很容易自定义插件
  •  可以根据自己的业务需求定制开发
  •  模块化功能:
  •  授权、日志、ip限流、限流、api统计分析、请求转化、跨域、其他功能通过lua编写插件实现。

 

Kong 构建在高可靠技术,比如NGINX Apache Cassandra, 并且为你提供一个易用的  来配置系统。

 

1.2 请求调用流程

1. Kong启动

2. 每个请求先经过Kong

3. Kong代理访问最终API

4. 在请求响应之间,Kong可以执行任何配置的插件,达到增强APIs的目的

总结:Kong作为每个API请求的入口

 

2. Spring-cloud

2.1 介绍

spring-cloudspring提供的微服务整合开发框架。Spring Cloud 为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性 Token、全局锁、决策竞选、分布式会话和集群状态)操作的开发工具。使用 Spring Cloud 开发者可以快速实现上述这些模式。

Spring cloud组件介绍可以参照该文章: 

 

为什么使用spring-cloud

1. 经历过netflix业务考验,国外大规模使用

2. 入门门槛低,国内大批量使用spring

3. 快速搭建

 

Spring Cloud包含多个子项目:Spring Cloud ConfigSpring Cloud Netflix

Spring Cloud 项目主页:

 

你可能感兴趣的文章
leetcode 50. Pow(x, n)
查看>>
leetcode 130. Surrounded Regions
查看>>
【托业】【全真题库】TEST2-语法题
查看>>
博客文格式优化
查看>>
【托业】【新托业全真模拟】疑难语法题知识点总结(01~05)
查看>>
【SQL】group by 和order by 的区别。
查看>>
【Python】详解Python多线程Selenium跨浏览器测试
查看>>
Jmeter之参数化
查看>>
Shell 和Python的区别。
查看>>
Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
查看>>
Loadrunner之https协议录制回放报错如何解决?(九)
查看>>
python中xrange和range的异同
查看>>
列表、元组、集合、字典
查看>>
【Python】easygui小甲鱼
查看>>
【Python】关于Python多线程的一篇文章转载
查看>>
【Pyton】【小甲鱼】文件
查看>>
【Pyton】【小甲鱼】永久存储:腌制一缸美味的泡菜
查看>>
【Pyton】【小甲鱼】异常处理:你不可能总是对的
查看>>
APP性能测试工具
查看>>
【Pyton】【小甲鱼】类和对象
查看>>