【网关层】网关层及相关技术栈

文章目录


配合《【架构】分布式服务架构与微服务架构》阅读更佳。

1)网关

1.1 什么是网关?

广义上,只要是进入某个网的"入口",都可以叫做网关,即只要连接两个不同的网络都可以叫网关

  • 在软件架构中,网关这个词的含义已被扩展到了应用与服务层面
    • 比如,在提供 Restful API 的服务接口,一般被称作“应用网关”。
      • 这里,网关作为一个对外提供应用服务的媒介,一方面对外提供接口服务,接受请求并给予应答,另一方面,又屏蔽内部实现细节,只暴露黑盒调用方式与函数,保护了内部逻辑与结构。

*注意区分网关和网桥

  • 网桥:工作在数据链路层,在不同或相同类型的 LAN 之间存储并转发数据帧,必要时进行链路层上的协议转换。可连接两个或多个网络,在其中传送信息包。
  • 网关:是一个大概念,不具体特指一类产品,只要连接两个不同的网络都可以叫网关。
  • 网桥一般只转发信息,而网关可能进行包装。

1.2 为什么需要网关?

随着单体应用程序架构分布式架构 / 微服务等架构演变,对网关的需求逐渐产生:

  • 单体架构(或称分层架构)

    单体架构比较初级,典型的三级架构是:前端(Web/手机端)+ 中间业务逻辑层 + 数据库层
    • 这是一种典型的Java Spring mvc或者Python Drango框架的应用。
    • 架构图: 【网关层】网关层及相关技术栈
    • 单体架构的应用比较容易部署、测试, 在项目的初期,单体应用可以很好地运行。
  • 然而,随着需求的不断增加, 越来越多的人加入开发团队,代码库也在飞速地膨胀。慢慢地,单体应用变得越来越臃肿,可维护性、灵活性逐渐降低,维护成本越来越高
  • 分布式应用

    中级架构,分布式应用:中间层分布式 + 数据库分布式

    • 是单体架构的并发扩展,将一个大的系统划分为多个业务模块,业务模块分别部署在不同的服务器上,各个业务模块之间通过接口进行数据交互。
    • 数据库也大量采用分布式数据库,如redis、ES、solor等。
    • 通过LVS/Nginx代理应用,将用户请求均衡的负载到不同的服务器上。
    • 架构图: 【网关层】网关层及相关技术栈
    • 该架构相对于单体架构来说,提供了负载均衡的能力,大大提高了系统负载能力,解决了网站高并发的需求。

  • 微服务架构

    微服务架构主要是中间层分解,将系统拆分成很多小应用(微服务),微服务可以部署在不同的服务器上,也可以部署在相同的服务器不同的容器上。

    • 单应用的故障不会影响到其他应用,单应用的负载也不会影响到其他应用,其代表框架有Spring cloud、Dubbo等。
    • 架构图: 【网关层】网关层及相关技术栈
  • 微服务中的网关通常指的是 API Gataway,即将所有API的调用统一接入API网关层,由网关层负责接入和输出

API Gateway的出现:

举例来说:

  • 微服务将原来的单体应用进行微服务化。将原来集中于一体的功能(如商品、订单服务)进行拆分,每个功能模块又有各自的自成体系的发布、运维等功能:
    【网关层】网关层及相关技术栈
  • 原先IOS、Android、PC客户端调用服务的地方,需要多个URL地址,有订单的、商品的、用户的。微服务化后就必须有统一的出入口,这种情况下,API Gateway就出现了

API Gateway很好的解决了微服务下调用、统一接入等问题,如下图所示:
【网关层】网关层及相关技术栈

  • 有了API网关之后,各个API服务提供团队可以专注于自己的业务逻辑处理,而API网关则更专注于安全、流量、路由等问题。

    • 网关作为系统的唯一入口,也就是说,进入系统的所有请求都需要经过 API 网关。
    • 当系统外部的应用或者客户端访问系统的时候,都会遇到这样的情况:
      • 系统要判断它们的权限
      • 如果传输协议不一致,需要对协议进行转换
      • 如果调用水平扩展的服务,需要做负载均衡
      • 一旦请求流量超出系统承受的范围,需要做限流操作
      • 针对每个请求以及回复,系统会记录响应的日志

  • 因此只要是涉及到对系统的请求,并且能够从业务中抽离出来的功能,都有可能在网关上实现。

    • 例如:协议转换,负载均衡,请求路由,流量控制等等。

