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

简介: 我们将这些年在每一个环节中的相应解决方案,以产品化的方式沉淀到企业级分布式应用服务(EDAS)中。EDAS 致力于解决在线应用的全流程流量无损,经过 6 年的精细打磨,已经在流量接入与流量服务两个关键位置为我们的客户提供了流量无损的关键能力,我们接下来的主要目标也是将这一能力贯穿应用的全流程,让您的应用默认能具备全流程的流量无损,极力保障商业能力的可持续性。

作者 | 孤弋、十眠


-全系列查看-

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

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


前言


上两篇我们说完了流量解析、流量接入、流量服务三大块的内容,这一篇主要从数据交换的维度阐明数据交换的过程如何影响到线上流量;最后会引入两个常用的防范措施:全链路压测安全生产演练。我们先来说说数据交换部分:

Dingtalk_20220125185056.jpg

数据



当流量在应用集群中流转完毕之后,他行至的终点一般是将数据与各种类型的数据服务进行交换,如:从缓存读取数据返回、将订单记录存储在数据库中、将交易数据与外围的支付服务进行数据交换等。但是只要是和外面的服务进行数据访问,就会出现外围服务不可用的情况,常见的一些情况比如:因为被依赖过重或数据过载而导致雪崩,因为数据中心整体不可用导致大面积瘫痪。比如最近一个比较有名的事件就是 Meta 公司的大规模宕机事件,其原因正是下发了一条错误的配置切断了数据中心之间的主干路由。
image.gif

Dingtalk_20220125185151.jpg

1、常用解决方案:分库分表


针对国内互联网公司海量数据的场景,当我们的业务成长到一定的阶段就会带来缓存或者 DB 的容量问题,以 MySQL 举例子,当单表的容量在千万级别的时候,如果这张表还需要和其他表进行关联查询,就会出现数据库在 IO、CPU 各方面的压力。此时就需要开始考虑分库分表的方案。但是分完了之后并不是一蹴而就,他会引入诸如分布式事务、联合查询、跨库 Join 等新的问题,每个问题如果人肉去搞定会更加的棘手,不过好在市面上针对这些领域也出现了很多优秀的框架,比如社区的 Sharding JDBC,阿里云刚刚开源的 PolarDB-X 等。



2、常用解决方案:数据中心容灾


为防止数据中心出现整体不可用的情况,一个常规的思路是需要针对性建设好容灾多活的高可用能力,数据中心级别的容灾常见的是同城和异地,但一个数据中心部署的服务很可能是分布式服务,针对每一个分布式服务的容灾策略都略有不同,本篇以常见的 MySQL 来举例子说一些常见的思路。


容灾的核心是需要解决 CAP 中的两个问题,即:C(数据一致性)、A(服务可用性),但是根据 CAP 理论我们只能保 CP 和 AP 中的一个,所以这里到底选择什么样子的策略,其实是需要根据业务形态来制定的。对于同城 IDC 级别的容灾而言,由于他的 RT 一般都很小,数据一致性上能最大的得以满足。只是在 Paxos(MySQL 中的一致性算法)的 Master 节点所在的机房如果挂掉的情况下,会面临再次选主,如果集群较大可能会因为选主造成的几十秒级别 DB 不可用的情况。
而对于异地场景而言,由于数据链路太长的问题,他的数据一致性基本上不可能满足,所以业务必须配合改造,做到业务级别的横向切分,如:华南数据中心服务华南客户群体,华北数据中心服务华北客户群体。而分片的数据再通过数据同步的方式做到最终一致性。


防范



到这里基本上说完了在线上应用的四个核心环节中,尤其提及了容易由于架构设计、基础设施脆弱等原因而造成的流量有损的点,也列举了对应场景下的解决方案。不过站在安全生产的角度上,一切安全生产的目的都是防范于未然。在互联网的系统中相比较于传统的软件产品,我们推荐两个在生产级别进行防范的方法:全链路压测和安全生产线上演练(也叫故障演练)。

Dingtalk_20220125185235.jpg


1、全链路压测


在软件产品的生产体系中,任何一个即将上线的系统,我们都会进行各种目标的测试,其中就包括压力测试,即:使系统处于一个颇为严苛的环境中,来观看系统的表现。而一般的压力测试,只会针对性的构造相应的接口对线下部署的环境服务进行相应的压力测试,而且测试报告不出意外都是很完美的;但这样的压力测试会有几个问题:

  • 由于线上线下的依赖环境差异很大,而评估不到真实的线上系统容量。
  • 压测过程的数据不丰富,覆盖面窄而造成场景遗漏。
  • 由于压测的流量或者工具不够健全,只能评估到单台机器或服务,而非整个生产集群。


如果要做到全面、系统、且真实的流量评估,我们推荐直接使用生产环境针对性的进行性能压测,但要想做到这样的全链路的压力测试,有很多的技术瓶颈需要突破,其中包括:

  • 有一套能力强大能构建出丰富场景的工具体系或产品。
  • 整体服务链路上,支持从流量入口开始的压测标示传递。
  • 系统中使用的中间件能识别正常流量与压测流量。
  • 业务需要针对压测流量作出业务改造(如影子表),以免压测数据影响到线上的真实数据。


但是在执行过程中,由于全链路的影响面太大,在正式开始大流量的压测之前,需要逐步实施前期的准备工作,其中包括:压测方案制定、预跑验证、压测预热,最后才是正式压测。压测完毕还需要针对压测结果进行分析,以确保整个系统符合预先设定的目标。


2、安全生产演练


与全链路压测的思路类似,为了尽可能的贴近生产环境,安全生产演练我们也是推荐在线上完成。演练的目的是检验系统在各种不可预知的服务不可用、基础实施故障或者依赖失效的情况下,来检验系统的行为表现是否依然健壮。通常演练的范围从单应用到服务集群,甚至到整机房基础设施依次上升。演练场景可以从进程内(如:请求超时)、进程级别(如:FullGC)、容器(如:CPU 高),再到 Kubernetes 集群(如:Pod驱逐、ETCD 故障等)各个场景叠加,根据业务系统的反脆弱能力,针对性的作出选择。

结语


至此,三篇关于如何构建一个流量无损的线上应用系统就全部说完了,文中很多场景和技术点都是来源于真实的线上系统的真实故障。我们将这些年在每一个环节中的相应解决方案,以产品化的方式沉淀到企业级分布式应用服务(EDAS)中。EDAS 致力于解决在线应用的全流程流量无损,经过 6 年的精细打磨,已经在流量接入与流量服务两个关键位置为我们的客户提供了流量无损的关键能力,我们接下来的主要目标也是将这一能力贯穿应用的全流程,让您的应用默认能具备全流程的流量无损,极力保障商业能力的可持续性。


接下来 EDAS 将围绕开发、测试继续构建一个完整的技术中台;我们也在筹备免费下载的版本,让您可以轻松的在自己的任意一个环境中享受到诸多默认流量无损的能力。在交付侧,将打通多集群、多应用批量交付,打通线上公共云、线下免费输出以及混合云之间的交付能力。敬请期待。

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

热门文章

最新文章