晟辉智能制造

ADC应用的技术架构核心是什么?

可以将ADC的技术架构理解为一个分层、模块化、高度可扩展的软件系统,其核心思想是将网络功能从操作系统内核中剥离,通过用户空间的软件模块来实现,从而获得更高的灵活性、性能和可编程性。

ADC应用的技术架构核心是什么?-图1
(图片来源网络,侵删)

现代ADC的技术架构通常可以分为以下几个关键层次:


ADC技术架构分层图

+------------------------------------------------------+
|                    应用层                             |
|  +-----------------+  +-----------------+           |
|  |   负载均衡策略   |  |   SSL卸载策略   |           |
|  | (Round Robin,   |  | (证书管理,      |           |
|  |  Least Conn,    |  |  加密/解密)     |           |
|  |  IP Hash)       |  +-----------------+           |
|  +-----------------+                                |
|  +-----------------+  +-----------------+           |
|  |   缓存策略       |  |   压缩策略       |           |
|  | (静态/动态缓存) |  | (Gzip/Brotli)  |           |
|  +-----------------+  +-----------------+           |
+------------------------------------------------------+
                      ^           ^
                      | API调用   | 配置下发
                      |           |
+------------------------------------------------------+
|                   控制平面                            |
|  +-------------------------------------------------+ |
|  |              引擎/策略管理器                      | |
|  |  - 负载均衡引擎                                   | |
|  |  - SSL/TLS引擎                                   | |
|  |  - 缓存引擎                                      | |
|  |  - 压缩引擎                                      | |
|  |  - 安全策略引擎 (WAF, DoS)                       | |
|  |  - 路由决策中心                                   | |
|  +-------------------------------------------------+ |
|  +-------------------------------------------------+ |
|  |               配置与管理模块                      | |
|  |  - REST API / CLI / GUI                         | |
|  |  - 配置数据库                                    | |
|  |  - 状态监控与日志                                | |
|  +-------------------------------------------------+ |
+------------------------------------------------------+
                      |
                      | (下发指令/状态同步)
                      v
+------------------------------------------------------+
|                   数据平面                            |
|  +-------------------------------------------------+ |
|  |                   内核旁路                       | |
|  |  +-----------------+  +-----------------+      | |
|  |  |    DPDK / XDP   |  |    eBPF / Kernel BPF | | |
|  |  | (数据包处理)    |  |   (数据包过滤/重定向)| | |
|  |  +-----------------+  +-----------------+      | |
|  +-------------------------------------------------+ |
|  |                   用户空间                        | |
|  |  +-------------------------------------------------+ |
|  |  |                 网络协议栈                       | |
|  |  | (TCP/IP, UDP, HTTP/1.1, HTTP/2, gRPC, QUIC)     | |
|  |  +-------------------------------------------------+ |
|  |  +-------------------------------------------------+ |
|  |  |                   连接跟踪                      | |
|  |  | (记录会话状态, 维护健康检查)                    | |
|  |  +-------------------------------------------------+ |
|  |  +-------------------------------------------------+ |
|  |  |                 数据处理模块                     | |
|  |  | (数据包解析/重组, 负载均衡决策, SSL/TLS处理)    | |
|  |  +-------------------------------------------------+ |
|  |  +-------------------------------------------------+ |
|  |  |                 I/O多路复用                      | |
|  |  | (epoll, kqueue, io_uring)                      | |
|  |  +-------------------------------------------------+ |
+------------------------------------------------------+
                      |
                      | (物理/虚拟网络接口)
                      v
+------------------------------------------------------+
|                 物理/虚拟网络                          |
|  (Ethernet, Virtual TAP, veth pair)                  |
+------------------------------------------------------+

各层详细解析

应用层

这是ADC功能策略的体现层,用户通过配置界面或API来定义这些策略。

  • 负载均衡策略:定义流量如何分发到后端服务器,如轮询、最少连接、源IP哈希等。
  • SSL/TLS策略:配置SSL证书、加密套件、协议版本(如禁用TLS 1.0/1.1)等。
  • 缓存策略:定义哪些URL路径或文件类型可以被缓存,以及缓存的有效期。
  • 压缩策略:启用对特定类型的响应(如HTML, CSS, JS)进行Gzip或Brotli压缩。
  • 安全策略:配置Web应用防火墙规则、防DDoS攻击策略、访问控制列表等。

控制平面

这是ADC的“大脑”,负责管理所有策略、状态和配置。

  • 引擎/策略管理器:这是核心组件,它接收来自应用层的策略配置,并将其翻译成数据平面可以执行的指令,它协调各个功能引擎(如LB引擎、SSL引擎)协同工作。
  • 配置与管理模块
    • API/CLI/GUI:提供用户接口,用于配置、监控和管理ADC。
    • 配置数据库:存储所有当前的配置信息,确保状态的一致性。
    • 状态监控与日志:收集性能指标(如QPS、连接数、延迟)、错误日志和事件,用于运维和故障排查。

关键职责

ADC应用的技术架构核心是什么?-图2
(图片来源网络,侵删)
  • 策略下发:将用户配置的策略同步给数据平面。
  • 状态聚合:收集数据平面的运行状态(如后端服务器的健康状态)。
  • 决策辅助:为数据平面的复杂决策(如负载均衡算法)提供依据。