*代理和网关的区别

  • 代理是纯粹的数据透传,协议不会发生变化;
  • 网关在数据透传的背景下,还会设计协议的转换
  • 比如上图中用户请求传输到网关的协议是HTTP,通过网关透传到下游则可能已经转换成企业内部的RPC了(比如JSF、Dubbo等企业自研的RPC框架)。

1.3 常见网关

按照使用数量、成熟度等来划分,主流的开源网关有 4 个:

  • OpenResty(语言:Nginx+lua)
  • Kong(语言:Nginx+lua)
  • Zuul/Zuul2(语言:Java)
  • Spring Cloud Gateway(语言:Java)

详细介绍可移步《【网关层】了解软件架构中的网关层》



2)相关技术栈

2.1 负载均衡(Load Balancing,LB)

  • 什么是负载均衡?

    负载均衡(Load Balance,简称 LB)是高并发、高可用系统必不可少的关键组件,目标是尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性。
    • 软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl等。
      • 主流产品有:Nginx、HAProxy、LVS。
    • 硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备通常称之为负载均衡器,由专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高。
      • 主流产品有:F5 和 A10。

  • 为什么需要负载均衡?

    大型网站都要面对庞大的用户量,高并发,海量数据等挑战。为了提升系统整体的性能,可以采用垂直扩展和水平扩展两种方式。
    • 垂直扩展:在网站发展早期,可以从单机的角度通过增加硬件处理能力,比如 CPU 处理能力,内存容量,磁盘等方面,实现服务器处理能力的提升。
    • 水平扩展:通过集群来分担大型网站的流量。集群中的应用服务器(节点)通常被设计成无状态,用户可以请求任何一个节点,这些节点共同分担访问压力。水平扩展有两个要点:
      • 应用集群:将同一应用部署到多台机器上,组成处理集群,接收负载均衡设备分发的请求,进行处理,并返回相应数据。
      • 负载均衡:将用户访问请求,通过某种算法,分发到集群中的节点。

  • 常见的负载均衡:

    • DNS负载均衡:

      DNS 负载均衡一般用于互联网公司,复杂的业务系统不适合使用。

      • 大型网站一般使用 DNS 负载均衡作为第一级负载均衡手段,然后在内部使用其它方式做第二级负载均衡。
      • 工作原理:基于 DNS 查询缓存,按照负载情况返回不同服务器的 IP 地址。
        【网关层】网关层及相关技术栈
    • 反向代理负载均衡:

      • 工作原理:反向代理(Reverse Proxy)方式是指以代理服务器来接受网络请求,然后将请求转发给内网中的服务器,并将从内网中的服务器上得到的结果返回给网络请求的客户端。
        【网关层】网关层及相关技术栈

      • 主流产品:Nginx、Apache。

      • 反向代理如何实现负载均衡?

        以 Nginx 为例:
        【网关层】网关层及相关技术栈

        1. 在代理服务器上设定好负载均衡规则。
        2. 当收到客户端请求,反向代理服务器拦截指定的域名或 IP 请求,根据负载均衡算法,将请求分发到候选服务器上。
        3. 如果某台候选服务器宕机,反向代理服务器会有容错处理,比如分发请求失败 3 次以上,将请求分发到其他候选服务器上。
    • 数据链路层负载均衡:

      数据链路层负载均衡是指在通信协议的数据链路层修改 mac 地址进行负载均衡。
      【网关层】网关层及相关技术栈

      • LVS (Linux Virtual Server)
        在 Linux 平台上最好的链路层负载均衡开源产品是 LVS (Linux Virtual Server)。
        • LVS 是基于 Linux 内核中 netfilter 框架实现的负载均衡系统。
          • netfilter 是内核态的 Linux 防火墙机制,可以在数据包流经过程中,根据规则设置若干个关卡(hook 函数)来执行相关的操作。
        • 开源 LVS 版本有 3 种工作模式:DR 模式、NAT 模式、Tunnel 模式。
        • LVS 的工作流程
        1. 当用户访问 www.sina.com.cn 时,用户数据通过层层网络,最后通过交换机进入 LVS 服务器网卡,并进入内核网络层。
        2. 进入 PREROUTING 后经过路由查找,确定访问的目的 VIP 是本机 IP 地址,所以数据包进入到 INPUT 链上。
        3. IPVS 是工作在 INPUT 链上,会根据访问的 vip+port 判断请求是否 IPVS 服务,如果是则调用注册的 IPVS HOOK 函数,进行 IPVS 相关主流程,强行修改数据包的相关数据,并将数据包发往 POSTROUTING 链上。
        4. POSTROUTING 上收到数据包后,根据目标 IP 地址(后端服务器),通过路由选路,将数据包最终发往后端的服务器上。

