微服务API网关框架
探索微服务API网关的世界 - 我的学习和实践笔记。一起学习如何设计、搭建并优化API网关。

总字符数: 4.18K

代码: 无, 文本: 2.05K

预计阅读时间: 9 分钟

什么是网关

在传统TCP/IP术语中,网络设备只分成两种,一种为网关(gateway),另一种为主机(host).网关能在网络间转递数据包,但主机不能转送数据包.在主机(又称终端系统,end system)中,数据包需经过TCP/IP四层协议处理,但是在网关(又称中介系统,intermediate system)只需要到达网际层,决定路径之后就可以转送.在当时,网关(gateway)与路由器(router)还没有区别.

在现代网络术语中,网关(gateway)与路由器(router)的定义不同.网关(gateway)能在不同协议间移动资料,而路由器(router)是在不同网络间移动资料,相当于传统所说的IP网关(IP gateway).

网关顾名思义就是连接两个网络的设备,对于语音网关来说,他可以连接PSTN以太网,这就相当于VOIP,把不同电话中的模拟信号通过网关而转换成数字信号,而且加入协议再去传输.在到了接收端的时候再通过网关还原成模拟的电话信号,最后才能在电话机上听到.

对于以太网中的网关只能转发三层以上数据包,这一点和路由是一样的.而不同的是网关中并没有路由表,他只能按照预先设定的不同网段来进行转发.网关最重要的一点就是端口映射,子网内用户在外网看来只是外网的IP地址对应着不同的端口,这样看来就会保护子网内的用户.

单节点场景

多节点场景

网关作用

  • 统一入口
  • 安全:黑名单、权限身份认证
  • 限流:实现微服务访问流量计算,基于流量计算分析进行限流,可以定义多种限流规则
  • 缓存:数据缓存
  • 日志:日志记录
  • 监控:记录请求响应数据,api耗时分析,性能监控
  • 重试:异常重试
  • 熔断:降级

现有框架

  • Tyk: Tyk是一个开放源码的API网关,它是快速、可扩展和现代的.Tyk提供了一个API管理平台,其中包括API网关、API分析、开发人员门户和API管理面板.Trk是一个基于Go实现的网关服务.
  • Kong: Kong是一个可扩展的开放源码API Layer(也称为API网关或API中间件).Kong在任何RESTful API的前面运行,通过插件扩展,它提供了超越核心平台的额外功能和服务.
  • Orange:和Kong类似也是基于OpenResty的一个API网关程序,是由国人开发的.
  • Netflix zuul:Zuul是一种提供动态路由、监视、弹性、安全性等功能的边缘服务.Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器.
  • apiaxle: Nodejs实现的一个API 网关.
  • api-umbrella: Ruby 实现的一个API网关.

技术选型

正向代理

代理(英语:Proxy),也称网络代理,是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接.一些网关、路由器等网络设备具备网络代理功能.一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击.

反向代理

反向代理电脑网络中是代理服务器的一种.服务器根据客户端的请求,从其关系的一组或多组后端服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知反向代理的IP地址,而不知道在代理服务器后面的服务器集群的存在[1].

前向代理不同,前向代理作为客户端的代理,将从互联网上获取的资源返回给一个或多个的客户端,服务端(如Web服务器)只知道代理的IP地址而不知道客户端的IP地址;而反向代理是作为服务器端(如Web服务器)的代理使用,而不是客户端.客户端借由前向代理可以间接访问很多不同互联网服务器(集群)的资源,而反向代理是供很多客户端都通过它间接访问不同后端服务器上的资源,而不需要知道这些后端服务器的存在,而以为所有资源都来自于这个反向代理服务器.

反向代理在现时的互联网中并不少见,而另一些例子,像是CDN、SNI代理等,是反向代理结合DNS的一类延伸应用.

正向代理与反向代理的区别

  1. 正向代理是需要在用户的电脑上配置正向代理服务器的;而反向代理不需要,因为用户是直接访问的反向代理服务器
  2. 正向代理的应用场景是用户是知道目标服务器的地址,如:www.google.com,但不能直接访问,那么就需要在用户电脑配置一个正向代理服务器,用户再次访问www.google.com就可以正常访问了;而反向代理的应用场景是用户本来就不知道目标服务器的地址.而是由平台方提供一个反向代理服务器的地址,用户直接访问反向代理服务器的地址就行.不管目标服务器有多少,用户不需要关心,只要访问反向代理服务器就ok;由反向代理服务器去解析访问目标服务器
  3. 反向代理极大的保护了应用的安全性,而且此结构可以很好的搭建负载均衡