如何构建流量无损的在线应用架构 | 专题开篇

本文涉及的产品
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
云原生网关 MSE Higress,422元/月
简介: 本篇是整个《如何构建流量无损的在线应用架构》系列的第一篇,这一系列共三篇,旨在使用最为朴素的语言将影响在线应用流量稳定性的技术问题做一个归类,这些问题的解决方案有的只是一些代码层面的细节,有的需要工具进行配合,有的则需要昂贵的解决方案,如果您的应用想在云上有一个【流量无损】的一站式体验,可以关注阿里云的《企业级分布式应用服务(EDAS)》这个云产品,EDAS 也将会持续向默认接入流量无损的方向演进。

作者 | 孤弋、十眠


-全系列查看-

如何构建流量无损的在线应用架构 | 专题中篇

如何构建流量无损的在线应用架构 | 专题尾篇


前言


Github 因为软件升级曾经导致过长达 6 个多小时的全球性服务中断 ...Meta(原名:Facebook) 也刚刚经历一起因为配置推送错误导致全球 6 个多小时的系统瘫痪 ...


诸如此类的大型 IT 系统故障每隔一段时间都会出来一个。为企业搭建一个安全可靠的在线应用架构,是一个系统架构师主要责任,他除了将业务系统架构吃透以安全地应对当前的业务流量之外,还需要具备构建未来的能力,即所选取的架构需要能应对业务未来几年的业务增长。这种能力,和技术潮流无关,和所选择的技术的人才市场容量有关,和企业自身业务形态和增长方向有关。


我们先抛开 IT 系统的基础设施和企业业务的具象,抽象到在线应用的两个关键衡量指标中去:流量和容量。容量的目标还是为了满足流量的基本需求,而我们不断优化的目标,就是一直在这个两个指标中找出一个能代表"技术先进性"的平衡点。这个平衡点意味着:高效且精确的将现有的资源(容量)服务于现有的,及其可预见的业务流量;高效意味着性能,精确则需无损。


这系列文章一共三篇,旨在让技术回归到系统架构师们需要解决的本质问题:如何让在线应用最大化的流量无损。


问题定义


我们先参考一个通用业务的部署架构图(说明:由于笔者的技术背景是 Java,熟悉的基础设施也主要是云服务为主,所以其中很多的例子是使用 Java 体系中的一些技术架来和云服务进行阐述,一些细节点上可能不太具备其他编程语言的参考的意义。):image.gif


1.png

这张图是一个典型而且很简单的一个业务架构,这个业务会服务于来自全球的用户,当用户的请求到达之后,经过负载均衡转入后面的微服务网关集群,微服务网关做完一些基础的流量清洗、鉴权、审计等工作之后再根据业务形态路由到后面的微服务集群中;整个微服务集群最终会和不同的数据服务进行数据的交换(读/写)操作。

根据上面这一描述,我们暂且将整个流量请求服务的过程分为:流量解析、流量接入、流量服务、数据交换四个主要阶段。在这四个阶段中,都有可能发生流量损耗的可能性,而且每一种可能发生之后我们所采取的解决方案会是截然不同的,有的通过一些框架配置就能解决,而有的可能需要整体架构的重构。我们会通过三篇系列文章对这四个阶段,一一进行剖析,开篇主要讲的是流量解析和流量接入。

流量解析


解析的场景的本质还是通过一个服务名称获取一个服务的地址,这一过程是我们常规意义上的 DNS 解析。但是传统域名解析在目前各个服务商的管理策略影响下,经常会遇到域名缓存、域名转发、解析延迟、跨服务商访问等问题。尤其在面向全球的互联网业务中,Web 服务通过传统 DNS 解析时,不会判断终端用户的来源,随机选择其中一个 IP 地址返回给终端用户,这不仅会可能由于跨服务商解析而降低了解析效率,而且还会导致终端用户可能因为跨洋访问而导致速度变慢。
上面的这些问题都有可能会直接导致我们的流量受损。为应对上述的场景,常用的解决方案有智能解析和 HTTP DNS 技术,分别阐述如下:



1、智能解析


智能解析,一开始主要用来解决不同运营商之间跨网络解析而引起网络不通的问题,他主要是根据访问端的地址,选择对应网络下的接入点,从而达到解析正确的地址的目的。随着这一技术的持续迭代和演进,有的产品在此基础上加入了不同地域的网络质量监测节点,可以从一组机器中根据不同节点的服务质量,进行更智能的解析。目前阿里云上的智能解析依托于云的基础设施,甚至可以以应用为单位动态扩缩节点池中的节点,最大化的在这一领域发挥了云上弹性的价值:

2.png

image.gif(图片来源于阿里云云解析文档)


2、HTTPDNS


HTTPDNS 顾名思义,就是使用 HTTP 协议代替 DNS 的发现协议;一般由服务商(或者自建)提供一个 HTTP 服务器,这个服务器提供一个极其简练的 HTTP 接口,客户端在发起访问之前,由 HTTPDNS SDK 先行发起解析,解析失败再 Fallback 回原来的 LocalDNS 解析。HTTPDNS 在解决 DNS 劫持、域名缓存 等场景下特别有效,缺点就是大部分方案还需要客户端侵入 SDK;同时 Server 的建设成本会有点高昂。不过在随着云厂商在这一领域的持续迭代,已经涌现出来了越来越多更加轻量的解决方案;这也会帮助 HTTPDNS 这种技术成为今后 DNS 领域演进的主流趋势之一。


流量接入


当 DNS 解析到正确的地址之后,便进入到了流量接入这个核心的入口,这个过程的主角是网关,一个网关通常意义上扮演的角色重要有路由、鉴权、审计、协议转换、API 管理、以及安全防护等重要的功能。业界常见的CP是负载均衡和微服务网关的结合,但是这个两个组件配合起来往往有一些场景比较容易忽略,以下图为例,我列举三个容易忽略的场景简单做一些介绍,分别是:流量安全、网关应用管控与流量路由


3.png


1、流量安全


不安全的流量分为两类,第一类是攻击类型的流量;第二类是超过系统容量的流量。攻击类型流量的防范主要以软硬件的防火墙为主。这一类解决方案颇为成熟,这里不再赘述。这里比较难以甄别是超过系统容量的非攻击流量,如何在这种场景下,最大限度的保证正常流量得到相应的服务,还能保护极有可能雪崩的整个业务系统是抉择的难点。


简单的尝试,是在网关这里按照请求 QPS、并发数、分钟请求数甚至接口参数等,做类似于 RateLimit 的流量控制。但是在此之前,是要求系统架构师能对系统的容量心中有数。我们推荐的做法是在做类似的安全防护之前,先要做到一个整体的容量评估,这里的评估不单单只是针对某些 API 做一次压力测试这么简单,是推荐针对生产环境做一次真正全链路的压测(第三篇中将有一节专门介绍),然后再针对性的作出安全策略的调整。


2、网关应用管控


网关归根结底还是一个应用,按照我们目前接触到的客户线上系统来看,一个完全是微服务架构的业务系统,这个应用会占用整个系统 1/6 - 1/3 不等的机器资源,这已经算得上是一个很大规模的应用了。既然是一个应用,它就会进行一些常规的运维管控操作如启动、停止、部署、扩容等。但是由于网关是一个业务系统的咽喉,他是不能做频繁的操作的,这意味着有几点原则要非常清晰的传导到开发团队内部:


  • 配置与代码解耦:能力(协议转发、限流配置、安全策略、路由规则等)是必须可配置,且可以动态下发的。


  • 不要夹杂业务逻辑:让网关回归到网关的本质,不要夹杂业务逻辑;一个自己不加戏的网关就是一个好网关!


除了上述两点开发侧的原则之外,在运维侧也有相应的原则。运维上除了常规的监控和报警,还需要具备自适应的弹性能力。但是网关的弹性牵扯的点太多:比如需要配合前面的负载均衡一起操作(如:进行应用部署之前需要在负载均衡处将对应节点下线或降权,应用部署确保启动成功之后再将节点上线);同时弹性还需要和应用管控体系自动化的进行配合才能做到线上流量无损


3、流量路由



经过网关的下一步,则是将应用路由到下一节点,互联网场景在有高可用多机房部署的情况下,为了服务质量,都会采取就近路由的原则。即如果网关入口在主机房,下一跳就希望路由到同机房的节点,同样的道理,在一个微服务集群中的下下一跳,还是希望可以路由到相同的机房。否则,如果出现了跨机房调用的请求时,RT 就会变的很长,最终因请求超时而导致流量有损,如下图:


4.png


要想做到同机房调用的效果,我们需要对选择的服务框架有很好的理解。核心的原理是对于下一跳的路由时,需要优先选择相同机房的地址。而不同的框架和业务所在的部署环境,都需要作出一些针对性的定制开发才能做到严格意义上的同机房优先调用。

