曹操出行借助 ApsaraMQ for Kafka Serverless 提升效率,成本节省超 20%

本文整理于 2024 年云栖大会主题演讲《云消息队列 ApsaraMQ Serverless 演进》,杭州优行科技有限公司消息中间件负责人王智洋分享 ApsaraMQ for Kafka Serverless 助力曹操出行实现成本优化和效率提升的实践经验。

曹操出行:科技驱动共享出行未来

曹操出行创立于 2015 年 5 月 21 日,是吉利控股集团布局“新能源汽车共享生态”的战略性投资业务,目前已经发展为中国领先的共享出行平台,曹操出行以“科技重塑绿色共享出行”为使命,将全球领先的互联网、车联网、自动驾驶技术以及新能源科技,创新应用于共享出行领域,以“用心服务国民出行”为品牌主张,致力于打造服务口碑最好的出行品牌。

曹操出行的 Kafka 应用实践

曹操出行将 Apache Kafka 应用于在线服务、可观测性、车联网、业务运营数据分析等业务场景。业务流量有明显的波峰波谷,如早晚高峰、节假日、极端天气等,都会导致流量突增。

曹操出行的数据来源广泛,包括 LBS、乘客、司机、新能源、车联网、基础研发等业务线。这些数据,如日志、binlog、链路追踪等,被采集并缓存到 Kafka 中,然后分发给不同的数据系统进行处理。

曹操出行的 Kafka 架构演进

随着业务规模的不断扩大,曹操出行决定将 Kafka 迁移上云,以实现业务效率与成本控制的双重优化。曹操出行从自建 Kafka 迁移到阿里云云消息队列 Kafka 版(ApsaraMQ for Kafka)v3 版本后,不仅实现了效率的显著提升和成本的有效降低,还简化了架构,大幅减轻了运维的复杂性。

下图清晰地展示了曹操出行的 Kafka 架构迁移至云端前后的对比。左侧为迁移前的自建 Kafka 架构,右侧为迁移至阿里云云消息队列 Kafka 版 v3 后的架构。

以下是迁移后架构的主要优化点:

  • 全托管、免运维: 云消息队列 Kafka 版提供全托管服务,基于存算分离架构,实现了计算的无状态化和存储的托管化,从而帮助曹操出行免除了系统级运维的投入,显著提升了运维效率。原先复杂繁琐的运维工作,如集群的部署、升级、扩缩容、topic 迁移、leader rebalance 等操作,现在简化为购买集群、升级集群、集群升配三个主要操作,曹操出行无需感知和参与扩缩容和 topic 迁移的具体过程。

  • 高可用、高可靠: 开源 Kafka 通过 ISR 机制实现服务高可用和数据高可靠,但计算和存储混杂,副本机制复杂度高,问题排查难度大。云消息队列 Kafka 版基于存算分离架构,实现各计算节点无状态且共享存储,不仅降低了复杂度,还提高了可运维性。计算节点高可用基于自研轻量 Leader 切换机制实现,在稳定提供读写服务的同时又能优雅轻便地 Leader 转移,是云消息队列 Kafka 版高效弹缩的核心底座。云消息队列 Kafka 版在存储层面基于阿里云飞天盘古 DFS,支持跨数据中心容灾,提供百微秒级平均延迟、毫秒级长尾延迟,数据可靠性 12个9,可用性 5个9。因此,迁移后的架构可靠性和可用性都得到了显著的提升。

  • 全面的可观测性: 云消息队列 Kafka 版 v3 提供了全面的可观测能力,帮助曹操出行构建了一套全方位的监控告警体系,以确保系统运行的稳定性和问题的响应速度。它不仅提供了曹操出行日常查看和定位业务问题所需的关键指标,如消息的生产消费速度和堆积程度、分区生产和消费倾斜等,还通过自动监控和处理 zk、broker 的负载信息,磁盘使用情况和 topic 分布信息等,简化了曹操出行需要关注的指标,使其能够更专注于业务本身,而无需过多关注底层细节。

ApsaraMQ for Kafka Serverless 助力曹操出行降本提效

随着业务持续增长,曹操出行采用了 ApsaraMQ for Kafka Serverless 系列,凭借其秒级弹性扩展和按需付费的优势,在实现灵活扩缩容的同时,保证了服务的敏捷性和稳定性,并节省了超过 20%  的成本。

具体业务价值包括:

  • 无需系统级运维,提供全托管服务
  • 存算分离架构升级、服务高可用、数据高可靠
  • 兼容开源大数据生态、兼容阿里云特色生态
  • 秒级弹性,灵活扩缩容,成本节省 20% 以上

ApsaraMQ for Kafka 的架构优势

随着云计算的广泛采纳和云基础设施的日益成熟,ApsaraMQ for Kafka 依托于阿里云成熟、强大的基础设施,如云服务器、飞天盘古存储系统、容器服务等经过大规模验证的产品,为系统的整体性能和稳定性提供了坚实的基础。

