gateway

网关即Gateway,它是连接基于不同通信协议的网络的设备,使文件可以在这些网络之间传输。网关除传输信息外,还将这些信息转化为接收网络所用协议认可的形式。它同路由器有密切关系。



从一个房间走到另一个房间,必然要经过一扇门。同样,从一个网络向另一个网络发送信息,也必须经过一道“关口”,这道关口就是网关。而网关(Gateway)就是一个网络连接到另一个网络的“关口”。



按照不同的分类标准,网关也有很多种。TCP/IP协议里的网关是最常用的。



比如有网络A和网络B,
网络A的IP地址范围为“192.168.10.1~192. 168.10.254”,
子网掩码为255.255.255.0;
网络B的IP地址范围为“192.168.11.1~192.168.11.254”,
子网掩码为255.255.255.0。



在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。



如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机网络B向网络A转发数据包的过程也是如此。

在使用Windows系统的PC机上配置Internet协议(TCP/IP)属性时,“默认网关”是指路由器(Router)还是网关(Gateway)?



首先‘网关’一个大概念,不具体特指一类产品,只要连接两个不同的网络的设备都可以叫网关;而‘路由器’么一般特指能够实现路由寻找和转发的特定类产品,路由器很显然能够实现网关的功能。当然电信行业说的‘路由器’又和家用的‘路由器’两个概念,这个暂且不表。回到题目中你说问的默认网关是什么,默认网关事实上不是一个产品而是一个网络层的概念,PC本身不具备路由寻址能力,所以PC要把所有的IP包发送到一个默认的中转地址上面进行转发,也就是默认网关。这个网关可以在路由器上,可以在三层交换机上,可以在防火墙上,可以在服务器上,所以和物理的设备无关



网关是默认的数据出口。如果你的数据不知道往哪里走的话,那么他会去默认网关那里报道。路由器包含许多这样的网关,其中之一是默认网关。也就是说数据到了路由器以后,如果不知道自己下一步该怎么走了,那么他会去默认网关那里去报道。但路由器还包含许多其他的网关,比如数据要去买饮料,那么路由器就送数据去小卖铺。如果数据内急,那么路由器送数据去卫生间。这种起点-终点的对应就叫路由(routing)。这也是路由器(router)名字的由来。



网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。同层–应用层。



在OSI中,网关有两种:一种是面向连接的网关,一种是无连接的网关。当两个子网之间有一定距离时,往往将一个网关分成两半,中间用一条链路连接起来,我们称之为半网关。
按照不同的分类标准,网关也有很多种。TCP/IP协议里的网关是最常用的,在这里我们所讲的“网关”均指TCP/IP协议下的网关。
那么网关到底是什么呢?网关实质上是一个网络通向其他网络的IP地址。比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机(如附图所示)。网络A向网络B转发数据包的过程。
所以说,只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。那么这个IP地址是哪台机器的IP地址呢?网关的IP地址是具有路由功能的设备的IP地址,具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器)。
在和 Novell NetWare 网络交互操作的上下文中,网关在 Windows 网络中使用的服务器信息块 (SMB) 协议以及NetWare网络使用的 NetWare 核心协议 (NCP) 之间起着桥梁的作用。网关也被称为 IP路由器。



在OSI中,网关有两种:一种是面向连接的网关,一种是无连接的网关。当两个子网之间有一定距离时,往往将一个网关分成两半,中间用一条链路连接起来,我们称之为半网关。
  按照不同的分类标准,网关也有很多种。TCP/IP协议里的网关是最常用的,在这里我们所讲的“网关”均指TCP/IP协议下的网关。
  那么网关到底是什么呢?网关实质上是一个网络通向其他网络的IP地址。比如有网络A和网络B,网络A的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩码为255.255.255.0;网络B的IP地址范围为“192.168.2.1~192.168.2.254”,子网掩码为255.255.255.0。在没有路由器的情况下,两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机(如附图所示)。网络B向网络A转发数据包的过程。
  所以说,只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。那么这个IP地址是哪台机器的IP地址呢?网关的IP地址是具有路由功能的设备的IP地址,具有路由功能的设备有路由器、启用了路由协议的服务器(实质上相当于一台路由器)、代理服务器(也相当于一台路由器)。
  在和 Novell NetWare 网络交互操作的上下文中,网关在 Windows 网络中使用的服务器信息块 (SMB) 协议以及 NetWare 网络使用的 NetWare 核心协议 (NCP) 之间起着桥梁的作用。网关也被称为 IP 路由器。



