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

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
性能测试 PTS,5000VUM额度
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 本篇是整个《如何构建流量无损的在线应用架构》系列的第一篇,这一系列共三篇,旨在使用最为朴素的语言将影响在线应用流量稳定性的技术问题做一个归类,这些问题的解决方案有的只是一些代码层面的细节,有的需要工具进行配合,有的则需要昂贵的解决方案,如果您的应用想在云上有一个【流量无损】的一站式体验,可以关注阿里云的《企业级分布式应用服务(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

相关文章
|
7天前
|
运维 持续交付 API
从零构建微服务架构:一次深度技术探索之旅####
【10月更文挑战第28天】 本文记录了作者在从零开始构建微服务架构过程中的深刻技术感悟,通过实战案例详细剖析了微服务设计、开发、部署及运维中的关键要点与挑战。文章首先概述了微服务架构的核心理念及其对企业IT架构转型的重要性,随后深入探讨了服务拆分策略、API网关选型、服务间通信协议选择、容器化部署(Docker+Kubernetes)、以及持续集成/持续部署(CI/CD)流程的设计与优化。最后,分享了在高并发场景下的性能调优经验与故障排查心得,旨在为读者提供一套可借鉴的微服务架构实施路径。 ####
41 3
|
1天前
|
Go 数据处理 API
Go语言在微服务架构中的应用与优势
本文摘要采用问答形式,以期提供更直接的信息获取方式。 Q1: 为什么选择Go语言进行微服务开发? A1: Go语言的并发模型、简洁的语法和高效的编译速度使其成为微服务架构的理想选择。 Q2: Go语言在微服务架构中有哪些优势? A2: 主要优势包括高性能、高并发处理能力、简洁的代码和强大的标准库。 Q3: 文章将如何展示Go语言在微服务中的应用? A3: 通过对比其他语言和展示Go语言在实际项目中的应用案例,来说明其在微服务架构中的优势。
|
1天前
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
6天前
|
监控 前端开发 JavaScript
探索微前端架构:构建可扩展的现代Web应用
【10月更文挑战第29天】本文探讨了微前端架构的核心概念、优势及实施策略,通过将大型前端应用拆分为多个独立的微应用,提高开发效率、增强可维护性,并支持灵活的技术选型。实际案例包括Spotify和Zalando的成功应用。
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
医疗行业的语音识别技术解析:AI多模态能力平台的应用与架构
AI多模态能力平台通过语音识别技术,实现实时转录医患对话,自动生成结构化数据,提高医疗效率。平台具备强大的环境降噪、语音分离及自然语言处理能力,支持与医院系统无缝集成,广泛应用于门诊记录、多学科会诊和急诊场景,显著提升工作效率和数据准确性。
|
7天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
39 1
|
8天前
|
弹性计算 Kubernetes Cloud Native
云原生架构下的微服务设计原则与实践####
本文深入探讨了在云原生环境中,微服务架构的设计原则、关键技术及实践案例。通过剖析传统单体架构面临的挑战,引出微服务作为解决方案的优势,并详细阐述了微服务设计的几大核心原则:单一职责、独立部署、弹性伸缩和服务自治。文章还介绍了容器化技术、Kubernetes等云原生工具如何助力微服务的高效实施,并通过一个实际项目案例,展示了从服务拆分到持续集成/持续部署(CI/CD)流程的完整实现路径,为读者提供了宝贵的实践经验和启发。 ####
|
5天前
|
监控 安全 应用服务中间件
微服务架构下的API网关设计策略与实践####
本文深入探讨了在微服务架构下,API网关作为系统统一入口点的设计策略、实现细节及其在实际应用中的最佳实践。不同于传统的摘要概述,本部分将直接以一段精简的代码示例作为引子,展示一个基于NGINX的简单API网关配置片段,随后引出文章的核心内容,旨在通过具体实例激发读者兴趣,快速理解API网关在微服务架构中的关键作用及实现方式。 ```nginx server { listen 80; server_name api.example.com; location / { proxy_pass http://backend_service:5000;
|
7天前
|
缓存 监控 API
探索微服务架构中的API网关模式
随着微服务架构的兴起,API网关成为管理和服务间交互的关键组件。本文通过在线零售公司的案例,探讨了API网关在路由管理、认证授权、限流缓存、日志监控和协议转换等方面的优势,并详细介绍了使用Kong实现API网关的具体步骤。
24 3
|
8天前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
43 4

热门文章

最新文章

下一篇
无影云桌面