当前位置: 首页 > web >正文

阿里云——应用交付与负载均衡


应用交付与负载均衡

在分布式架构中,单一实例无法承受高并发流量,也存在单点故障风险。负载均衡(Load Balancing) 是解决这些问题的核心手段,它像一位经验丰富的交通指挥官,将涌入的用户请求智能地分发到后端多台健康的服务器上,从而实现高并发、高可用的服务能力。

6.1 负载均衡(SLB):四层(CLB)与七层(ALB/NLB)深度对比

阿里云负载均衡(SLB)是一个统称,其下包含三种不同定位的产品,理解它们的区别是正确选型的关键。

  1. 传统型负载均衡(CLB - Classic Load Balancer)

    • 工作层级:主要基于四层(TCP/UDP),部分支持七层(HTTP/HTTPS)
    • 核心特点
      • 性能强劲:采用集群部署,支持超高性能(每秒千万级并发连接)。
      • 功能全面:支持TCP/UDP/HTTP/HTTPS协议,具备基础的四层和七层转发能力。
      • 静态部署:监听器(Listener)和后端服务器组(Server Group)是强绑定关系,配置相对固定。
    • 适用场景:对性能要求极高的四层流量转发、传统的七层Web应用、SSL卸载。
  2. 应用型负载均衡(ALB - Application Load Balancer)

    • 工作层级:基于七层(HTTP/HTTPS/QUIC),是CLB在七层功能的增强版。
    • 核心特点
      • 高级路由:支持基于域名、URL路径、HTTP头、查询参数、HTTP方法等丰富条件的转发规则,可精细化路由到不同后端应用。
      • 面向应用:概念上更贴近“应用”,与微服务架构天然契合。
      • 自动弹性:无需选择规格,容量可自动弹性伸缩。
      • 强大的可观测性:原生集成ARMS,提供丰富的七层监控指标(如QPS、RT、状态码)。
    • 适用场景:微服务网关、容器Ingress、灰度发布、多后端服务路由(如/api路由到Java服务,/static路由到OSS)。
  3. 网络型负载均衡(NLB - Network Load Balancer)

    • 工作层级:基于四层(TCP/UDP/TLS),是CLB在四层功能的增强版。
    • 核心特点
      • 超高性能:支持超高性能(亿级并发,千万级PPS)和超低延迟。
      • 地址透传:支持保留客户端源IP地址,无需使用Proxy Protocol。
      • 双栈支持:原生支持IPv6。
    • 适用场景:游戏服务器、物联网(IoT)大并发长连接、金融级实时交易、TCP/UDP协议转发。

选择指南总结表

特性CLB (传统型)ALB (应用型)NLB (网络型)
协议支持TCP/UDP/HTTP/HTTPSHTTP/HTTPS/QUICTCP/UDP/TLS
性能焦点高并发灵活路由超高性能 & 超低延迟
核心优势功能全面,稳定可靠高级路由,微服务友好极致四层性能,地址透传
典型场景通用Web负载均衡微服务、容器Ingress游戏、物联网、金融交易

对于全新的现代化应用,应优先考虑ALB和NLB。ALB提供了无与伦比的七层流量治理灵活性,非常适合微服务架构;NLB则提供了极致的四层性能。CLB则更适合传统架构或对协议有混合要求的场景。

6.2 全局负载均衡:云解析DNS(Alibaba Cloud DNS)实现跨地域容灾

SLB解决了单一地域内的高可用问题。但如果整个地域发生重大故障(如自然灾害、大规模运营商故障)怎么办?这时就需要全局负载均衡(Global Server Load Balancing, GSLB)

阿里云云解析DNS(Alibaba Cloud DNS) 提供了基于DNS的GSLB能力。

实现原理

  1. 你在不同地域(如上海、深圳)部署了完全相同的应用集群,并各自创建了SLB。
  2. 在云解析DNS中,为你的域名(如www.example.com)添加两条A记录,分别指向上海和深圳SLB的公网IP。
  3. 为这两条记录启用解析线路健康检查功能:
    • 智能解析:配置“默认”线路,设置主备优先级。例如,上海IP为主,深圳IP为备。
    • 健康检查:云解析DNS会定期向后端SLB的IP发送健康检查请求(如HTTP请求),探测其健康状态。

故障转移流程

  1. 当云解析DNS检测到上海SLB的健康检查失败(意味着上海整个集群异常)时,它会自动将DNS解析结果从上海的IP切换到健康的深圳SLB的IP
  2. 后续所有用户对www.example.com的域名解析请求,都会得到深圳的IP地址。
  3. 尽管切换需要一定时间(受DNS TTL影响),但这实现了地域级别的容灾,保证了业务的最终可用性。

如何利用SLB和DNS设计跨可用区的故障转移方案
这是一个经典的“两地三中心”容灾架构的简化版:

  1. 同城高可用(Multi-AZ):在一个地域内,将多台ECS部署在不同可用区的VSwitch中,并挂载到同一个SLB后端服务器组。SLB的健康检查会自动剔除故障可用区的异常ECS,实现同城容灾
  2. 异地容灾(Multi-Region):在另一个地域部署一套完整的应用,并通过云解析DNS的智能解析和健康检查功能,与主地域构成主备关系,实现异地容灾
6.3 应用发布与部署:实战Serverless应用引擎(SAE)

Serverless应用引擎(SAE)是一款极富竞争力的全托管Serverless化的应用托管平台。它真正实现了无需管理服务器(IaaS)和 Kubernetes 集群(CaaS),专注于应用本身的设计与开发。