什么是默认网关
  如果搞清了什么是网关,默认网关也就好理解了。就好像一个房间可以有多扇门一样,一台主机可以有多个网关。默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来处理数据包。现在主机使用的网关,一般指的是默认网关。



网关-网关协议(GGP)
  核心网关为了正确和高效地路由报文需要知道Internet其他部分发生的情况,包括路由信息和子网特性。当一个网关处理重负载而使速度特别慢,并且这个网关是访问子网的惟一途径时,通常使用这种类型的信息,网络中的其他网关能剪裁交通流量以减轻网关的负载。
  GGP主要用于交换路由信息,不要混淆路由信息(包括地址、拓扑和路由延迟细节)和作出路由决定的算法。路由算法在网关内通 常是固定的且不被GGP改变。核心网关之间通过发送GGP信息,并等待应答来通信,之后如果收到含特定信息的应答就更新路由表。
  注意GGP的最新改进SPREAD已经用于Internet,但它还不如GGP普及。GGP被称为向量-距离协议。要想有效工作,网关必须含有互联网络上有关所有网关的完整信息。否则,计算到一个目的地的有效路由将是不可能的。因为这个原因,所有的核心网关维护一张Internet上所有核心网关的列表。这是一个相当小的表,网关能容易地对其进行处理。
  外部网关协议(EGP)
  外部网关协议用于在非核心的相邻网关之间传输信息。非核心网关包含互联网络上所有与其直接相邻的网关的路由信息及其所连机器信息,但是它们不包含Internet上其他网关的信息。对绝大多数EGP而言,只限制维护其服务的局域网或广域网信息。这样可以防止过多的路由信息在局域网或广域网之间传输。EGP强制在非核心网关之间交流路由信息。
  由于核心网关使用GGP,非核心网关使用EGP,而二者都应用在Internet上,所以必须有某些方法使二者彼此之间能够通信。Internet使任何自治(非核心)网关给其他系统发送“可达”信息,这些信息至少要送到一个核心网关。如果有一个更大的自治网络,常常认为有一个网关来处理这些可达信息。
  和GGP一样,EGP使用一个查询过程来让网关清楚它的相邻网关并不断地与其相邻者交换路由和状态信息。EGP是状态驱动的协议,意思是说它依赖于一个反映网关情况的状态表和一组当状态表项变化时必须执行的一组操作。
  内部网关协议(IGP)
  有几种内部网关协议可用,最流行的是RIP和HELLO,另一个协议称为开放式最短路径优先协议(OSPF),这些协议没有一个是占主导地位的,但是RIP可能是最常见的IGP协议。选择特定的IGP以网络体系结构为基础。RIP和HELLO协议都是计算到目的地的距离,它们的消息包括机器标识和到机器的距离。
  一般来讲,由于它们的路由表包含很多项,因此消息比较长。RIP和HELLO一直维护相邻网关之间的连接性以确保机器是活跃的。路由信息协议使用广播技术。意思是说网关每隔一定时间要把路由表广播给其他网关。这也是RIP的一个问题,因为这会增加网络流量,降低网络性能。HELLO协议与RIP的不同之处在于HELLO使用时间而不是距离作为路由因素。这要求网关对每条路由有合理的准确时间信息。由于这个原因,所以HELLO协议依赖于时钟同步消息。
  开放式最短路径优先协议是由Internet工程任务组开发的协议,希望它能成为居于主导地位的IGP。用“最短路径”来描述协议的路由过程不准确。更好一些的名字是“最优路径”, 这其中要考虑许多因素来决定到达目的地的最佳路由。