数据平面

这是ADC的“肌肉”,负责所有实际的数据包处理和转发,其性能是衡量ADC好坏的关键,现代ADC的数据平面架构主要分为两种模式:

A. 内核旁路 这是高性能ADC的主流架构,目标是绕过操作系统内核协议栈的开销,直接在用户空间处理数据包。

  • 核心技术
    • DPDK (Data Plane Development Kit):由Intel主导,通过UIO/VFIO将网卡硬件直接绑定到用户空间,使用轮询模式替代中断驱动,极大地减少了数据包处理的延迟和CPU上下文切换,这是目前业界性能最高的方案。
    • XDP (eXpress Data Path):Linux内核的一个子项目,允许在内核网络栈的早期阶段(驱动层)执行eBPF程序,实现超高速的数据包过滤和转发,性能极高,灵活性也强。
  • 数据平面组件(在用户空间运行)
    • 网络协议栈:用户空间实现的TCP/IP协议栈,如LwIP或自研协议栈,用于处理连接、拥塞控制等。
    • 连接跟踪:维护客户端请求到后端服务器之间的映射关系,是实现会话保持的基础。
    • 数据处理模块:解析应用层协议(HTTP头、Cookie等),根据控制平面下发的策略执行负载均衡、SSL/TLS加解密、缓存查找等操作。
    • I/O多路复用:使用epoll (Linux), kqueue (BSD) 或更现代的 io_uring 来高效地管理成千上万个并发连接。

B. 内核态 传统的ADC架构,数据包处理完全依赖操作系统内核。

  • 工作方式:数据包通过网卡中断进入内核,经过内核协议栈处理,再通过netfilter/iptables等框架进行过滤和NAT转换,最后发往后端。
  • 优点:实现简单,与内核集成度高。
  • 缺点:性能瓶颈明显,因为内核处理涉及多次内存拷贝和上下文切换,难以应对超大规模的流量。

物理/虚拟网络层

这是数据平面与外部网络交互的接口。

ADC应用的技术架构核心是什么?-图3
(图片来源网络,侵删)
  • 物理接口:直接连接物理网卡的接口。
  • 虚拟接口:在虚拟化环境中,通过TAP设备、veth pair或SR-IOV(直接I/O虚拟化)等技术,将ADC与虚拟机或容器网络连接起来。

核心技术组件详解

  1. 负载均衡算法

    • 轮询:简单地将请求依次分配给每个服务器。
    • 最少连接:将新请求分配给当前连接数最少的服务器,能有效处理长连接。
    • 源IP哈希:根据客户端的IP地址进行哈希,确保来自同一IP的请求总是被发送到同一台服务器,适用于会话保持。
  2. SSL/TLS卸载

    • 过程:ADC在入口处终止SSL/TLS连接,解密来自客户端的加密请求,ADC与后端服务器之间建立普通的HTTP连接,将明文请求转发过去,响应则反向操作,由ADC加密后返回给客户端。
    • 好处:将CPU密集型的加密/解密操作从前端服务器(通常是应用服务器)上卸载到专门的ADC设备上,解放应用服务器的资源,并简化后端服务器的配置。
  3. 健康检查

    • 作用:持续监控后端服务器的可用性,自动将流量从故障服务器上移除。
    • 方式
      • TCP检查:尝试建立TCP连接。
      • HTTP检查:发送HTTP请求,检查返回的状态码(如200 OK)。
      • 自定义检查:发送特定格式的请求,检查返回内容是否符合预期。
  4. 会话保持

    • 作用:确保同一个用户的多次请求被发送到同一台后端服务器,这对于需要维护状态的应用(如购物车)至关重要。
    • 实现方式
      • Cookie插入:ADC在响应中插入一个特殊的Cookie,后续请求携带此Cookie,ADC根据Cookie找到对应的服务器。
      • URL重写:在URL后面添加一个后端服务器标识符。
      • 源IP哈希:如上所述,基于客户端IP保持会话。
  5. 缓存

    • 作用:存储后端服务器的响应(尤其是静态内容如下载文件、图片、CSS/JS),当后续请求相同时,直接从缓存返回,减轻后端压力,降低延迟。
    • 类型
      • 静态缓存:缓存不常变化的文件。
      • 动态缓存:缓存API响应等动态内容,通常有更复杂的缓存键(如URL + 请求头)和失效策略。

现代ADC的技术架构是一个以控制平面和数据平面分离为基础,以高性能内核旁路技术为核心,模块化、可编程的复杂系统。

  • 控制平面负责“思考”(决策和配置)。
  • 数据平面负责“行动”(处理和转发)。

这种架构使得ADC不再是一个简单的“四层/七层交换机”,而是一个功能强大、高度灵活的应用交付平台,能够为云原生、微服务、容器化等现代应用架构提供可靠、高效、安全的流量入口和服务保障,随着云原生技术的发展,ADC也正向着服务网格中的数据平面代理(如Envoy)和云原生Ingress控制器(如Istio Ingress Gateway, Nginx Ingress Controller)演进,但其核心的技术思想和分层架构依然一脉相承。

分享:
扫描分享到社交APP
上一篇
下一篇