2.2 CDN

  • 什么是CDN?

    CDN(Content Delivery Network)即内容分发网络,是一项非常有效的缩短时延、加速访问的技术。

    • 依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。
    • 组成:CDN网络中包含的功能实体包括内容缓存设备(CDN网络节点)、内容交换机、内容路由器、CDN内容管理系统等。
    • 服务模式:内容分发网络(CDN)是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理4个要件,而内容管理和全局的网络流量管理(Traffic Management)是CDN的核心所在。
    • 主要特点
      • 本地Cache加速:提高了企业站点(尤其含有大量图片和静态页面站点)的访问速度,并大大提高以上性质站点的稳定性。
      • 镜像服务:消除了不同运营商之间互联的瓶颈造成的影响,实现了跨运营商的网络加速,保证不同网络中的用户都能得到良好的访问质量。
      • 远程加速:远程访问用户根据DNS负载均衡技术智能自动选择Cache服务器,选择最快的Cache服务器,加快远程访问的速度。
      • 带宽优化:自动生成服务器的远程Mirror(镜像)cache服务器,远程用户访问时从cache服务器上读取数据,减少远程访问的带宽、分担网络流量、减轻原站点WEB服务器负载等功能。
      • 集群抗攻击:广泛分布的CDN节点加上节点之间的智能冗余机制,可以有效地预防黑客入侵以及降低各种D.D.o.S攻击对网站的影响,同时保证较好的服务质量 。

  • 为什么需要CDN?

    随着互联网的爆炸式发展,用户越来越多,加上宽带接入网的出现,内容源服务器和骨干网络的压力越来越大,无法及时响应用户的访问需求。网络拥塞越来越严重,将会成为互联网发展的最大障碍。

    • 为了实现互联网内容的无拥塞分发,Tom Leighton教授和Danny C. Lewin,以及其他几位*研究人员一起开发了利用数学运算法则来处理内容的动态路由算法技术,有效地解决了这个难题,这个技术就是CDN。
      • 能够有效解决网络带宽小、用户访问量大、网点分布不均等问题:CDN将源站内容(视频、image、html、js、css等)分发至全国所有的节点,从而缩短用户查看对象的延迟,提高用户访问网站的响应速度与网站的可用性。
      • 可以实现跨运营商、跨地域的全网覆盖:互联不互通、区域ISP地域局限、出口带宽受限制等种种因素都造成了网站的区域性无法访问。CDN加速可以覆盖全球的线路,通过和运营商合作,部署IDC资源,在全国骨干节点商,合理部署CDN边缘分发存储节点,充分利用带宽资源,平衡源站流量。
      • 可以保障网站安全:CDN的负载均衡和分布式存储技术,可以加强网站的可靠性,应对绝大部分的互联网攻击事件。防攻击系统也能避免网站遭到恶意攻击。

  • CDN工作原理:

    CDN的基本原理是广泛采用各种缓存服务器(CDN边缘节点),将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。

    • 以用户想要访问优酷的视频点播内容为例,CDN的具体工作流程:
      【网关层】网关层及相关技术栈
    1. 当用户点击APP上的内容,APP会根据URL地址去本地DNS(域名解析系统)寻求IP地址解析。
    2. 本地DNS系统会将域名的解析权交给CDN专用DNS服务器
    3. CDN专用DNS服务器将CDN的全局负载均衡设备GSLB)IP地址返回用户。
    4. 用户向CDN的负载均衡设备发起内容URL访问请求。
    5. CDN负载均衡设备根据用户IP地址,以及用户请求的内容URL,选择一台用户所属区域的缓存服务器
    6. 负载均衡设备告诉用户这台缓存服务器的IP地址,让用户向所选择的缓存服务器发起请求。
    7. 用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。
    8. 如果这台缓存服务器上并没有用户想要的内容,那么这台缓存服务器就要向网站的源服务器请求内容
    9. 源服务器返回内容给缓存服务器,缓存服务器发给用户,并根据用户自定义的缓存策略,判断要不要把内容缓存到缓存服务器上

  • CDN关键技术:

    • 内容发布:借助建立索引、缓存、流分裂、组播(Multicast)等技术,将内容发布或投递到距离用户最近的远程服务点(POP)处。从实现上,有两种主流的内容分发技术:
      • PUSH:一种主动分发的技术,由内容管理系统发起,将内容从源或者中心媒体资源库分发到各边缘的 Cache节点。分发的协议可以采用 Http/ftp等。
      • PULL:一种被动的分发技术,通常由用户请求驱动。当用户请求的内容在本地的边缘 Cache上不存在(未命中)时, Cache启动PULL方法从内容源或者其他CDN节点实时获取内容。
    • 内容路由:是整体性的网络负载均衡技术,通过内容路由器中的重定向(DNS)机制,在多个远程POP上均衡用户的请求,以使用户请求得到最近内容源的响应。
      • CDN负载均衡系统实现CDN的内容路由功能,将用户的请求导向整个CDN网络中的最佳节点。最佳节点的选定可以根据多种策略,例如距离最近、节点负载最轻等。
      • 负载均衡系统是整个CDN的核心,从层次上可以分为全局负载均衡(GSLB)和本地负载均衡(SLB)。
    • 内容存储:需要考虑两个方面的内容存储问题,一个是内容源的存储,一个是内容在 Cache节点中的存储。
      • 内容源的存储:通常采用海量存储架构,如NAS和SON。
      • 内容在 Cache节点中的存储:功能上需要考虑对各种内容格式的支持、对部分缓存的支持,性能上考虑支持的容量、多文件吞吐率、可靠性、稳定性。数存储系统都采用了独立磁盘冗余阵列(RAID)技术进行可靠存储,但是不同设备使用的RAID方式各有不同。
    • 内容管理:通过内部和外部监控系统,获取网络部件的状况信息,测量内容发布的端到端性能(如包丢失、延时、平均带宽、启动时间、帧速率等),保证网络处于最佳的运行状态。