网关的类型
  1、传输网关。传输网关用于在2个网络间建立传输连接。利用传输网关,不同网络上的主机间可以建立起跨越多个网络的、级联的、点对点的传输连接。例如通常使用的路由器就是传输网关,“网关”的作用体现在连接两个不同的网段,或者是两个不同的路由协议之间的连接,如RIP,EIGRP,OSPF,BGP等。
  2、应用网关。应用网关在应用层上进行协议转换。例如,一个主机执行的是ISO电子邮件标准,另一个主机执行的是Internet 电子邮件标准,如果这两个主机需要交换电子邮件,那么必须经过一个电子邮件网关进行协议转换,这个电子邮件网关是一个应用网关。再例如,在和 Novell NetWare 网络交互操作的上下文中,网关在 Windows 网络中使用的服务器信息块 (SMB) 协议以及 NetWare 网络使用的 NetWare 核心协议 (NCP) 之间起着桥梁的作用。NCP是工作在OSI第七层的协议,用以控制客户站和服务器间的交互作用,主要完成不同方式下文件的打开、关闭、读取功能。
  现在的网关产品分类越来越细了,有信令网关,中继网关,还有接入网关:
  信令网关SG,主要完成7号信令网与IP网之间信令消息的中继,在3G初期,对于完成接入侧到核心网交换之间的消息的转接(3G之间的RANAP消息,3G与2G之间的BSSAP消息),另外还能完成2G的MSC/GMSC与软交换机之间ISUP消息的转接。
  中继网关又叫IP网关,同时满足电信运营商和企业需求的VoIP设备。中继网关(IP网关)由基于中继板和媒体网关板建构,单板最多可以提供128路媒体转换,两个以太网口,机框采用业界领先的CPCI标准,扩容方便具有高稳定性、高可靠性、高密度、容量大等特点.
  接入网关是基于IP的语音/传真业务的媒体接入网关,提供高效、高质量的话音服务,为运营商、企业、小区、住宅用户等提供VoIP解决方案。
  除此之外,网关还可以分为:协议网关、应用网关和安全网关
  协议网关
  协议网关通常在使用不同协议的网络区域间做协议转换。这一转换过程可以发生在OSI参考模型的第2层、第3层或2、3层之间。 但是有两种协议网关不提供转换的功能:安全网关和管道。由于两个互连的网络区域的逻辑差异, 安全网关是两个技术上相似的网络区域间的必要中介。如私有广域网和公有的因特网。
  应用网关
  应用网关是在使用不同数据格式间翻译数据的系统。典型的应用网关接收一种格式的输入,将之翻译, 然后以新的格式发送。输入和输出接口可以是分立的也可以使用同一网络连接。
  应用网关也可以用于将局域网客户机与外部数据源相连,这种网关为本地主机提供了与远程交互式应用的连接。 将应用的逻辑和执行代码置于局域网中客户端避免了低带宽、高延迟的广域网的缺点,这就使得客户端的响应时间更短。 应用网关将请求发送给相应的计算机,获取数据,如果需要就把数据格式转换成客户机所要求的格式。
  安全网关
  安全网关是各种技术有趣的融合,具有重要且独特的保护作用,其范围从协议级过滤到十分复杂的应用级过滤。
  网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关的结构也和路由器类似,不同的是互连层。网关既可以用于广域网互连,也可以用于局域网互连。 可以说,网关是一种充当转换重任的计算机系统或设备。在使用不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。同时,网关也可以提供过滤和安全功能。大多数网关运行在OSI 7层协议的顶层——应用层。  



什么是微服务网关
微服务网关是微服务架构中的一个关键的角色,用来保护、增强和控制对于微服务的访问,微服务网关是一个处于应用程序或服务之前的系统,用来管理授权、访问控制和流量限制等,这样微服务就会被微服务网关保护起来,对所有的调用者透明。因此,隐藏在微服务网关后面的业务系统就可以更加专注于业务本身。



微服务网关的分类
常见的微服务网关根据使用特性大致被分成流量网关和业务网关



微服务网关的作用
微服务网关作为连接服务的消费方和服务提供方的中间件系统,将各自的业务系统的演进和发展做了天然的隔离,使业务系统更加专注于业务服务本身,同时微服务网关还可以为服务提供和沉淀更多附加功能



