【应用网关(架构)系列】第一章:基本概述

  • 定义

应用网关是一种网络设备或软件服务,主要工作在应用层,主要实现客户端和服务端之间的代理,对应用层的流量进行管理、过滤、转发等操作。

  • 主要功能

    • 协议转换

      • 转换不同的应用层协议。例如,企业内部使用一种自定义的应用协议来管理内部资源(如通过jdbc连接数据库过程,通过基于http协议发出的SQL查询请求转换成数据库能够理解的原生协议,便于访问数据库),而外部网络通常使用标准的 HTTP 或 HTTPS 协议进行通信;应用网关可以在这两种协议之间进行转换,使得内部系统能够与外部网络交互。

    • 负载均衡

      • 可以将客户端的请求负载到多个后端服务器。假设一个网站有多个 Web 服务器来处理用户请求,应用网关可以根据服务器的负载情况(如 CPU 使用率、网络带宽等),将新请求分配到负载较轻的服务器上,实现分流及高可用。

    • 安全防护

      • 应用网关可以作为防火墙,对应用层的攻击进行防范,检查传入和传出的数据包,识别并阻止恶意的请求,如 SQL 注入攻击、跨站脚本攻击(XSS)等。

    • 缓存功能

      • 可以缓存经常访问的内容。比如,对于一个热门的网站,应用网关可以缓存网页中的图片、脚本和样式表等静态资源,实现静态资源快速访问。

    • 熔断和限流

      • 通过熔断机制保护系统免受故障或过载影响。熔断机制就像是电路中的保险丝,当后端服务出现故障(如响应时间过长、频繁出错等)时,应用网关会暂时切断对该后端服务的请求,避免大量请求积压导致系统崩溃。

      • 限流是控制进入系统的请求流量,确保系统能够在其处理能力范围内正常运行。应用网关的限流机制可以防止后端服务被过多的请求淹没。类似于会场、公园等场所的人流限制。

  • 应用网关(架构)演进

    随技术发展,网关技术也在不断演进,从传统的单体架构演变到云原生架构,甚至当前结合AI的AI原生架构

    • 单体架构

      • 将应用网关的所有功能都构建在一个单一的软件单元中,如协议转换、负载均衡、安全防护、缓存等

      • 优点

        • 易于开发和部署:开发人员在开发过程中,由于所有功能都在一个代码库中,开发、测试和调试相对简单。从部署角度看,只需要部署一个应用程序。一般适用于小型企业或业务场景

        • 性能优势(小规模场景):在小规模的应用场景下,由于没有复杂的分布式通信开销,单体架构的应用网关可能会有更好的性能,因为所有模块之间的调用都是在一个进程内部完成。

      • 缺点

        • 可扩展性差:随着业务的增长和功能的增加,单体应用网关会变得越来越复杂,难以维护和扩展。例如,如果要添加一个新的协议转换功能或者对安全防护模块进行升级,可能需要修改整个单体应用的代码,容易引入新的错误,而且重新部署整个应用网关会影响正在运行的所有功能。

        • 技术栈受限:一旦选择了某种技术栈来构建单体架构的应用网关,就很难切换或引入新的技术。比如,一开始用 Java 构建了单体应用网关,后续很难将 Python 代码集成进来。

    • 垂直架构

      • 将应用网关的不同功能模块划分成独立的垂直单元。每个单元负责一个特定的功能领域,比如将协议转换功能作为一个独立的垂直单元,负载均衡作为另一个单元,安全防护又是一个单元等。各个独立的单元之间可以通过接口、消息队列、RPC调用等方式进行通讯

      • 优点

        • 可扩展性强:每个功能单元是独立的,可以根据业务需求独立扩展功能模块。例如,由于业务增长导致需要处理更多的协议转换任务,则可以单独对协议转换垂直单元进行升级,同时而不会影响其他功能模块,如安全防护和负载均衡。

        • 技术多样性:每个垂直单元可以根据自身的功能需求选择最合适的技术栈。比如,对于负载均衡垂直单元可以采用 C++ 等高性能语言来实现,便于满足快速处理请求场景。

      • 缺点

        • 开发和部署复杂性增加:由于是多个独立垂直单元,开发协同成本高,且需处理兼容性问题。同时需要分别部署每个垂直单元,需要分别考虑每个单元的服务器资源、配置等要求。

        • 性能开销(部分场景):垂直单元之间的通信可能会引入一定的性能开销,尤其是当采用网络通信方式来传递数据时。例如,当安全防护单元和协议转换单元在不同的服务器上,通过网络进行请求和响应的传递时,会产生网络延迟;在同一服务器部署也存在进程间通信导致的服务器性能开销问题

    • SOA架构

      此处的SOA架构更多的是讲中心化架构,基于ESB实现;去中心化架构类似微服务架构,下一节讲解。注意:此处的中心化和去中心化理解,以及将微服务架构理解为SOA的去中心化实现仅作为个人观点

      • 基于 SOA 架构的应用网关中核心功能被划分为多个独立的服务。例如,协议转换服务负责将不同协议的请求和响应进行转换,以实现内部和外部系统之间的通信兼容性;负载均衡服务用于将客户端请求分配到多个后端服务器,提高系统的整体性能和可用性。

      • 应用网关内部有服务注册中心。各个服务在启动时,会将自己的服务名称、接口信息、服务地址等详细内容注册到服务注册中心;当其他服务需要调用某个功能时,会先向服务注册中心查询,获取可用服务的信息,然后进行调用。例如,协议转换服务启动后,将自己的服务信息注册,当负载均衡服务需要将请求转换为特定协议格式后再分配给后端服务器时,会从服务注册中心查找协议转换服务的信息,进而与之建立通信并使用其服务。

      • SOAP架构中的通信方式可以使用SOAP消息、restAPI、消息队列等方式。

      • 优点

        • 灵活性与扩展性:由于各个服务是独立的,可以独立开发新的服务并将其集成到应用网关中。例如,企业决定支持一种新的物联网设备协议,只需开发对应的协议转换服务,将其注册到服务注册中心,就可以与其他服务协作。

        • 易于集成和维护:基于 SOA 架构的应用网关通过标准的接口,可以方便进行对接。同时每个服务可以独立地进行更新、修复漏洞等操作。例如,当发现安全防护服务的漏洞时,可以单独对安全防护服务进行升级,而不影响其他服务的运行。

      • 缺点

        • 服务性能:服务之间的通信和协作可能会引入性能开销,如网络延迟、数据传输的序列化和反序列化等

        • 治理复杂:随着服务数量的增加,服务的管理和治理会变得复杂,需要建立完善的服务质量监控体系,包括监控服务的响应时间、错误率、资源利用率等指标,以及需要完善的版本控制。

    • 微服务架构

      • 将各个服务以微服务的方式运行,各个服务之间独立开发、部署、测试和扩展,微服务通过轻量级的通信机制(如 RESTful API、消息队列等)相互协作,共同构成一个完整的网关或系统。个人将微服务架构看作SOA去中心化架构的实现。

      • 核心组件

        • 微服务自身

          • 微服务架构的核心,每个微服务都是一个独立的运行单元,包括业务逻辑、数据存储(可以是独立的数据库,也可以共享部分数据存储)等。例如,一个用户认证微服务包含用户注册、登录验证等业务逻辑,也可以有自己的用户数据库表或者连接到独立的用户认证数据库。

        • 服务网关

          • 服务网关是微服务架构中的一个重要组件,作为客户端和微服务之间的入口。可以实现请求路由、负载均衡、安全认证等功能。例如,客户端发送的请求首先到达服务网关,服务网关根据请求的 URL 或其他标识,将请求路由到相应的微服务;同时对请求进行安全检查,确保只有授权的请求才能进入微服务。

        • 配置中心

          • 配置中心用于集中管理微服务的配置信息,配置中心对各种配置进行存储、分发和更新。例如,当需要修改数据库连接字符串时,只需要在配置中心进行修改,然后配置中心可以将新的配置信息推送给相关的微服务。

        • 服务发现与注册

          • 类似于 SOA 架构中的相关功能,服务发现与注册组件用于微服务的注册和发现。微服务在启动时会将自己的信息(如服务名称、服务地址、服务端口等)注册到服务发现组件,其他微服务或者服务网关在需要调用某个微服务时,可以通过服务发现组件查找其信息。

      • 优点

        • 快速开发与迭代:由于每个微服务的功能可以独立开发,开发团队可专注于某个功能的实现。

        • 可扩展性强:可以根据业务需求对单个微服务进行扩展。例如,在电商促销活动期间,订单管理微服务的流量可能会大幅增加,此时可以单独对订单管理微服务进行水平扩展或垂直扩展,而不会影响其他微服务的运行。

        • 故障隔离:一个微服务出现故障不会影响其他微服务的正常运行。例如,如果商品推荐微服务出现故障,用户仍然可以正常登录、查看订单等。

      • 缺点与挑战

        • 分布式系统复杂性:微服务架构是一个分布式系统,会带来分布式事务、服务间通信延迟等问题。(有对应的解决方案,但技术落地复杂,成本高)

        • 服务治理难度增加:随着微服务数量的增加,服务治理(如服务的监控、版本管理、配置管理等)变得更加复杂。(有服务治理工具 Spring Cloud Config、Consul 等)

        • 数据一致性问题:由于每个微服务可能有自己的数据存储,在跨微服务的数据操作时,可能会出现数据不一致的情况。(需要考虑一致性解决方案,如强一致性、弱一致性、最终一致性等)

    • 云原生架构

      • 云原生架构下各个服务可以根据流量负载进行水平扩展或垂直扩展,整个扩展逻辑相对微服务架构更加灵活,可以基于容器的一些编排和管理技术进行集中管理,如k8s。

      • 在服务实现上一般和SOA、微服务架构区别不大,更多是依赖了云原生的能力(runtime、k8s等),让服务的实现、运营、变更更加敏捷

      • 在云原生架构中通常会提到服务网格,服务网格个人理解更多是为微服务提供通信支持。服务网格通常由控制平面和数据平面组成;控制平面负责管理和配置服务间的通信策略,如 Istio 的 Pilot 组件,可以动态地配置服务间的路由规则;数据平面负责实际的流量转发和处理,如 Istio 的 Envoy 代理,作为边车(Sidecar)容器与微服务容器一起部署,拦截微服务的进出流量并按照控制平面的配置进行处理。

      • 优点

        • 弹性与扩展性:根据应用程序的负载自动调整资源,很好地适应企业业务需求变化

        • 快速部署与迭代:容器技术(如 Docker)是云原生架构的核心技术之一,使得应用程序的部署变得快速而简单。

        • 提高资源利用率:容器编排工具可以对资源进行高效的分配和管理;通过容器的隔离特性,在保证应用程序相互隔离的同时,实现资源的共享。

        • 增强系统容错性:容器具有快速重启的特性,当容器出现故障(如应用程序崩溃或容器所在的节点出现问题)时,容器编排工具可以快速地重启容器;微服务的独立性使得故障能够被隔离。

        • 多云和混合云支持:云原生架构可以方便地在不同的云环境(如公有云、私有云、混合云)中进行部署和运行。企业可以根据自身的需求(如成本、安全性、合规性等)选择合适的云环境;由于容器技术和云原生的设计理念,应用程序在不同的云环境中能够保持相对一致的运行方式。容器镜像可以在不同的云平台之间进行迁移。

      • 缺点

        • 复杂性增加:云原生架构涉及到多种复杂的技术,如容器技术、容器编排、微服务架构、服务网格等。开发人员和运维人员需要掌握这些技术才能有效地构建和管理云原生应用

        • 安全风险:容器的动态性和共享性带来了新的安全风险。例如,容器逃逸是一种潜在的安全威胁,攻击者可能通过利用容器内的漏洞获取宿主机的控制权。(需要额外关注云原生架构下的安全性)

        • 成本高、管理复杂:采用云原生架构需要使用一些高级的工具和技术,如专业的容器编排工具、监控工具等

    • AI原生架构(探索架构)

      • 该架构目前在探索阶段,本质是从AI平台、LLM、AI应用等维度考虑系统的接入,同时重点关注长连接、高带宽、高延时、数据安全等场景。

      • 如在网关接入中需要考虑同时接入多个模型的兼容性,典型的需要有基于AI的代理、服务网关等;在安全服务中需要重点考虑敏感词过滤;在tokens调用场景重点考虑对LLM的用量监测、限制、分发等;在转发、负载服务上重点考虑AI大流量场景的路由调度、请求调度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值