SAE 的核心价值

  • 零基础设施管理:无需管理 ECS 或 Kubernetes Worker 节点,无需关心服务器运维、安全补丁、容量规划。
  • 极致弹性:支持多种弹性策略:
    • 定时弹性:在指定时间进行扩容/缩容。
    • 指标弹性(HPA):根据 CPU、内存、QPS 等指标自动扩缩容。
    • 混合弹性:可弹性调用 ECIs,轻松应对突发流量,避免资源闲置。
  • 微服务原生:无缝集成 MSE 微服务治理组件(如 Nacos),提供无损上下线、服务鉴权、灰度发布等能力。
  • 成本优化:按应用实例运行时所消耗的 CPU 和内存资源量进行计费。在实例缩容到 0 时,不产生任何费用

实战演练:将 Spring Boot 应用部署到 SAE

目标:将一个简单的 Spring Boot Jar 包应用部署到 SAE,并通过公网访问。

步骤一:应用配置与打包

  1. 确保你的 Spring Boot 应用在 application.properties 中配置了 server.port=8080(SAE 默认通过 8080 端口进行健康检查)。
  2. 使用 mvn clean package 将应用打包成一个可执行的 Jar 包。

步骤二:在 SAE 控制台创建应用

  1. 登录 SAE 控制台,点击“创建应用”。
  2. 应用基本信息
    • 应用名称:demo-springboot-app
    • 命名空间:选择默认命名空间。
  3. 应用部署方式:选择“JAR 包部署”,上传刚才打包好的 Jar 文件。
  4. 应用实例配置
    • 实例规格:选择例如 2 CPU核,4 GiB 内存。
    • 实例数量:设置应用初始实例数,例如 2 个实例以实现高可用。
  5. 网络配置:选择我们之前创建的 prod-vpc 和对应的 VSwitch。非常重要:必须与应用需要访问的其他资源(如 RDS、Redis)处于同一 VPC 内,才能通过内网连接。
  6. 高级设置
    • 健康检查:SAE 默认会通过 :8080/actuator/health 路径进行健康检查,确保你的应用包含 Spring Boot Actuator 依赖。
  7. 点击“确认”,开始创建应用。SAE 会自动为你创建资源并拉取 Jar 包启动应用。

步骤三:配置公网访问

  1. 应用创建成功后,在“应用详情”页面,切换到“访问配置”标签页。
  2. 点击“绑定 SLB”,在公网访问标签下,选择一个已有的 SLB 或新建一个。SAE 会自动为你配置监听端口(如将 SLB 的 80 端口映射到应用实例的 8080 端口)。
  3. 绑定成功后,你会获得一个 SLB 的公网 IP 地址。

步骤四:访问应用
在浏览器中输入得到的公网 IP 地址,即可访问你的 Spring Boot 应用。

架构价值

  • 简化运维:你完全不需要管理底层服务器,只需关心应用代码和 SAE 的配置。
  • 成本效益:在流量低谷时,你可以将实例数缩容到 1 甚至 0,大幅节省成本。
  • 内置高可用:通过配置多个实例,SAE 会自动将实例分散到不同可用区,并提供健康检查与自动恢复。

通过本章,掌握了如何将后端服务高效、可靠地暴露给用户。从精细的流量路由到全局的容灾设计,再到革命性的应用部署方式,应用交付是连接用户与服务的最后一座桥梁,其设计的好坏直接决定了用户体验。

http://www.xdnf.cn/news/19049.html

相关文章:

  • 数据对话的“通用语法”:SQL与KingbaseES的智能处理艺术
  • 从感知机到大模型:神经网络的全景解析与实践指南
  • ES01-环境安装
  • 盛大启幕!融智兴科技亮相 IOTE 2025 深圳国际物联网展
  • SegEarth-R1: Geospatial Pixel Reasoning via Large Language Model
  • 稀土:从“稀有”到“命脉”的科技核心
  • LeetCode算法日记 - Day 23: 外观数列、数青蛙
  • LeetCode - 155. 最小栈
  • 8.28 模拟
  • rust语言(1.88.0)sqlite数据库rusqlite库(0.37.0)学习笔记
  • 蘑兔音乐:帮你把灵感落地
  • 【新版发布】Apache DolphinScheduler 3.3.1 正式上线:更稳、更快、更安全!
  • 【Django + Pure Admin】基于Django+Vue3的前后端分离管理系统框架设计
  • 预处理详解
  • 【Spring Cloud 微服务】5.架构的智慧枢纽:深度剖析 Nacos 注册中心
  • 《Vuejs设计与实现》第 17 章(编译优化)
  • JMeter 5.3 性能测试:文件下载脚本编写与导出文件接收完整指南
  • 数据结构:堆排序 (Heap Sort)
  • spire.doc在word中生成公式
  • 设计模式理解
  • Shader开发(十七)着色器中的纹理采样与渲染
  • 农业物联网:科技赋能现代农业新篇章
  • 数模笔记day01(数据预处理、K-means聚类、遗传算法、概率密度分布)
  • UE5蓝图接口的创建和使用方法
  • 有鹿机器人如何用科技与创新模式破解行业难题
  • linux下的网络编程(2)
  • 智能体协作体系核心逻辑:Prompt、Agent、Function Calling 与 MCP 解析
  • AV1到达开始和约束时间
  • 分治法——二分答案
  • XFile v2 系统架构文档