四. SIA-GateWay
SIA-GATEWAY 是基于 SpringCloud 微服务生态体系下开发的一个分布式微服务网关系统。具备简单易用、可视化、高可扩展、高可用性等特征,提供云原生、完整及成熟的接入服务解决方案。



关键特性
简单易用, 支持基于 Docker 容器的快速部署及交付。



兼容性良好, 兼容 SpringBoot 微服务及传统 HTTP-URL 的负载均衡及路由服务。



高可扩展性, 支持基于 Java 语言的第三方插件扩展特性及动态加载机制。
支持多租户,多用户角色下的网关拆分管理。
可视化管理,提供实时路由拓扑、网关集群拓扑展示功能。
服务治理,支持网关集群 Dashboard、实时日志、历史日志查询、熔断管理、预警管理等功能。
多注册中心支持,提供分布式网关集群下对多注册中心集群的切换管理功能。
动态路由组件绑定机制,提供包括 URL 统计、日志、灰度发布、限流、安全等公共服务组件。



SIA-GATEWAY 的整体架构图,架构由 CORE 和 Admin Cluster 组成,其中:



CORE 承载网关 HTTP 请求的主要服务节点,CORE 节点可以根据所属的网关组信息自动注册到 Admin 管理端。
Admin 是网关集群的管理后台,由 Admin、Service、Stream、Monitor 等服务组成。





微服务网关系统是一个处于应用程序或服务(提供 REST API 接口服务)之前的中间件系统, 所以 SIA-GateWay 在建设初期做技术选型时就充分考虑到所使用的技术方案应该兼容后端代理业务系统所使用的技术栈和技术体系,所以我们使用了 Netflix 的 ZUUL 作为我们网关系统技术栈,单纯的脱离使用场景谈某一种网关功能如何强大的做法,后续都会给业务方的使用带来更多的麻烦。 更明确的说如果目前大部分业务系统采用的技术栈是 JAVA 系统, 那么不建议使用 Nginx, Kong 或者 OpenResty 等网关系统, 这里主要是处于软件工程性方面考虑。举个例子,业务方需要将一个公共组件以 Plugin 机制集成到微服务网关, 如果使用 Lua 脚本文件或者其他脚本语言,那么引入一种新的语言技术栈所带来的复杂度会给业务系统带来更多的不确定性,系统后期维护成本和运维的难度都会呈指数级的提升



去中心化的网关架构设计
微服务架构的一个重要的特性就是去中心化的架构设计思路,SIA-GateWay 在软件设计层面上增加了一个“网关组”的抽象概念,一个网关组对应就是一个独立的业务领域。网关组的概念也契合了微服务架构中的一些理念:业务系统依赖微服务网关提供明确清晰的服务边界;业务系统通过微服务网关对外暴露业务的标准服务接口。



从实现层面, SIA-GateWay 充分利用并结合了容器自动化的部署技术,在解决最后一公里的问题上,将网关以云端容器资源的方式交付给不同业务方,通过共享网关 SDK 部署包的方式将网关的服务下沉到容器中实现和执行,从而在时间和空间上做到了系统的弹性和灵活交付。同时中心化的管理能力又给使用网关的具有不同权限的用户可以同时维护各自所属网关组下的网关节点带来了便利。



当然除了微服务网关模式, 目前下一代微服务架构 ServiceMesh 技术也是典型的去中心化架构,ServiceMesh 是从 SideCar 边车模式演进而来,是一种通过将服务治理能力下沉到业务节点的方式,通过控制面(control plane)和数据面(data plane)的处理解耦分离实现服务通信更加快速,便捷,智能。



然而目前来看, 从技术上及各大公司的实践中,ServiceMesh 在落地上还存在诸多复杂性及不可控性,这种模式会给运维带来极大的成本,如果贸然使用会给本就复杂的分布式系统带来更多的复杂和难度。所以从目前来讲,GateWay 网关的模式在组织粒度上可以调整,在实现方式上更加简单可控,是目前的微服务架构中比较适合采用的模式。



