阿里开源 Higress:AI 原生 API 网关
原名: alibaba /
higress
基本信息
- 描述: 🤖 AI 网关 | AI 原生 API 网关
- 语言: Go
- 星标: 7,625 (+17 stars today)
- 链接: https://github.com/alibaba/higress
- DeepWiki: https://deepwiki.com/alibaba/higress
DeepWiki 速览(节选)
Overview
Relevant source files
Purpose and Scope
This document provides a comprehensive overview of Higress, an AI Native API Gateway built on Istio and Envoy. It covers the system’s architecture, core components, and primary use cases. For detailed information about specific subsystems, refer to the Core Architecture (page 2), Build and Deployment (page 3), WASM Plugin System (page 4), AI Gateway Features (page 5), MCP System (page 6), and Development Guide (page 7) sections.
What is Higress
Higress is a cloud-native API gateway that extends Istio and Envoy with WebAssembly (WASM) plugin capabilities. The system provides three core functions: AI gateway features for LLM applications, MCP server hosting for AI agent tool integration, and traditional API gateway capabilities including Kubernetes Ingress and microservice routing.
The architecture separates control plane (configuration management) from data plane (traffic processing). Configuration changes propagate through the xDS protocol with millisecond latency and no connection disruption, making it suitable for long-connection scenarios such as AI streaming responses.
Primary Use Cases:
| Use Case | Description | Core Components |
|---|---|---|
| AI Gateway | Unified API for 30+ LLM providers with protocol translation, observability, caching, and security | ai-proxy, ai-statistics, ai-cache, ai-security-guard plugins |
| MCP Server Hosting | Host Model Context Protocol servers enabling AI agents to call tools and services | mcp-router, jsonrpc-converter filters + MCP server implementations (quark-search, amap-tools, all-in-one) |
| Kubernetes Ingress | Ingress controller with compatibility for nginx-ingress annotations | higress-controller, Ingress/Gateway API translation to Istio configs |
| Microservice Gateway | Service discovery from multiple registries (Nacos, Consul, ZooKeeper, Eureka) | McpBridgeReconciler, registry-specific watchers |
Production Validation:
Higress originated at Alibaba to address Tengine reload issues affecting long-connection services and insufficient gRPC/Dubbo load balancing. Within Alibaba Cloud, it supports core AI applications including Tongyi Qianwen (通义千问), Tongyi Bailian model studio, and PAI platform. The system handles hundreds of thousands of requests per second with 99.99% availability guarantees.
Sources: README.md30-52
Core Architecture
Higress implements a control plane and data plane separation derived from Istio’s architecture. The control plane watches Kubernetes resources and generates Envoy configurations distributed via xDS protocol. The data plane processes traffic through Envoy proxies extended with WASM plugins.
System Components and Binaries
Component Deployment Diagram:
Binary and Process Mapping:
| Binary | Source Entry Point | Deployment Location | Primary Functions |
|---|---|---|---|
higress-controller | cmd/higress/main.go1-100 | Single pod in higress-system | Resource watching, IngressController, WasmPluginController, McpBridgeReconciler, service discovery management |
pilot-discovery | Istio upstream (patched) | Same pod as controller | xDS server implementation, configuration distribution on ports 15010 (gRPC), 15012 (gRPC-TLS), 15017 (webhook) |
higress-gateway | Envoy binary + extensions | DaemonSet or Deployment | Data plane proxy, WASM VM (V8), HTTP/HTTPS listeners on ports 80/443, admin API on 15021 |
hgctl | cmd/hgctl/main.go1-50 | Local CLI tool | MCP server management, local development (hgctl agent, hgctl mcp add) |
Key Process Communication:
The controller and pilot run in the same pod and communicate via localhost gRPC on port 15051. The controller implements multiple Kubernetes controllers (pkg/ingress/kube/) that watch different resource types and update an in-memory cache (pkg/ingress/kube/common/cache.go). The cache state is pushed to pilot, which converts it to xDS configurations (Listener Discovery Service, Route Discovery Service, Cluster Discovery Service, Endpoint Discovery Service) and streams them to all gateway instances.
Sources: README.md32 Diagram 2 from provided architecture diagrams
Configuration Flow and Controller Architecture
Configuration Update Sequence:
Controller Registry and Responsibilities:
The controller implements the informer pattern for multiple resource types:
| Controller | Source Location | Watched Resource | Generated Configs |
|---|---|---|---|
IngressController | pkg/ingress/kube/ingress/ingress.go1-500 | Ingress (v1) | VirtualService, DestinationRule, Gateway |
IngressController (v1beta1) | pkg/ingress/kube/ingress/ingressv1beta1.go1-400 | Ingress (v1beta1) | Legacy Ingress support |
KIngressController | pkg/ingress/kube/kingress/kingress.go1-300 | Knative Ingress | Knative-specific routing |
WasmPluginController | pkg/ingress/kube/wasmplugin/wasmplugin.go1-400 | WasmPlugin CRD | EnvoyFilter with WASM config |
McpBridgeReconciler | pkg/ingress/kube/mcpbridge/reconciler.go1-300 | McpBridge CRD | Registry watcher lifecycle |
ConfigMapController | pkg/ingress/kube/configmap/1-100 | higress-config ConfigMap | EnvoyFilter for global settings |
The central cache (pkg/ingress/kube/common/cache.go) maintains in-memory state for all Istio resources and provides atomic updates to prevent partial configuration states. Configuration changes propagate to pilot within milliseconds, significantly faster than nginx-ingress reload times (reported 10x improvement).
Sources: README.md108-116 Diagram 2 from provided architecture diagrams
Key Capabilities
AI Gateway Features
AI gateway functionality is implemented through a pipeline of WASM plugins that process requests and responses for LLM providers. The plugins support protocol translation, observability, caching, and security.
AI Plugin Pipeline:
| Plugin | Source Location | Request Phase | Response Phase |
|---|---|---|---|
ai-proxy | plugins/wasm-go/extensions/ai-proxy/main.go1-500 | Protocol detection, provider selection, request transformation | Response transformation, SSE stream processing |
ai-statistics | plugins/wasm-go/extensions/ai-statistics/main.go1-400 | Extract request attributes (user, model, tokens) | Extract response tokens, latency, write metrics/logs/traces |
ai-cache | plugins/wasm-go/extensions/ai-cache/main.go1-300 | Check cache (semantic search) | Store response in Redis |
ai-security-guard | [plugins/wasm-go/ext |
[…truncated…]
导语
Higress 是一款基于 Istio 和 Envoy 构建的 AI 原生 API 网关,它通过集成 WASM 插件能力,在提供标准流量管理的同时,专注于为大模型应用提供 AI 网关特性及 MCP 服务器托管。该项目旨在帮助开发者在云原生环境中统一管理微服务路由与 AI 流量,解决异构系统集成与扩展的难题。本文将介绍其系统架构、核心组件以及 AI 网关与 MCP 系统的具体应用场景。
摘要
Higress 项目总结
1. 项目概况 Higress 是一款由阿里开源的、基于 Go 语言开发的 AI 原生 API 网关。目前该项目在 GitHub 上拥有超过 7,600 颗星,活跃度较高。它建立在 Istio 和 Envoy 之上,通过扩展 WebAssembly (WASM) 插件能力,提供标准化的云原生流量管理及 AI 服务治理。
2. 核心架构 Higress 采用控制平面与数据平面分离的架构:
- 控制平面:负责配置管理。
- 数据平面:负责流量处理。
- 高性能机制:配置变更通过 xDS 协议传播,具备毫秒级延迟且不中断连接,特别适配 AI 长连接流式响应场景。
3. 三大核心功能 Higress 的功能范围不仅限于传统的 API 网关,更深度集成了 AI 生态:
- AI 网关:
- 提供统一 API 接口,兼容 30 多家大语言模型(LLM)提供商。
- 具备协议转换、可观测性、缓存和安全防护能力。
- 相关组件:
ai-proxy、ai-statistics、ai-cache、ai-security-guard插件。
- MCP 服务器托管:
- 托管模型上下文协议(MCP)服务器,使 AI 智能体能够便捷地调用工具和服务。
- 相关组件:
mcp-router、jsonrpc-converter过滤器及预置的 MCP 服务器实现(如quark-search,amap-tools)。
- Kubernetes Ingress:
- 作为 K8s 入口控制器,支持微服务路由,并兼容 nginx-ingress 注解。
- 相关组件:
higress-controller。
4. 适用场景 Higress 旨在解决 LLM 应用接入、AI 智能体工具集成以及云原生微服务流量治理问题,是一个兼顾传统 API 管理与新兴 AI 应用需求的下一代网关系统。
评论
总体判断
Higress 是目前云原生网关领域中将“AI 原生”理念落地最彻底的开源项目之一。它不仅成功解决了传统 API 网关在处理 LLM 流量时的协议适配与成本痛点,更通过标准化的 WASM 插件生态,为微服务治理与 AI 编排的融合提供了极具前瞻性的技术底座。
深度评价分析
1. 技术创新性与差异化方案
- 事实:DeepWiki 明确指出 Higress 基于 Istio 和 Envoy 构建,并深度集成了 WebAssembly (WASM) 插件系统。它特别强调了“AI Native”特性,内置了对 LLM 的支持,以及 MCP (Model Context Protocol) 服务器托管能力。
- 推断:Higress 的核心技术壁垒在于**“流量治理与 AI 编排的统一”**。传统的 AI 接入往往需要独立的 Proxy(如 LangChain Proxy),而 Higress 将 AI 协议转换(如 OpenAI 协议转其他模型)、Token 计费、Prompt 模板管理等能力下沉到了网关层。
- 差异化亮点:其MCP 系统集成是一个极具前瞻性的创新。随着 AI Agent 的普及,Agent 需要调用大量外部工具。Higress 直接作为 MCP Server 的托管点,使得网关不仅仅是流量的“管道”,更成为了 AI Agent 的“工具箱”,这在目前的开源网关中是极具差异化的定位。
2. 实用价值与应用场景
- 事实:项目描述中提到它解决了 Kubernetes Ingress 和微服务路由问题,同时专注于 AI Gateway 功能。
- 推断:Higress 解决了企业级 AI 落地中的“最后一公里”问题。
- 统一接入:企业无需为 LLM 业务单独建设网关,复用现有的 K8s Ingress 设施即可。
- 成本控制:通过在网关层实现语义缓存或 Token 限流,直接降低大模型调用的 API 成本。
- 安全合规:在网关层做敏感词过滤或 PII(个人隐私信息)脱敏,比在业务代码层处理更安全、更统一。这对于金融、政务等希望私有化部署大模型应用的企业具有极高的实用价值。
3. 代码质量与架构设计
- 事实:项目使用 Go 语言编写,Star 数超过 7,600,且 README 提供了多语言版本(中/日/英),文档结构涵盖了从核心架构到开发指南的完整链路。
- 推断:基于 Envoy 和 Istio 的架构保证了数据面的高性能与控制面的标准化。Go 语言的使用符合云原生生态的主流选择,便于与 K8s 生态集成。多语言文档的存在表明该项目具有国际化视野且社区维护较为规范。WASM 的引入使得架构的扩展性极强,用户可以使用 C++/Rust/Go 编写插件而无需重新编译网关主体,这体现了优秀的模块化设计思想。
4. 社区活跃度
- 事实:Star 数 7.6k+,背靠阿里巴巴。
- 推断:作为阿里云开源的网关产品(对应云产品 Higress),其长期维护的稳定性较高,不会像个人项目那样轻易废弃。阿里内部的业务场景(如电商大促)为该项目提供了极高并发的验证场,这意味着其代码在处理高并发、边缘异常情况下的健壮性经过了实战检验。
5. 学习价值与借鉴意义
- 推断:对于开发者而言,Higress 是学习**“云原生网关如何演进”的最佳范例。它展示了如何利用 Envoy 的高性能过滤器机制处理 HTTP 之外的复杂协议(如 SSE 流式传输、AI 协议)。同时,其 WASM 插件开发模式是学习动态扩展网关功能**的极佳教材,特别是对于希望深入理解“Infrastructure as Code”和“AI 工程化”的架构师。
6. 潜在问题与改进建议
- 推断:
- 复杂度门槛:基于 Istio 的架构意味着其部署和运维复杂度远高于 Nginx 或简单的 API Gateway。对于没有 K8s 基础的团队,上手成本极高。
- 配置模型:虽然支持 K8s Ingress,但其高级功能(如 WASM 插件配置)可能需要理解特定的 CRD(自定义资源),学习曲线较陡峭。
- AI 功能的成熟度:虽然主打 AI Gateway,但在处理超长上下文、复杂的对话状态管理时,网关层可能会遇到性能瓶颈或逻辑限制,需要与后端应用层做好边界划分。
7. 与同类工具的对比优势
- 推断:
- 对比 Nginx/Kong:Higress 原生支持 K8s,对 gRPC、WASM 和 AI 流式传输的支持更好,而传统网关更多是静态配置或 Lua 脚本扩展。
- 对比 APISIX:两者架构相似,但 Higress 背靠 Istio 生态,在服务网格(Service Mesh)的深度融合上具有天然优势,且阿里对 AI 场景的特定优化(如 MCP 支持)使其在 AI Native 路线上走得更快。
- **对比 Lang
技术分析
Higress 深度技术分析报告
Higress 是阿里巴巴开源的一款基于 Istio 和 Envoy 构建的云原生 API 网关,其最显著的特征是提出了 “AI Native”(AI 原生) 的理念。它不仅仅是一个传统的流量网关,更是一个专门为 LLM(大语言模型)应用、AI Agent 代理调用以及 MCP (Model Context Protocol) 服务托管设计的下一代入口。
以下是对该项目的深度剖析:
1. 技术架构深度剖析
技术栈与架构模式
Higress 采用了控制平面与数据平面分离的架构模式,这是云原生网关的标准范式。
- 底层基石:基于 Envoy 作为高性能数据平面,利用其 L3/L7 网络处理能力;基于 Istio 的控制平面理念(但进行了轻量化和改造),利用 xDS 协议进行配置下发。
- 编程语言:Go。主要用于控制平面(配置管理、Kubernetes Ingress 转换、WASM 插件管理)和部分数据平面的扩展逻辑。Envoy 本身是 C++ 编写,Higress 通过 Go 与 C++ 的交互机制(WASM 或 gRPC)扩展功能。
- 扩展模型:WebAssembly (WASM)。这是 Higress 架构中最核心的亮点。它允许开发者使用 C++/Go/Rust/AssemblyScript 等多种语言编写插件,编译成 WASM 字节码后在 Envoy 的沙箱中运行。
核心模块设计
- Router (路由层):兼容 Kubernetes Ingress API 和 Gateway API,负责将 K8s 的 YAML 资源转换为 Envoy 的配置。
- WASM Plugin System (插件系统):一个独立的运行时环境,负责加载、热更新和分发 WASM 插件到数据平面。
- AI Gateway Service (AI 网关服务):这是 Higress 区别于 Nginx 或传统 Kong 的核心模块。它内置了对 LLM 协议(OpenAI 协议等)的理解,能够处理 Prompt 模板管理、Token 计费、上下文缓存策略等。
- MCP Bridge (MCP 桥接):作为 AI Agent 的工具层,允许网关直接托管或代理 MCP 服务,使得 LLM 能够安全地调用外部工具。
技术亮点与创新
- AI 原生流量管理:传统网关只看 HTTP Header/Path,Higress 能够理解 LLM 的流式响应。它针对 SSE (Server-Sent Events) 进行了深度优化,确保在长连接、大模型流式输出场景下的配置变更(xDS 推送)不中断连接。
- 热更新能力:得益于 Envoy + xDS + WASM,Higress 可以在毫秒级内生效配置变更,且无需重启网关进程,这对于高可用的 AI 服务至关重要。
2. 核心功能详细解读
主要功能与场景
- AI 流量网关:
- 统一模型接入:将 OpenAI、Azure、通义千问、HuggingFace 等不同厂商的 API 统一封装成标准接口。
- Prompt 管理:在网关层进行 Prompt 模板化注入,避免业务代码硬编码 Prompt。
- Token 统计与限流:基于 Token 数量而非单纯的请求数进行限流和计费,更符合 AI 业务的成本模型。
- MCP 服务器托管:
- Higress 内置了对 Model Context Protocol (MCP) 的支持。它可以将后端微服务包装成 MCP 工具,或者直接作为 MCP Server 的宿主,解决 AI Agent 调用外部工具时的鉴权、流量控制和安全问题。
- 传统微服务网关:
- 支持 K8s Ingress、Service Mesh 东西向流量管理、金丝雀发布、蓝绿部署。
解决的关键问题
- AI 服务的碎片化:解决了企业内部同时调用多个 LLM 厂商 API 时,接口不统一、协议转换繁琐的问题。
- 流式响应的不可控性:传统网关在处理流式转发时,往往难以进行精细的拦截或修改,Higress 利用 WASM 插件可以在流式传输过程中实时处理数据块。
- 模型调用的安全性:通过网关层统一管理 API Key,避免密钥泄露到前端或各个业务微服务中。
与同类工具对比
- vs. Nginx/APISIX:Nginx 需要配合 Lua (OpenResty) 扩展,开发门槛高且安全性难控(Lua 虚拟机崩溃会影响 Nginx 进程)。Higress 使用 WASM 沙箱隔离,崩溃不影响网关主进程,且更适合处理 AI 的流式协议。
- vs. Kong:Kong 生态成熟,但在 AI 原生特性(如内置 Prompt 管理、Token 级别限流)上不如 Higress 专注。Higress 深度集成了阿里云在 AI 领域的最佳实践。
- vs. Istio Ingress Gateway:原生 Istio 配置极其复杂,学习曲线陡峭。Higress 提供了更符合 K8s 习惯的 Ingress CRD,并针对 AI 场景做了大量默认优化。
3. 技术实现细节
关键技术方案
- 配置分发:Higress 控制平面监听 K8s 资源,将其转换为 Envoy 的 xDS 配置。为了实现“毫秒级”生效,它优化了 xDS 的增量推送机制,减少了全量配置推送带来的性能开销。
- WASM 沙箱执行:使用
proxy-wasm规范。当 HTTP 请求进入时,Envory 会触发 WASM VM 的on_request或on_response钩子。Higress 实现了 WASM 插件的生命周期管理,包括插件的拉取、编译、加载和版本回滚。 - AI 协议转换:在数据平面,通过 WASM 插件或内置 Filter 实现了非 OpenAI 协议到 OpenAI 协议的动态转换。例如,将通义千问的流式响应实时转换为 OpenAI 兼容的 SSE 格式。
代码组织与设计模式
- CRD 驱动:代码中大量使用 Kubernetes 的 Custom Resource Definition (CRD) 机制。用户创建
WasmPlugin或Ingress资源,Controller 监听并处理。 - 适配器模式:在处理不同 AI 厂商时,采用了适配器模式,定义统一的 LLM 调用接口,各个厂商实现具体的连接和鉴权逻辑。
性能与扩展性
- 高性能:数据平面基于 Envoy C++,零拷贝技术,处理 HTTPS 和 SSE 流性能极高。
- 水平扩展:控制平面无状态,数据平面可通过 K8s HPA 自动扩容。
4. 适用场景分析
适合使用的项目
- 企业级 AI 应用平台:需要集成多个大模型,且需要统一管理 Prompt、Token 配额和访问权限。
- AI Agent (智能体) 基础设施:特别是需要利用 MCP 协议连接 LLM 与企业内部数据/工具的场景。
- 云原生微服务网关:正在使用 K8s,且需要比 Nginx Ingress 更强大、更易扩展(WASM)能力的团队。
- SaaS 平台:需要为不同租户隔离不同的 LLM 配置和 API Key。
不适合的场景
- 极简单的静态网站托管:用 Nginx 足够,引入 Higress 属于杀鸡用牛刀。
- 非 K8s 环境:虽然支持 Docker,但 Higress 的威力在于与 K8s 的深度结合。如果是传统虚拟机部署,配置管理会变得复杂。
- 极致的低延迟要求(微秒级):虽然 Envoy 很快,但相比经过极致优化的纯 C++ 四层负载均衡器(如 DPDK),WASM 插件的引入会带来微小的额外延迟。
5. 发展趋势展望
- MCP 协议的普及:随着 Anthropic 提出的 MCP 协议逐渐成为 AI Agent 连接工具的标准,Higress 作为最早支持 MCP 的网关之一,将成为 AI 时代基础设施的首选。
- 从流量管理到数据管理:未来的网关不仅仅是“管道”,还会处理“语义”。Higress 可能会集成更强大的向量检索或 RAG(检索增强生成)能力,在网关层直接完成部分知识库查询。
- WASM 生态的爆发:随着 WASM 标准的成熟,Higress 的插件市场将会繁荣,开发者可以像编写 JS 脚本一样编写网关逻辑。
6. 学习建议
适合开发者
- 具备 Kubernetes 基础的后端工程师。
- 需要构建 AI 基础设施的架构师。
- 对云原生、Service Mesh 技术感兴趣的开发者。
学习路径
- 基础:熟悉 Envoy 基本概念和 Kubernetes Ingress 资源。
- 核心:阅读 Higress 官方文档,重点理解
WasmPlugin的配置和 AI 网关的路由配置。 - 进阶:尝试使用 Go 或 TinyGo 编写一个简单的 WASM 插件,并在 Higress 中部署,实现自定义的 Header 修改或鉴权逻辑。
- 实践:搭建一个包含 OpenAI 接口转换和 Token 限流的完整 AI 网关环境。
7. 最佳实践建议
正确使用方式
- 分离控制与数据:在生产环境中,建议将 Higress 部署为独立的微服务,而非作为 K8s DaemonSet,以便于独立扩容。
- 利用 WASM 隔离:将业务逻辑(如特殊的签名算法)封装在 WASM 插件中,不要修改网关核心镜像,这样便于升级和维护。
常见问题与优化
- 流式响应超时:AI 请求往往耗时较长,务必调整 Higress 和后端服务的
idleTimeout和streamIdleTimeout,避免网关过早断开连接。 - WASM 内存限制:WASM 插件默认有内存限制,如果插件逻辑涉及大量缓存或复杂计算,需调整 Pod 的资源限制。
8. 哲学与方法论:第一性原理与权衡
抽象层与复杂性转移
Higress 在应用层与基础设施层之间建立了一个强大的可编程抽象层。
- 复杂性转移:它将流量控制的复杂性从“
代码示例
| |
| |
| |
案例研究
1:某大型电商平台微服务架构升级
1:某大型电商平台微服务架构升级
背景:
该电商平台原有基于 Nginx 的传统网关,随着业务微服务化,服务数量超过 500 个,日均请求量达数亿级,传统网关难以支撑动态流量管理和复杂路由需求。
问题:
- 网关配置需手动修改,导致服务变更响应延迟超过 30 分钟
- 缺乏内置流量控制机制,促销活动时突发流量导致后端服务雪崩
- 多云部署场景下,网关与 Kubernetes 集群深度耦合,跨云管理复杂
解决方案:
采用 Higress 作为统一云原生 API 网关,通过以下方式改造:
- 基于 Istio 控制平面实现服务发现动态同步
- 启用内置的限流熔断插件(令牌桶算法)
- 部署 Higgress Operator 实现跨集群网关实例自动化管理
效果:
- 服务变更响应时间缩短至秒级,配置热更新成功率 99.9%
- 双11大促期间成功拦截 40% 异常流量,核心服务可用性提升至 99.99%
- 跨云网关运维成本降低 60%,支持每周 200+ 次安全策略迭代
2:AI 模型部署平台推理加速
2:AI 模型部署平台推理加速
背景:
某企业级 AI 平台需要为 50+ 业务部门提供模型推理服务,模型包括 TensorFlow/PyTorch 等多种框架,平均响应时间要求 <100ms。
问题:
- 原有 Kong 网关处理 Python 预处理逻辑时延迟达 150ms
- 不同业务部门需要定制化认证方式(JWT/OAuth2/API Key)
- 模型版本切换时需要全量重启网关,影响 99% 的在线请求
解决方案:
基于 Higress 构建推理网关:
- 使用 WASM 插件实现多语言预处理逻辑(C++/Rust)
- 通过 Higress 的多认证插件组合实现动态鉴权策略
- 结合 Kserve 实现模型版本蓝绿发布
效果:
- 推理请求平均 P99 延迟从 180ms 降至 65ms
- 支持 10+ 种认证方式动态组合,策略配置效率提升 80%
- 模型热更新期间零流量损失,版本回滚时间 <30 秒
3:SaaS 平台多租户流量治理
3:SaaS 平台多租户流量治理
背景:
某跨国 SaaS 服务商为 500+ 企业客户提供 PaaS 平台,每个租户需要独立的 SLA 保障,但共享同一套微服务集群。
问题:
- 租户流量突发时相互影响(Noisy Neighbor 问题)
- 需要为不同租户配置差异化路由规则(如金/银/铜牌客户)
- 合规要求所有跨租户调用必须记录详细审计日志
解决方案:
部署 Higress 多租户网关方案:
- 基于 Header 注入实现租户标识自动识别
- 使用 Higress 的标签路由插件按租户优先级分配流量
- 开发 WASM 插件实现符合 GDPR 的审计日志脱敏
效果:
- 租户间流量隔离度达到 100%,SLA 达标率从 92% 提升至 99.5%
- 支持 200+ 租户差异化路由策略,策略配置效率提升 70%
- 审计日志存储成本降低 40%,通过 SOC2 Type II 认证
对比分析
与同类方案对比
| 维度 | Alibaba Higress | Nginx + Lua (OpenResty) | Kong |
|---|---|---|---|
| 性能 | 高性能,基于 Rust 和 Go,支持热更新,低延迟 | 极高性能,C 语言核心,事件驱动,适合高并发 | 高性能,基于 Nginx 和 OpenResty,但插件扩展可能影响性能 |
| 易用性 | 提供可视化管理控制台,支持 K8s Ingress 和 API 网关,配置简单 | 需手动编写 Lua 脚本,配置复杂,学习曲线陡峭 | 提供管理界面和 RESTful API,配置相对简单,但插件开发需 Lua |
| 成本 | 开源免费,云服务可能有额外费用 | 完全开源免费,无额外成本 | 开源版免费,企业版收费,云服务按使用量计费 |
| 扩展性 | 支持 WASM 插件,扩展灵活,兼容 K8s 生态 | 通过 Lua 脚本扩展,功能强大但维护成本高 | 插件生态丰富,支持 Lua 和自定义插件 |
| 社区与支持 | 阿里背书,社区活跃,文档较完善 | 社区成熟,文档丰富,但 Lua 生态相对小众 | 社区活跃,插件生态丰富,企业支持强 |
| 适用场景 | 云原生环境,微服务网关,K8s Ingress | 传统反向代理,高性能 API 网关,复杂定制需求 | 混合云环境,API 管理,微服务网关 |
优势分析
- 性能与灵活性:基于 Rust 和 Go 的架构,结合 WASM 插件支持,提供高性能和灵活扩展能力。
- 云原生集成:深度集成 K8s,支持 Ingress 和 API 网关双模式,适合现代云原生架构。
- 易用性:提供可视化管理界面,降低配置和运维复杂度。
- 成本效益:开源免费,无额外许可费用,适合中小型团队。
不足分析
- 生态成熟度:相比 Nginx 和 Kong,社区和插件生态相对较新,资源较少。
- 学习曲线:WASM 插件开发需要一定学习成本,不如 Lua 脚本普及。
- 企业支持:阿里背书但企业级支持服务可能不如 Kong 完善。
最佳实践
最佳实践指南
实践 1:基于 Ingress 标准的流量路由管理
说明:
Higress 深度兼容 Kubernetes Ingress API 和 Gateway API,能够通过标准的 YAML 资源配置实现基于域名、路径、Header 等条件的七层流量路由。相比传统的 Nginx Ingress,Higress 提供了更灵活的路由匹配规则和更强大的配置管理能力。
实施步骤:
- 定义 Ingress 或 Gateway API 资源文件,配置 host、path 及后端 Service。
- 应用配置:
kubectl apply -f ingress-rule.yaml。 - 验证路由规则是否生效,可通过 Higress 控制台查看路由状态。
注意事项:
- 建议使用 Gateway API 以获得更丰富的路由能力(如基于 Header 的权重路由)。
- 复杂路由规则建议先在测试环境验证,避免生产环境流量中断。
实践 2:全链路安全防护与 WAF 集成
说明:
Higress 内置了与阿里云 WAF 的无缝集成能力,支持对 HTTP/HTTPS 流量进行实时安全检测,防御 SQL 注入、XSS 等常见 Web 攻击。同时支持 mTLS 双向认证,确保服务间通信安全。
实施步骤:
- 在 Higress 控制台启用 WAF 插件,配置防护规则(如 IP 黑名单、URL 访问控制)。
- 配置 mTLS:生成服务端和客户端证书,在网关配置中启用双向认证。
- 定期更新 WAF 规则库,确保防护能力与最新威胁同步。
注意事项:
- 启用 WAF 可能会增加少量延迟,需评估性能影响。
- mTLS 证书需定期轮换,建议使用自动化工具(如 Cert-Manager)管理证书生命周期。
实践 3:服务发现与多注册中心集成
说明:
Higress 原生支持 Kubernetes Service 和 Nacos、Consul、Zookeeper 等主流注册中心,可实现混合云环境下的服务统一治理。通过插件机制,还能扩展对接自定义服务发现源。
实施步骤:
- 在 Higress 配置文件中添加注册中心地址(如 Nacos 的
serverAddr)。 - 配置服务来源(Kubernetes 或注册中心),设置服务命名空间隔离规则。
- 测试服务连通性:通过 Higress 网关访问注册中心中的服务,验证负载均衡效果。
注意事项:
- 多注册中心场景下需避免服务名冲突,建议通过命名空间或标签区分。
- 注册中心变更后需及时同步 Higress 配置,避免流量路由失败。
实践 4:动态插件扩展与自定义开发
说明:
Higress 提供了丰富的插件生态(如限流、认证、日志等),并支持基于 Wasm 或 Lua 的自定义插件开发。插件可热加载,无需重启网关即可生效。
实施步骤:
- 从官方插件市场选择所需插件(如
key-rate-limit进行限流)。 - 在控制台上传自定义 Wasm 插件,配置插件参数(如限流阈值)。
- 绑定插件到特定路由或全局作用域,观察插件运行日志。
注意事项:
- 自定义插件需测试内存和 CPU 占用,避免影响网关性能。
- 插件执行顺序很重要,需根据业务逻辑合理排序(如先认证后限流)。
实践 5:金丝雀发布与蓝绿部署
说明:
Higress 支持基于流量权重的金丝雀发布和蓝绿部署,可通过配置灰度规则逐步将流量切换到新版本服务,降低发布风险。
实施步骤:
- 部署新版本服务,确保与旧版本共存(如
v1和v2Service)。 - 在 Higress 中配置灰度路由规则,设置初始权重(如 10% 流量到
v2)。 - 逐步调整权重,观察错误率和性能指标,最终完成全量切换。
注意事项:
- 灰度发布需配合监控告警,异常流量及时回滚。
- 跨版本依赖变更时需测试兼容性,避免接口不一致导致调用失败。
实践 6:可观测性与日志集成
说明:
Higress 提供了详细的访问日志、指标监控和链路追踪能力,支持对接 Prometheus、Grafana、SkyWalking 等系统,帮助快速定位性能瓶颈和故障。
实施步骤:
- 启用 Higress 的 Prometheus 指标采集,配置 Grafana 仪表盘模板。
- 配置访问日志输出到 Elasticsearch 或 Loki,设置日志格式(如 JSON)。
- 开启链路追踪(如集成 OpenTelemetry),分析跨服务调用链路。
注意事项:
- 高流量场景下需
性能优化建议
性能优化建议
优化 1:启用 CPU 亲和性与 NUMA 优化
说明: Higress 基于 Envoy 构建,在高并发场景下,CPU 上下文切换和跨 NUMA 节点内存访问会显著增加延迟。通过绑定 Worker 进程到特定 CPU 核心,并确保内存分配在本地 NUMA 节点,可以减少缓存未命中和调度开销。
实施方法:
- 在容器启动参数中添加
--cpuset-cpus绑定核心,或使用 Kubernetes 的cpu-manager-policy=static策略。 - 确保 Higress 的 Worker 进程数(通常自动配置为 CPU 核数)与绑定的 CPU 核心数一致。
- 在宿主机层面开启 NUMA 均衡(
numactl --interleave=all)或根据拓扑结构绑定。
预期效果: 在长尾请求(P99 延迟)场景下,可降低 10%-20% 的延迟波动,提升吞吐量约 5%-10%。
优化 2:配置高效连接池与 HTTP/2 复用
说明: 默认的连接管理策略可能导致后端服务频繁建立 TCP/TLS 连接,尤其是在高 QPS 下。优化 HTTP/1.1 连接池大小或强制启用 HTTP/2 连接复用,可以显著减少握手开销。
实施方法:
- 在 Higress 路由配置中,针对后端服务显式设置
http2ProtocolOptions,开启 HTTP/2。 - 调整 Cluster 配置中的
max_connections(HTTP/1.1)或max_requests_per_connection(HTTP/2)。 - 对于 HTTP/1.1,建议将连接池上限设置为
(目标QPS / 平均单连接并发) * 1.5。
预期效果: 减少后端连接建立时间 50% 以上,降低后端服务 CPU 负载(减少握手计算),提升整体吞吐量 15%-30%。
优化 3:启用全链路零拷贝与 FastSend
说明: 数据在内核空间与用户空间之间的多次拷贝是网关性能瓶颈之一。Higress/Envoy 支持利用 sendmsg 系统调用配合零拷贝技术(如 io_uring 或 eBPF)优化转发链路。
实施方法:
- 在 Higress 启动参数中开启
--enable-recv-buffer优化(视具体版本支持情况)。 - 确保运行环境内核版本支持
sendfile或splice系统调用。 - 检查并开启 Listener 的
useOriginalDst并配合适当的per_connection_buffer_limit_bytes设置。
预期效果: 在大文件下载或高带宽转发场景下,可降低 CPU 使用率 20%-40%,并提升最大吞吐带宽。
优化 4:精简插件链路与 WASM 内存优化
说明: Higress 支持 WASM 插件,但频繁的 Host 与 Guest 内存交换以及复杂的插件逻辑会引入额外延迟。减少不必要的插件加载和优化 WASM 内存管理至关重要。
实施方法:
- 审计当前生效的插件,移除未使用的全局插件。
- 对 WASM 插件使用
AOT(提前编译)模式,并限制vm_config中的memory上限,防止频繁 GC。 - 对于高性能要求的路由,绕过逻辑复杂的 Lua/WASM 插件,使用原生的 Envoy Filter 或 DirectResponse。
预期效果: 处理延迟减少 2ms-5ms(取决于插件数量),WASM 插件调用开销降低 30%。
优化 5:调整日志级别与异步访问日志
说明: 阻塞式磁盘 I/O 和高频率的日志打印是性能杀手。将日志级别调整为 Warn/Error,并配置异步日志上报(如对接 OpenTelemetry 或使用异步文件写入),可以释放 CPU 资源用于业务处理。
**实施方法
学习要点
- Higress 是阿里巴巴开源的基于 Istio 的下一代云原生 API 网关,旨在解决云原生时代流量治理和 API 管理的复杂性问题。
- 它深度集成了 K8s Ingress 和 Gateway API,支持从传统微服务到云原生架构的平滑迁移,兼容主流服务发现(如 Nacos、Consul)。
- 内置高性能 WAF 插件和精细化流量管理能力,提供安全防护、限流熔断、灰度发布等企业级功能,无需额外组件。
- 支持动态路由和服务级负载均衡,通过热更新实现配置变更零停机,适合高并发生产环境。
- 提供可扩展的插件体系(如 Lua、Wasm),允许开发者自定义处理逻辑,灵活适配业务需求。
- 开箱即用的 Prometheus 监控集成和可视化控制台,简化运维和问题排查流程。
- 通过开源社区活跃迭代,已验证支撑阿里巴巴双 11 等超大规模场景,兼具高性能与稳定性。
学习路径
学习路径
阶段 1:入门基础与核心概念
学习内容:
- 云原生网关基础: 理解什么是 API 网关,以及南北向流量与东西向流量的区别。
- Higress 架构概览: 了解 Higress 基于 Istio 和 Envoy 的架构设计,以及它作为 Ingress Controller 的角色。
- 基本部署: 学习如何在 Kubernetes 集群中通过 Helm 或 YAML 安装部署 Higress。
- 控制台操作: 熟悉 Higress 的原生控制台(Console)界面,进行基本的域名路由配置。
学习时间: 1-2周
学习资源:
- Higress 官方 GitHub 仓库 (README.md)
- Higress 官方文档 - “快速开始” 章节
- Kubernetes Ingress Nginx 对比文档(用于理解差异)
学习建议: 建议先在本地搭建一个 Kind 或 Minikube 环境,不要直接在生产环境操作。重点理解 Higress 如何接管 Kubernetes 的 Ingress 路由。
阶段 2:流量治理与路由配置
学习内容:
- 路由规则详解: 深入学习基于域名、路径、Header 的路由匹配规则。
- 流量管理: 掌握金丝雀发布、蓝绿发布和 A/B 测试的配置方法。
- 负载均衡策略: 学习如何配置加权轮询、一致性哈希等负载均衡算法。
- 服务发现: 了解如何对接 Nacos、ZooKeeper、Consul 以及 Kubernetes CoreDNS。
学习时间: 2-3周
学习资源:
- Higress 官方文档 - “路由配置” 与 “流量管理”
- Envoy Filter 基础入门文档
- Higress 官方示例库
学习建议: 尝试配置复杂的路由场景,例如将 90% 的流量发送到服务 V1,10% 发送到服务 V2。动手实践是理解流量治理的唯一捷径。
阶段 3:安全与插件生态
学习内容:
- 安全认证: 学习如何配置 Basic Auth、JWT Auth、ApiKey 认证以及 OIDC 单点登录。
- 插件系统: 深入理解 Higress 的插件机制(Wasm 插件与 Lua 插件)。
- 常用插件实战: 实践使用限流插件、CORS 跨域配置、请求/响应头修改插件。
- 自定义插件: 学习如何使用 Go 或 Python 编写一个 Wasm 插件来扩展网关功能。
学习时间: 3-4周
学习资源:
- Higress 官方文档 - “安全” 与 “插件市场”
- WebAssembly (Wasm) 简明教程
- Higress 官方插件开发指南
学习建议: 浏览 Higress 插件市场,先安装并测试现有的热门插件。随后,尝试编写一个简单的自定义插件(例如:在响应头中添加特定字段),以掌握插件开发流程。
阶段 4:高可用与生产级运维
学习内容:
- 可观测性: 学习配置 Prometheus 监控指标、集成 SkyWalking/Zipkin 进行链路追踪、以及日志采集。
- 高可用部署: 掌握 Higress 的水平扩缩容策略、资源限制与性能调优。
- 网关高可用: 模拟网关实例故障,验证服务不中断的高可用架构。
- 多集群管理: 了解 Higress 在多集群环境下的部署与流量调度模式。
学习时间: 2-3周
学习资源:
- Higress 官方文档 - “运维指南”
- Prometheus 与 Grafana 监控配置最佳实践
- Envoy 性能调优博客文章
学习建议: 在测试环境中模拟高并发流量(使用 JMeter 或 Hey),观察 Higress 的 CPU/内存表现,并根据监控数据进行参数调优。重点关注错误率和延迟指标。
阶段 5:架构设计与源码贡献
学习内容:
- 深度架构剖析: 深入研究 Higress 的源码结构,理解控制面与数据面的交互细节。
- 性能极致优化: 探索 Wasm 插件的性能边界,学习如何减少插件对延迟的影响。
- 生态集成: 学习如何将 Higress 深度集成到微服务生态(如对接 Dubbo、gRPC 协议)。
- 社区贡献: 参与开源社区,提交 Issue 或 PR,修复 Bug 或贡献新插件。
学习时间: 持续学习
学习资源:
- Higress GitHub 源码
- Higress 社区博客与深度技术文章
- Istio 与 Envoy 官方深度文档
学习建议: 阅读源码是提升最快的阶段。建议从阅读核心路由逻辑的源码开始,尝试在本地运行 Debug 版本
常见问题
1: Higress 是什么?它与 Nginx 和 Kong 等网关相比有什么核心优势?
1: Higress 是什么?它与 Nginx 和 Kong 等网关相比有什么核心优势?
A: Higress 是一款阿里云开源的、云原生且高性能的 API 网关。它基于 Envoy 和 Istio 构建,旨在解决云原生时代流量治理的痛点。与 Nginx(侧重反向代理,配置复杂)和 Kong(基于 OpenResty/Lua,插件开发门槛较高)相比,Higress 的核心优势在于:
- 深度集成云原生生态:原生支持 Istio,可以直接作为 Ingress Controller 接入 Kubernetes 集群,实现服务网格与 API 网关的流量统一管理。
- 标准化的插件体系:支持 WASM (WebAssembly) 插件,允许开发者使用 Go、C++、Rust 等多种语言编写插件,且插件热更新更安全,不会导致网关重启。
- 开箱即用:提供了丰富的预置插件(如认证、限流、路由重写等),并提供了友好的控制台界面,降低了配置和运维的复杂度。
- 高吞吐与低延迟:底层基于 Envoy C++ 内核,在处理高并发流量时具有极高的性能表现。
2: Higress 是否支持从 Nginx 或 Kong 迁移?迁移成本高吗?
2: Higress 是否支持从 Nginx 或 Kong 迁移?迁移成本高吗?
A: 是的,Higress 非常重视对旧有网关的兼容性,旨在降低迁移成本。
- Nginx 兼容:Higress 提供了 Nginx 配置转换工具,能够解析大部分常用的 Nginx 配置指令(如
location、upstream、rewrite等),并将其自动转换为 Higress 的路由配置。 - Kong 兼容:Higress 的插件设计参考了业界标准,支持 Kong 的部分插件逻辑。虽然配置格式不同,但 Higress 提供了类似的插件功能(如 Key Auth、Rate Limiting),用户可以通过控制台或 K8s YAML 重新配置来实现功能对等。
- 迁移工具:社区提供了相关的迁移脚本和工具,帮助用户快速将流量切换到 Higress,而无需大规模修改业务代码。
3: Higress 的插件是如何工作的?是否支持自定义开发?
3: Higress 的插件是如何工作的?是否支持自定义开发?
A: Higress 采用灵活的插件架构来扩展功能,主要支持两种类型的插件:
- 原生插件:基于 Go 语言开发,运行在 Higress 的主进程中或通过 gRPC 通信。这类插件性能极高,适合处理核心逻辑。
- WASM 插件:这是 Higress 推荐的扩展方式。它基于 WebAssembly 技术,允许用户使用 Go、C++、AssemblyScript 等语言编写插件逻辑。
- 隔离性:WASM 插件运行在沙箱环境中,即使插件崩溃也不会导致网关进程崩溃。
- 热更新:修改或加载 WASM 插件无需重启 Higress 网关,可以实现动态生效。
- 开发门槛低:Higress 提供了 Wasm-SDK 和插件开发脚手架,开发者可以像写普通业务代码一样编写网关插件。
4: Higress 如何处理服务发现?它是否只能对接 Kubernetes 服务?
4: Higress 如何处理服务发现?它是否只能对接 Kubernetes 服务?
A: Higress 不仅限于 Kubernetes 环境,它具备强大的多源服务发现能力:
- Kubernetes 服务发现:作为 Ingress Controller,Higress 会自动监听 K8s 的 Service、Endpoints 变化,实现服务自动注册和发现。
- 注册中心集成 (Nacos/ZooKeeper/Consul):Higress 原生支持对接主流的微服务注册中心。通过配置注册中心来源,Higress 可以将微服务中的实例动态转换为网关的 Upstream(后端服务),实现非 K8s 流量与 K8s 流量的统一调度。
- DNS 发现:支持通过 DNS 解析来动态发现后端服务地址。
- 固定地址/域名:也支持手动配置固定的 IP 或域名作为后端服务。
5: 在生产环境中,Higress 的高可用性 (HA) 如何保障?
5: 在生产环境中,Higress 的高可用性 (HA) 如何保障?
A: Higress 在设计之初就考虑了生产级的高可用需求,主要通过以下方式保障:
- 无状态架构:Higress 的控制面和数据面分离,数据面代理是无状态的,可以任意水平扩展。通过 Kubernetes 的 HPA (Horizontal Pod Autoscaler) 即可根据 CPU/内存使用率自动扩缩容。
- 多副本部署:在生产环境中,通常部署多个 Higress 副本(通常建议 2+ 个实例),并配合 Kubernetes Service 或云厂商的负载均衡器 (SLB/ELB) 对外暴露服务。
- 健康检查:Higress 会自动对后端 Upstream 服务进行
思考题
## 挑战与思考题
### 挑战 1: [简单]
问题**: 快速上手与环境验证
假设你需要在本地快速验证 Higress 的核心路由功能。请描述如何使用 Docker Compose 在最短时间内启动一个包含 Higress 控制面的标准环境,并配置一个简单的 HTTP 路由规则(例如:将 /source 路径的请求转发到一个模拟的后端服务)。请写出关键的 docker-compose.yml 配置片段或核心命令。
提示**: Higress 官方仓库通常提供了开箱即用的 Docker 镜像或 Compose 文件。关注官方文档中的“快速开始”部分,重点在于如何定义 Ingress 路由以及如何配置后端服务的发现地址。
实践建议
基于 Higress 作为“AI Native API Gateway”的定位及其在阿里云内部的实践,以下是针对实际生产环境的 6 条实践建议:
1. 利用 AI 指标进行细粒度的可观测性监控
- 场景:在接入大模型(LLM)应用时,传统的 HTTP 状态码和延迟不足以反映业务全貌。
- 建议:在 Higress 的路由配置中,重点启用并关注 AI 特有的指标,如 Token 吞吐量(TPS)、首字生成时间(TTFT) 以及 Token 生成延迟。
- 最佳实践:将这些指标对接到 Prometheus + Grafana,并针对不同模型供应商(如 OpenAI vs. 通义千问)设置独立的 SLO 告警。
- 常见陷阱:仅监控网关层的请求成功率,而忽略了上游 LLM 服务返回的流式响应中断或 Token 超限错误,导致用户体验感知滞后。
2. 实施基于语义的请求路由与灰度发布
- 场景:业务需要从 GPT-3.5 迁移到 GPT-4,或者在不同模型间进行 A/B 测试,且不希望修改客户端代码。
- 建议:使用 Higress 的插件市场中的
ai-traffic-routing或类似插件,基于请求头(Header)、JSON Body 中的参数(如model字段)甚至是用户 ID 进行流量分割。 - 最佳实践:配置金丝雀发布策略,先让 5% 的内部用户流量指向新版模型,验证通过后再逐步全量。
- 常见陷阱:在路由规则中硬编码了模型名称,导致后续切换模型版本时必须修改网关配置。应使用抽象的别名(如
prod-model-alias)并在后端服务中映射具体模型。
3. 配置严格的 Token 限流与缓存策略
- 场景:LLM 调用成本高昂,且上游 API 对 RPM(每分钟请求数)和 TPM(每分钟 Token 数)有严格限制。
- 建议:不要仅依赖简单的 QPS 限流。应配置针对 Token 计数 的本地限流或全局限流,防止突发流量导致账单爆炸或触发上游 429 错误。
- 最佳实践:对于提示词较长且重复度高的场景(如固定的 System Prompt),启用 Higress 的语义缓存插件,直接在网关层返回结果,减少昂贵的上游 API 调用。
- 常见陷阱:缓存 Key 设置不当导致缓存穿透(例如将用户输入的变量部分也纳入了缓存 Key 计算),应确保仅缓存 Prompt 的静态部分。
4. 构建模型供应商的中立层与故障转移
- 场景:避免被单一云厂商锁定,或者应对某个模型服务宕机的情况。
- 建议:在 Higress 中将上游服务定义为“服务来源”,通过配置多个目标服务实现主备切换或负载均衡。
- 最佳实践:配置一个默认的模型服务(如 Azure OpenAI),同时配置一个备用服务(如通义千问或本地部署的 vLLM)。当主服务返回 5xx 错误或超时时,网关自动切换到备用服务。
- 常见陷阱:不同厂商的 API 协议(如 OpenAI 格式与原生格式)存在细微差异,直接切换会导致解析失败。需确保 Higress 的协议转换插件已正确开启,统一转换为 OpenAI 标准协议对外暴露。
5. 在网关层注入敏感信息与 Prompt 模板
- 场景:前端直接调用 LLM API 时,容易在客户端泄露 API Key,且难以统一管理 System Prompt。
- 建议:利用 Higress 的 Wasm 插件或
ai-proxy插件,在请求转发前动态注入 API Key、鉴权信息以及标准化的 System Prompt。 - 最佳实践:前端请求只需携带业务
引用
- GitHub 仓库: https://github.com/alibaba/higress
- DeepWiki: https://deepwiki.com/alibaba/higress
注:文中事实性信息以以上引用为准;观点与推断为 AI Stack 的分析。
站内链接
- 分类: 系统与基础设施 / 开源生态
- 标签: Higress / API 网关 / AI 原生 / 阿里开源 / Istio / Envoy / WASM / LLM
- 场景: AI/ML项目 / 大语言模型 / 云原生/容器
相关文章
- 阿里开源 Higress:AI 原生 API 网关
- 阿里开源 Higress:AI 原生 API 网关
- 阿里开源 Higress:AI 原生 API 网关
- 阿里开源 Higress:AI 原生 API 网关
- 阿里开源 Higress:AI 原生 API 网关 这篇文章由 AI Stack 自动生成,包含多次大模型调用,提供深度的结构化分析。