结语



本篇是整个《如何构建流量无损的在线应用架构》系列的第一篇,这一系列共三篇,旨在使用最为朴素的语言将影响在线应用流量稳定性的技术问题做一个归类,这些问题的解决方案有的只是一些代码层面的细节,有的需要工具进行配合,有的则需要昂贵的解决方案,如果您的应用想在云上有一个【流量无损】的一站式体验,可以关注阿里云的《企业级分布式应用服务(EDAS)》这个云产品,EDAS 也将会持续向默认接入流量无损的方向演进。下一篇,我们将从在线应用发布与服务治理的角度带来不一样的干货,敬请期待,我们下周见。

点击“阅读原文”,查看更多内容!


点击下方链接,查看实战峰会更多精彩内容!https://developer.aliyun.com/article/817767

相关文章
|
2月前
|
人工智能 监控 测试技术
告别只会写提示词:构建生产级LLM系统的完整架构图​
本文系统梳理了从提示词到生产级LLM产品的八大核心能力:提示词工程、上下文工程、微调、RAG、智能体开发、部署、优化与可观测性,助你构建可落地、可迭代的AI产品体系。
500 51
|
2月前
|
机器学习/深度学习 人工智能 搜索推荐
从零构建短视频推荐系统:双塔算法架构解析与代码实现
短视频推荐看似“读心”,实则依赖双塔推荐系统:用户塔与物品塔分别将行为与内容编码为向量,通过相似度匹配实现精准推送。本文解析其架构原理、技术实现与工程挑战,揭秘抖音等平台如何用AI抓住你的注意力。
628 7
从零构建短视频推荐系统:双塔算法架构解析与代码实现
|
1月前
|
人工智能 JavaScript 前端开发
GenSX (不一样的AI应用框架)架构学习指南
GenSX 是一个基于 TypeScript 的函数式 AI 工作流框架,以“函数组合替代图编排”为核心理念。它通过纯函数组件、自动追踪与断点恢复等特性,让开发者用自然代码构建可追溯、易测试的 LLM 应用。支持多模型集成与插件化扩展,兼具灵活性与工程化优势。
204 6
|
2月前
|
人工智能 Cloud Native 中间件
划重点|云栖大会「AI 原生应用架构论坛」看点梳理
本场论坛将系统性阐述 AI 原生应用架构的新范式、演进趋势与技术突破,并分享来自真实生产环境下的一线实践经验与思考。
|
2月前
|
消息中间件 缓存 监控
中间件架构设计与实践:构建高性能分布式系统的核心基石
摘要 本文系统探讨了中间件技术及其在分布式系统中的核心价值。作者首先定义了中间件作为连接系统组件的"神经网络",强调其在数据传输、系统稳定性和扩展性中的关键作用。随后详细分类了中间件体系,包括通信中间件(如RabbitMQ/Kafka)、数据中间件(如Redis/MyCAT)等类型。文章重点剖析了消息中间件的实现机制,通过Spring Boot代码示例展示了消息生产者的完整实现,涵盖消息ID生成、持久化、批量发送及重试机制等关键技术点。最后,作者指出中间件架构设计对系统性能的决定性影响,
|
1月前
|
机器学习/深度学习 自然语言处理 算法
48_动态架构模型:NAS在LLM中的应用
大型语言模型(LLM)在自然语言处理领域的突破性进展,很大程度上归功于其庞大的参数量和复杂的网络架构。然而,随着模型规模的不断增长,计算资源消耗、推理延迟和部署成本等问题日益凸显。如何在保持模型性能的同时,优化模型架构以提高效率,成为2025年大模型研究的核心方向之一。神经架构搜索(Neural Architecture Search, NAS)作为一种自动化的网络设计方法,正在为这一挑战提供创新性解决方案。本文将深入探讨NAS技术如何应用于LLM的架构优化,特别是在层数与维度调整方面的最新进展,并通过代码实现展示简单的NAS实验。
|
1月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
4月前
|
缓存 Cloud Native Java
Java 面试微服务架构与云原生技术实操内容及核心考点梳理 Java 面试
本内容涵盖Java面试核心技术实操,包括微服务架构(Spring Cloud Alibaba)、响应式编程(WebFlux)、容器化(Docker+K8s)、函数式编程、多级缓存、分库分表、链路追踪(Skywalking)等大厂高频考点,助你系统提升面试能力。
251 0
|
11月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。

热门文章

最新文章