网关如何保证高可用
作为一个微服务网关系统, 因为所有流量都会经过网关, 网关必须成为一个高可用的中间件服务,网关系统的稳定性及可用性直接决定了所用下游服务的稳定性。因此 SIA-GateWay 在架构设计上主要做了如下几点:



集群化
在生产环境中,所用网关节点至少保证有 2 个节点组成集群同时提供服务,目前 SIA-GateWay 在公司内部主要使用容器化部署, 避免单点故障。



健康检查
在容器环境下,SIA-GateWay 会暴露一个 HTTP 健康检查接口,通过 Kubernetes 的健康检查机制,定期检查 HTTP 访问是否可用, 如果不可用,利用 Kubernetes 的服务编排能力可以做容器的切换;在 Zstack 环境下, 通过后台启动一个 Crontab 作为守护进程检查进程的状态,保证网关的稳定可用和进程重启机制。



备份机制
SIA-GateWay 提供了一种备份网关机制,在 Zstack 上会启动一个备份网关 API-GATEWAY-CORE,所有在容器环境(Kubernetes )中启动的网关节点,都会将自己的路由信息同步到备份网关中,另外, 利用 Nginx 的高可用性和健康检查机制, 当 Kubernetes 集群出现问题时所有容器流量无法响应时, 会将 Nginx 上的流量自动切换到 API-GATEWAY-CORE 备份节点。API-GATEWAY-CORE 在工作时也会触发预警,提示目前有不可用的 K8s 网关节点。



提供机制而不是策略
Unix 编程哲学里,一个重要的概念就是:“提到机制而不是策略”,通俗的讲“机制”就是接口, “策略”就是具体的实现。SIA-GateWay 提供的组件集成能力正是基于这样的理念。
SIA-GateWay 将架构的可扩展性作为重要的对外输出能力,第三方插件机制主要支持 JAVA 语言的 Filter 组件动态加载机制。Filter 机制是 JAVA 工程师最为熟悉的标准组件,所以对于业务方集成自己的业务逻辑提供了极大的便利,第三方业务组件加载到网关平台大体有如下几个步骤:



根据 SIA-GateWay 提供的模板类及注解, 实现动态业务逻辑
将实现好的动态组件通过 Maven 打包。
在组件管理界面,通过组件上传按钮将组件上传到 Admin- 组件管理器。
组件管理器执行文件存储逻辑。
组件管理器执行组件下发操作,将组件分发到对应网关组。
网关节点通过 ClassLoader 反射解析组件并动态加载到内存。
网关节点通过异步信号量机制响应组件加载状态。
组件管理器同步插件 Plugin 状态



加入API Gateway之后的作用



一般也会把路由,安全,限流,缓存,日志,监控,重试,熔断等都放到 API 网关来做,然后服务层就完全脱离这些东西,纯粹的做业务,也能够很好的保证业务代码的干净,不用关心安全,压力等方面的问题。



目前社区的关于 API Gataway 的项目有以下这些:



Tyk:Tyk是一个开放源码的API网关,它是快速、可扩展和现代的。Tyk提供了一个API管理平台,其中包括API网关、API分析、开发人员门户和API管理面板。Try 是一个基于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 网关。



https://tyk.io/
https://github.com/TykTechnologies/tyk



https://konghq.com/faqs/
https://github.com/Kong/kong



http://orange.sumory.com/
https://github.com/orlabs/orange



https://github.com/Netflix/zuul



http://apiaxle.com/
https://apiumbrella.io/
https://github.com/NREL/api-umbrella



https://github.com/ThreeMammals/Ocelot
https://github.com/dotnetcore/CAP



Spring Cloud GateWay是Spring Cloud 中的一个项目,提供了一个用于在Spring MVC之上构建API网关的库。Spring Cloud
Gateway旨在提供一种简单而有效的方式来路由到API,并为他们提供横切关注点,例如:安全性,监控/指标和弹性。
复制代码特征功能有:
基于Spring Framework 5,Project Reactor和Spring Boot 2.0构建
能够匹配任何请求属性上的路由。
谓词和过滤器特定于路线。
Hystrix断路器集成。
Spring Cloud DiscoveryClient集成
易于编写谓词和过滤器
请求率限制
路径重写



Category linux