2.3 Zookeeper

  • 什么是Zookeeper?

    ZooKeeper 是 Apache 的一个开源软件项目,为分布式应用提供高效、高可用的分布式协调服务,被广泛地应用于诸如 Hadoop、HBase、Kafka 和 Dubbo 等大型分布式系统中。
    • 官网:https://zookeeper.apache.org/
    • 是一个分布式协调服务的开源框架,主要用来解决分布式集群中应用系统的一致性的问题,例如怎样避免同时操作同一数据造成脏读的问题。
    • 本质上是一个分布式的小文件存储系统,提供基于类似于文件系统的目录树方式的数据存储。
    • 分布式应用程序可以基于它实现:统一命名服务(dubbo)、分布式配置管理(solr的配置集中管理)、数据发布/订阅、负载均衡、分布式协调/通知、集群管理、Master 选举、分布式消息队列(sub/pub)、分布式锁等功能。

  • 常见服务:

    • 命名服务:按名称标识集群中的节点,类似于DNS,但仅对于节点。
    • 配置管理:加入节点的最近的和最新的系统配置信息。
    • 集群管理:实时地在集群和节点状态中加入/离开节点。
    • 选举算法:选举一个节点作为协调目的的leader。
    • 锁定和同步服务:在修改数据的同时锁定数据。
    • 高度可靠的数据注册表:即使在一个或几个节点关闭时也可以获得数据。

  • zookeeper与dubbo

    • Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
    • dubbo是一个rpc远程服务调用框架,需要一个注册中心去管理每个服务的集群。zookeeper在dubbo中扮演一个注册中心的角色(当然也可以不选择zookeeper),zookeeper用来注册服务和进行负载均衡。
    • 详细可参考:https://zhuanlan.zhihu.com/p/365807201


【部分内容参考自】

  • 网关到底是什么?:https://www.zhihu.com/question/67671731
  • 四种软件架构,看看你属于哪个层次:https://www.jianshu.com/p/e7b992a82dc0
  • 深入浅出负载均衡:https://juejin.cn/post/6970950695117651976
  • 到底什么是CDN?:https://zhuanlan.zhihu.com/p/52362950
  • Zookeeper 概述:https://www.w3cschool.cn/zookeeper/zookeeper_overview.html
  • Dubbo和Zookeeper:https://zhuanlan.zhihu.com/p/365807201
上一篇:阿里云二级域名


下一篇:四,JavaScript语言和jQuery技术