ApsaraMQ for Kafka 基于存算分离架构,对 Apache Kafka 的存储引擎进行了深度重构,实现了计算节点 Broker 的无状态化,充分利用弹性云存储,从而做到 Kafka 云服务的端到端弹性,实现了真正的 Serverless 架构。其中弹性云存储采用飞天盘古 DFS ,其构建于高性能的分布式存储系统之上,能够支持百万级客户,达到百微秒级平均延迟、毫秒级长尾延迟,并具备多 AZ 强一致多副本数据冗余。Serverless架构为 ApsaraMQ for Kafka 带来低成本、高性能等诸多价值。

在成本方面,由于数据直接写入高可靠的盘古 DFS,计算层 Broker 无流量复制,极大地降低了计算节点的 CPU 和网络带宽消耗,计算成本节约 60% 以上。存储层依赖盘古 DFS 实现高可靠的数据存储,并通过纠删码、冷热分层、基于 CIPU 软硬件协同优化等技术,有效降低了存储成本。同时消息存储数据还能够动态调控转冷比例,转储到对象存储,持续降低存储成本,按量阶梯付费,用得越多越便宜。得益于这套架构,ApsaraMQ for Kafka 相比社区版 Kafka 在支持同等业务规模的场景下,实际使用的资源成本得以数倍降低。

在性能方面,采用 OpenMessaging Benchmark Framework [ 1] 对 ApsaraMQ for Kafka 和 Apache Kafka 3.3 进行了攒批发送与碎片化发送场景下的吞吐延迟对比测试,测试结果显示,在攒批发送与碎片化发送场景下,ApsaraMQ for Kafka 在 TP999 的延迟表现整体均优于 Apache Kafka,并且随着吞吐的增加,这种性能优势更加明显,碎片化发送场景快十倍。

攒批发送,不同吞吐下 TP999 发送延迟对比

攒批发送,不同吞吐下 TP999 端到端延迟对比

碎片化发送,不同吞吐下 TP999 发送延迟对比

碎片化发送,不同吞吐下 TP999 端到端延迟对比

未来展望

曹操出行将与阿里云消息队列团队继续深化合作,共同探索并优化其消息队列架构,以应对日益增长的业务需求及挑战。并通过实际应用场景中的反馈,推动阿里云云消息队列 ApsaraMQ 产品迭代升级,不断完善解决方案,满足更多企业复杂多变的业务需求。

相关链接:

[1] OpenMessaging Benchmark Framework

https://openmessaging.cloud/docs/benchmarks/

点击此处,观看本场直播回放。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/59459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解析 MySQL 数据库容量统计、存储限制与优化技巧

管理 MySQL 数据库时,了解数据库中的数据量和存储占用情况是非常重要的,尤其是在面对大规模数据时。无论是为了优化数据库性能,还是为了进行容量规划,准确地统计数据库的容量可以帮助我们做出更好的决策。mysql的客户端工具是Navi…

【研究生必备】如何利用AI论文生成器免费提升效率?

在研究生阶段,写论文往往是学业中最具挑战性的部分之一。 面对繁重的文献阅读、复杂的分析和紧迫的时间限制,很多同学都感到压力倍增。不过,随着科技的发展,AI论文生成器的出现为我们提供了一种全新的解决方案。今天,…

Android无限层扩展多级recyclerview列表+实时搜索弹窗

业务逻辑: 点击选择,弹出弹窗,列表数据由后台提供,不限层级,可叠加无限层子级; 点击item展开收起,点击尾部icon单选选中,点击[确定]为最终选中,收起弹窗; 搜索…

位运算的使用与计算机组成的底层计算(java版)

目录 1. 求int类型数字的二进制2. 特殊值展示3. 心得 1. 求int类型数字的二进制 我们可以用位运算的与和左移去求 public class Lesson01 {public static void print(int num){for(int i 31; i >0; i--){System.out.print((num & (1 << i)) 0 ? "0&quo…

写作 | 人工智能在师生教学场景中的应用前景

正文 本文讨论人工智能在师生教学场景中的应用前景。在开展论述前&#xff0c;首先需要明确一些概念。 第一&#xff0c;什么是人工智能&#xff1f;人工智能&#xff08;Artificial Intelligence&#xff09;&#xff0c; 字面意义&#xff0c;即人工制作的智慧能力。这种智慧…

Java线程6种生命周期及转换

多线程技术是我们后端工程师在面试的时候必问的一个知识点&#xff0c;今天就来盘点一下多线程的相关知识&#xff0c; 先来说下进程&#xff0c;线程及线程的生命周期&#xff1a; 进程&#xff1a;进程就是正在进行中的程序&#xff0c;是没有生命的实体&#xff0c;只有在运…

美格智能5G车规级通信模组: 5G+C-V2X连接汽车通信未来十年

自2019年5G牌照发放开始&#xff0c;经过五年发展&#xff0c;我国5G在基础设施建设、用户规模、创新应用等方面均取得了显著成绩&#xff0c;5G网络建设也即将从基础的大范围覆盖向各产业融合的全场景应用转变。工业和信息化部数据显示&#xff0c;5G行业应用已融入76个国民经…

GooglePlay: 应用和游戏的内容分级

对于后台私信的开发者们,希望能够携带详细过审记录和拒审邮件一同发来,方便我们尽快解决问题 应用与游戏 为您的应用或游戏选择类别和标签选择要添加的标签选择类别并添加标签类别示例与应用、游戏以及两者中所投放广告的内容分级相关的要求应用如何获得内容分级内容分级的用…

人工智能学习--ANN模型、SVR模型

人工神经网络 (ANN) 概念 人工神经网络&#xff08;ANN&#xff09;是一种模拟人脑神经元连接结构的计算模型&#xff0c;通过多层神经元和加权连接来处理数据。典型的ANN由输入层、隐藏层和输出层组成。 工作原理 ANN通过传递输入数据至隐藏层神经元&#xff0c;将各层输出…

多线程--模拟实现定时器--Java

一、定时器的概念 定时器的本质就是一个闹钟&#xff0c;时间到了开始执行某些逻辑。Java标准库中的定时器是Timer。 我们查阅Java文档可以详细看到定时器的使用方法&#xff1a; Timer最核心的方法就是schedule方法。值得注意的是我们通常描述任务是使用Runnable来描述&…

FrankenPHP实践

目录 1. 说明 2. 程序修改 3. 性能测试 4. 配置 4.1 Docker化部署 4.2 泛域名和证书设置 4.3 相关命令 5. 要点&#xff1a; 6. 参考 1. 说明 Frankenphp是一个先进的&#xff0c;结合了高性能Caddy服务器的PHP环境框架&#xff0c;它允许用户只需要少量改动&#xff…

2024第三次随堂测验参考答案

7-1 求一组数组中的平均数 输入10个整数&#xff0c;输出这10个整数的的平均数&#xff0c;要求输出的平均数保留2位小数 输入样例&#xff1a; 1 2 3 4 5 6 7 8 9 10 输出样例&#xff1a; 5.50 参考答案&#xff1a; #include <stdio.h> int main(){int sum 0;…

Docker 镜像体积优化实践:从基础镜像重建到层压缩的全流程指南

​ 由于最近在发布的时候发现docker镜像体积变得越来越大&#xff0c;导致整个打包发布流程变得非常耗时了。所以又接到一个差事&#xff0c;优化最终镜像体积。顺便也记录一下docker镜像体积优化的一些步骤。 大概步骤可以分为以下几个步骤&#xff1a; 重做基础镜像&#x…

[linux 驱动]PWM子系统详解

目录 1 描述 2 结构体 2.1 pwm_chip 2.2 pwm_ops 2.3 pwm_device 2.4 pwm_class 3 相关函数 3.1 注册与注销 PWM 控制器 3.1.1 pwmchip_add 3.1.2 pwmchip_remove 3.2 申请与释放 PWM 设备 3.2.1 pwm_request 3.2.2 devm_pwm_get 3.2.3 pwm_free 3.3 控制 PWM …

Linux入门(2)

林纳斯托瓦兹 Linux之父 1. echo echo是向指定文件打印内容 ehco要打印的内容&#xff0c;不加任何操作就默认打印到显示器文件上。 知识点 在Linux下&#xff0c;一切皆文件。 打印到显示器&#xff0c;显示器也是文件。 2.重定向 >重定向操作&#xff0c;>指向的…

如何判断本地DNS是否污染

本地DNS污染是一种比较复杂且会对网络访问产生负面影响的现象。DNS即域名系统&#xff0c;它的主要功能是将便于人们记忆的域名转换为计算机能够理解的IP地址。本地DNS污染是指在本地网络环境中&#xff0c;DNS解析过程受到恶意干扰或错误配置的影响&#xff0c;使得域名被解析…

线程池使用实战

线程池使用实战 1. 线程池使用1.1 例子11.2 例子2 1. 线程池使用 // 使用 ThreadPoolExecutor 创建线程池private final ThreadPoolExecutor executorService new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(), // 核心线程数Runtime.ge…

asp.net网站项目如何设置定时器,定时获取数据

在 Global.asax.cs 文件中编写代码来初始化和启动定时器。Global.asax.cs 文件定义了应用程序全局事件&#xff0c;比如应用程序的启动和结束。在这里&#xff0c;我们将在应用程序启动时初始化和启动定时器。 using System; using System.Timers;public class Global : Syste…

【数据仓库】Hive 拉链表实践

背景 拉链表是一种数据模型&#xff0c;主要是针对数据仓库设计中表存储数据的方式而定义的&#xff1b;顾名思义&#xff0c;所谓拉链表&#xff0c;就是记录历史。记录一个事务从开始一直到当前状态的所有变化的信息。 拉链表可以避免按每一天存储所有记录造成的海量存储问题…

Mysql在oracle的安装与配置(怕忘)

1、获取iso 安装oracle:https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-24.03-LTS/ISO/x86_64/openEuler-24.03-LTS-x86_64-dvd.iso openEuler-22.03-LTS-x86_64-dvd.iso 2、安装os 手动设置固定IP,建议大家网卡vm net8 网关:x.x.x.2 DNS:114.114.114.11…