AutoMQ:如何基于阿里云计算与存储产品实现云原生架构升级

本文涉及的产品
对象存储 OSS,20GB 3个月
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
对象存储 OSS,恶意文件检测 1000次 1年
简介: AutoMQ:如何基于阿里云计算与存储产品实现云原生架构升级

【阅读原文】戳:AutoMQ:如何基于阿里云计算与存储产品实现云原生架构升级

导读:AutoMQ[1]是新一代基于共享存储架构实现的云原生Kafka。得益于其存算分离的共享存储架构,通过和阿里云合作,深度使用阿里云可靠、先进的云服务如对象存储OSS、块存储ESSD、弹性伸缩ESS以及抢占式实例实现了相比Apache Kafka 10倍的成本优势并且提供了自动弹性的能力。

 

引领消息和流存储走向云原生时代,助力客户实现云端业务能力提升是包括阿里云、AutoMQ等在内的每一家云服务提供商的使命。但在具体的项目实践中会发现很多产品虽然宣称自己是云原生的,实际上却并没有对云计算能力的应用产生本质的变化。也有一些产品支持部署到Kubernetes后,就认为自己达到了云原生的阶段。笔者认为真正的云原生产品是要能够深度把云计算原生的能力、弹性的能力和规模化的优势充分利用起来,在成本和效率上都要有数量级的优势。

 

2024年3月,作为阿里云产品生态合作伙伴,AutoMQ与阿里云进行了产品及解决方案的联合发布,并正式上架阿里云云市场进行售卖。本文将盘点 AutoMQ立足于阿里云是如何深度使用计算和存储产品,以及基于这些产品和技术为用户解决什么样的实际问题。

 

一、基于存储服务的成本优化与性能提升

 

1、对象存储OSS

 

海量的数据正在往云端聚集,对象存储已经成为了大数据和数据湖生态事实上的存储引擎,今天大量的数据密集型软件正在从文件API迁移到对象API,以Kafka 为代表的流式数据入湖也是大势所趋。

 

AutoMQ基于对象存储研发了S3Stream[1]流存储库,能够基于Object API提供流式数据的高效的读取和摄入,然后通过存算分离的架构方式将Apache Kafka 的存储层对接至对象存储,充分获得了共享存储带来的技术和成本优势:

 

 OSS同城冗余的标准版存储单价为0.12元/GiB/月,相较于ESSD PL1的单价(1元/1 GiB/月)便宜8倍以上。同时,OSS天然具备多可用区的可用性和持久性,数据无需额外再做复制,使得相比较传统的基于云盘的3副本架构,成本能节省25倍。

 

共享存储架构相比较Shared-Nothing架构,是真正的存算分离,数据跟计算节点无绑定关系。因此,AutoMQ在进行分区移动时无需复制数据,能够做到真正的秒级无损分区迁移。这也是支撑AutoMQ流量实时重平衡和秒级节点水平扩缩容的原子能力。

 

AutoMQ从成本和架构上对OSS提供的能力进行了充分挖掘,但这仅仅是起步,共享存储将为AutoMQ带来丰富的技术和产品创新上的想象力。

 

灾难恢复:作为基础软件,最担心的莫过于集群出现故障后无法继续提供服务,或者数据无法恢复,可能的故障有软件缺陷、机房级故障等。因为有了共享存储,结合简单的元数据快照机制,可以在关闭故障集群后,基于OSS上的数据状态重新打开为一个全新的集群,用于恢复业务。

 

 

跨地域容灾:OSS提供地域间的准实时复制,业务无需自己组建跨地域网络,也无需搭建昂贵的数据Connect集群,结合上述提到的灾难恢复技术,可以很容易0编码实现跨地域容灾的解决方案。

 

共享只读副本:高扇出是消费流式数据的一个重要的业务场景,在一家Data驱动的企业里面,一份数据可能存在数十个订阅方,原集群无法承担数十倍的读取流量。基于OSS,无需数据复制,就可以以共享存储的形式直接从OSS上打开只读副本,提供极具扩展性的高扇出能力。

 

Zero ETL:现代的数据技术栈都在基于对象存储来构建,当数据在同一个存储池,且具备一定的自描述能力后,数据孤岛就能够被低成本打破,不需要构建ETL通道,不同的分析软件或者计算引擎,可以共享来自不同数据源的数据。

 

另一方面,流式数据入湖,现代化数据栈完成了最后一块拼图,流湖一体的架构有了落地的基础,这也是Confluent推出的TableFlow[2]带来的巨大想象力。数据以流的形式产生和存储,符合真实世界中信息不断生成和变化的特征,实时生成的数据一定要以流的形式存在,从而流计算框架有机会挖掘更多实时的价值。当一段时间后数据失去新鲜度后,再转换为Iceberg[3]等表的形态进行存储,做进一步大规模的数据分析。从数据的生命周期来看,从流到表,是非常符合数据从高频变低频,从热变冷的自然特征,在对象存储之上构建流表一体的数据技术栈是未来的趋势。

 

2、块存储ESSD

 

如果说大家仍然将ECS当做物理机来看待,云盘ESSD也有类似的命运。用户对ESSD通常有两类误解:

 

将ESSD类比本地盘,担心数据的持久性,认为坏盘、坏道等专属于物理盘的错误类型仍然会出现。

 

 

认为ESSD是云盘,所以远程写入性能差,延迟不可控,容易抖动。

 

实际上,ESSD背后是一套完整的分布式文件系统,内置了多副本技术,能够提供9个9的数据持久性。用户对物理存储介质的错误完全无需感知,底层系统能自动运维容错数百万块物理盘。

 

同时,ESSD也是共享存储的形态,ESSD卷可以在ECS故障时,挂载至其他节点继续提供读写服务。从这个角度来看,ESSD跟OSS都是共享存储,而非有状态的本地磁盘,这也是AutoMQ声称自己是无状态数据软件的主要原因。

 

在性能方面,ESSD背后有软硬件一体的优化,通过将ESSD客户端卸载到神龙MOC[4]来实现硬件加速,同时与远端服务器之间采用基于RDMA技术的自研高性能网络协议和拥塞控制算法,而非TCP技术栈,以适应数据中心内低延迟和低丢包率的特点。这些优化带来了稳定的IOPS和吞吐性能,以及高度可扩展的存储容量。

 

AutoMQ使用ESSD有三个创新点:

 

可靠性分离,充分利用ESSD背后的多副本技术,避免在应用层引入Raft或者ISR等复制机制,在存储成本,网络复制带宽成本方面都有大幅度降低。

 

将ESSD作为WAL,以裸设备、Direct IO的形式循环写入ESSD,仅用于故障场景下的恢复。得益于ESSD的共享属性,AutoMQ的WAL是一个远程的可共享的WAL,能被集群中的任何节点进行接管恢复。

 

面向云服务的计费项设计,ESSD给任意容量的卷提供至少100 MiB/s左右的吞吐和1800左右的IOPS。AutoMQ仅需要一块最小规格的ESSD卷作为WAL盘,比如一块2GiB的ESSD PL0卷,每月仅需1块钱,即可提供上述性能。如果单机需要更高的存储性能,仅需组合多块小规格的WAL盘即可线性扩展。

 

ESSD和OSS拥有截然不同的存储特征,ESSD是高性能,低延迟和高IOPS的存储介质,但成本高昂,不过AutoMQ找到了一种最经济的使用ESSD的方法。OSS不擅长于高IOPS的场景,它会为每一次IO进行计费,但OSS存储成本低,吞吐和容量近乎“无限地”扩展。OSS作为主存储提供了高吞吐、低成本、高可用、无限扩展的存储能力;ESSD提供了用于存储WAL的持久化、高可用、低延迟的存储能力,并且由于其虚拟化的性质可以申请非常小的存储空间。AutoMQ自研的流存储库S3Stream[1]巧妙地将ESSD和OSS两类共享存储的优势集中到了一起,提供了低延迟、高吞吐、低成本和容量“无限”的的流存储能力。

 

 

1)多重挂载和NVMe协议

 

诚然,ESSD虽说是共享存储,但使用上是块设备的形态,所以要将ESSD高效地共享起来,需要额外的存储技术支撑,即多重挂载和NVMe PR协议。

 

云盘本身支持在卸载后重新挂载到其他节点用于恢复,但当原挂载节点出现ECS Hang等类型的故障时,云盘的卸载耗时比较不可控,所以可以依赖ESSD提供的多重挂载能力,可以做到不进行云盘的卸载,直接多重挂载到另一个ECS节点。

 

以AutoMQ Failover流程为例,当某Broker节点被识别为Failed Broker后,将其上的云盘,多重挂载到健康的Broker进行数据恢复。在进入真正的Recovery 流程前,需要确保原节点没有在持续写入,AutoMQ通过NVMe协议的PR锁对原节点进行IO Fencing。

 

这两个过程均是毫秒级的操作,可以将ESSD在AutoMQ场景下真正地变为共享存储。

 

2)Regional ESSD

 

ESSD背后虽然是多副本架构,但常规的ESSD其多副本是分布在单个AZ内的,这也导致ESSD无法应对AZ级的故障,Regional EBS[5]就是用于解决该问题的。通过将底层的多副本冗余分布在多个AZ内,采用强一致的读写技术,能够容忍单AZ故障。

 

在共享挂载方面,支持Region内ECS跨可用区挂载以及多可用区共享挂载,支持抢占式的IO Fencing和NVMe PR锁形式的IO Fencing。对于Regional ESSD,国外主流云厂商均有对应的产品形态,同时在阿里云上也即将发布,该产品使AutoMQ能够以极低的成本容忍单AZ故障,满足可用性较高的业务场景需求。

 

二、基于计算服务的可用性和弹性能力提升

 

1、云服务器ECS

 

从过去十年的上云历程来看,大部分企业上云的方式是以Rehost的形式进行上云。这里Host的替换实际上就是拿云服务器ECS去替换传统线下的物理主机,但实际上,ECS与线下物理主机的最大区别在于ECS提供了服务SLA,它能借助虚拟化的一些技术规避部分物理主机软硬件故障,对于无法规避的物理主机故障,云服务器也能在宕机后快速在新的物理主机上恢复,缩短业务的受损时长。

 

阿里云单ECS实例承诺的SLA为99.975%,也就是说,在云上以单ECS节点的形式部署一个服务,能做到3个9以上的可用性,这实际上已经是生产可用的,能满足很多业务的可用性要求。以AutoMQ为例,选取一个2C16G的ECS部署一个单节点的AutoMQ集群,就能提供3个9的可用性以及80MiB/s的写入能力,成本可以说是做到了极致。

 

AutoMQ在设计之初就将ECS当成了云服务来看待,而不是物理主机,在ECS出现故障时,更多地依赖ECS节点能快速恢复,比如宕机的时候能自动迁移和自动拉起。只有在失去某个节点连续的数个心跳后,AutoMQ的主动Failover能力才会进行介入。这样设计的考虑点主要有以下两点:

 

对于物理机硬件故障或内核故障问题,ECS能做到宕机后秒级恢复,所以 AutoMQ依赖ECS的快速恢复能力来处理这类故障,同时也避免主动Failover能力过于灵敏带来不必要的容灾处理。

 

当出现ECS宕机、网络分区、甚至AZ级故障时,AutoMQ的Failover能力才会生效,通过ESSD和OSS提供的能力做进一步主动的容灾。

 

2、弹性伸缩ESS

 

在2024的3月份,AutoMQ与阿里云进行了联合发布,正式上架阿里云云市场进行售卖。从AutoMQ内核的GA到快速登陆阿里云市场,这背后有两款产品的助力,第一款是阿里云计算巢,它为服务商提供了标准化的交付流程,另一款就是弹性伸缩ESS。AutoMQ存算分离的架构虽然天然亲和弹性伸缩,但想要提供自动伸缩的能力,也并非易事[6],AutoMQ使用ESS来简化最后一公里的交付之路。

 

AutoMQ在公有云上的交付在Kubernetes和ESS之间选择了ESS,背后主要有几点考虑:

 

AutoMQ推出的第一个产品形态是BYOC,为了简化依赖,避免每个用户在部署 AutoMQ时都需要准备一套K8s集群。

 

 

弹性伸缩ESS具备配置管理、自动弹性伸缩、定时扩缩容、机型管理、多AZ形态、健康检查等能力已经能媲美K8s核心的Deployment能力,ESS可以看作是IaaS层提供的轻量级K8s形态。

 

 

前文提到AutoMQ依赖的多重挂载,Regional ESSD等云厂商提供的新特性,K8s很难第一时间支持。纯粹利用IaaS层的API相较于使用K8s的API,有类似C++语言和Java语言的区别,Native的特性需要在K8s层面进行透出才能使用。

 

当然,K8s是一款非常优秀软件,AutoMQ后续也会支持部署到K8s,特别是在私有云环境,能够屏蔽大量的IaaS层差异。

 

3、抢占式实例

 

弹性的能力并不是云厂商与生俱来的,云厂商为了给客户提供充足的弹性供给,需要承担巨大的保有成本,从而不可避免地导致了云厂商有大量的闲置的计算资源。这部分闲置的资源通过抢占式实例进行售卖,其性能与常规ECS实例无任何区别,相比较按量付费的实例成本最高能节省90%。

 

抢占式实例相比较按量付费实例,有一个重要的特征,就是其价格随供需变化而浮动,比如如果晚上业务对算力的需求小,价格自然就更加便宜。所以,在一定程度上抢占式实例的定价包含了时间的维度,如果所有的用户都能将抢占式实例用起来,自然就会被价格所调节,会促使大家为自己的工作负载选择最合适的运行时间段。比如,AutoMQ会在晚上运行一些大规模的测试用例,通过使用抢占式实例,大幅度降低测试的成本。

 

另一个特征,抢占式实例会被随时中断回收,这确实为使用它带来了很高的门槛。但AutoMQ推出的存算分离架构,使得Broker节点无任何本地状态,能够从容应对抢占式实例被回收的情形。下图演示了AutoMQ在抢占式实例回收时通过ESSD API完成WAL恢复的流程。AutoMQ能达到十倍降本的效果,抢占式实例在计算降本的维度起到了重要的作用。

 

 

结束语

 

今天,基础软件的大半壁江山,大都诞生于10年前,它们高效地支撑了大数据和互联网的快速发展。但面向IDC环境设计的基础软件,在云计算成熟的今天来看,并不是那么的高效和低成本,今天大量的基础软件在基于云重新设计,比如可观测性存储组件、TP和AP数据库、数据湖软件等。Kafka作为重要的流存储软件,在大数据生态系统中占据了举足轻重的位置,在数据驱动型企业的整个IT支出中占比10%~20%,基于云原生的能力重新设计Kafka,为企业降本增效,在当前降本的大背景下,有重大的意义。AutoMQ通过深度用云,以云原生的能力重构了Apache Kafka,创造了10倍的成本优势。相较于Kafka,AutoMQ的共享存储架构使得在分区迁移、节点动态扩缩容、流量自动重平衡等运维方面的耗时指标得到了数百倍的优化。

 

周新宇,AutoMQ联合创始人&CTO,是Apache软件基金会成员,Apache RocketMQ联合创始人&PMC成员。有近十年的云计算从业经历,完整经历了阿里云中间件上云历程,是云原生上云理念的倡导者。

 

引用

 

1. 开源的云原生版 Kafka——AutoMQ:https://github.com/AutoMQ/automq

2. Confluent 全新发布 Tableflow,统一流和分析型计算:https://www.confluent.io/blog/introducing-tableflow/

3. 开放表格式 Iceberg 官网:https://iceberg.apache.org/

4. 阿里云自研神龙架构:https://developer.aliyun.com/article/743920

5. 2023云栖大会抢先发布Regional ESSD:https://developer.aliyun.com/article/1390447

6. 为什么公共云的弹性能力很难被发挥出来?https://www.infoq.cn/article/tugbtfhemdiqlxm1x63y

 


我们是阿里巴巴云计算和大数据技术幕后的核心技术输出者。

欢迎关注 “阿里云基础设施”同名微信微博知乎

获取关于我们的更多信息~

相关文章
|
3天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
5天前
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
6天前
|
消息中间件 存储 Cloud Native
云原生架构下的数据一致性挑战与应对策略####
本文探讨了在云原生环境中,面对微服务架构的广泛应用,数据一致性问题成为系统设计的核心挑战之一。通过分析云原生环境的特点,阐述了数据不一致性的常见场景及其对业务的影响,并深入讨论了解决这些问题的策略,包括采用分布式事务、事件驱动架构、补偿机制以及利用云平台提供的托管服务等。文章旨在为开发者提供一套系统性的解决方案框架,以应对在动态、分布式的云原生应用中保持数据一致性的复杂性。 ####
|
3天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
20 5
|
4天前
|
Kubernetes 负载均衡 Cloud Native
云原生架构下的微服务治理策略
随着云原生技术的不断成熟,微服务架构已成为现代应用开发的主流选择。本文探讨了在云原生环境下实施微服务治理的策略和方法,重点分析了服务发现、负载均衡、故障恢复和配置管理等关键技术点,以及如何利用Kubernetes等容器编排工具来优化微服务的部署和管理。文章旨在为开发者提供一套实用的微服务治理框架,帮助其在复杂的云环境中构建高效、可靠的分布式系统。
17 5
|
4天前
|
负载均衡 监控 Cloud Native
云原生架构下的微服务治理策略与实践####
在数字化转型浪潮中,企业纷纷拥抱云计算,而云原生架构作为其核心技术支撑,正引领着一场深刻的技术变革。本文聚焦于云原生环境下微服务架构的治理策略与实践,探讨如何通过精细化的服务管理、动态的流量调度、高效的故障恢复机制以及持续的监控优化,构建弹性、可靠且易于维护的分布式系统。我们将深入剖析微服务治理的核心要素,结合具体案例,揭示其在提升系统稳定性、扩展性和敏捷性方面的关键作用,为读者提供一套切实可行的云原生微服务治理指南。 ####
|
4天前
|
消息中间件 缓存 Cloud Native
云原生架构下的性能优化实践与挑战####
随着企业数字化转型的加速,云原生架构以其高度解耦、弹性伸缩和快速迭代的特性,成为现代软件开发的首选模式。本文深入探讨了云原生环境下性能优化的关键策略与面临的主要挑战,通过案例分析,揭示了如何有效利用容器化、微服务、动态调度等技术手段提升应用性能,同时指出了在复杂云环境中确保系统稳定性和高效性的难题,为开发者和架构师提供了实战指南。 ####
17 3
|
4天前
|
运维 Kubernetes Cloud Native
深入理解云原生架构:从理论到实践
【10月更文挑战第38天】本文将引导读者深入探索云原生技术的核心概念,以及如何将这些概念应用于实际的软件开发和运维中。我们将从云原生的基本定义出发,逐步展开其背后的设计哲学、关键技术组件,并以一个具体的代码示例来演示云原生应用的构建过程。无论你是云原生技术的初学者,还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和实操指南。
|
4天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用架构中的实践与思考
【10月更文挑战第38天】随着云计算的不断成熟和演进,云原生(Cloud-Native)已成为推动企业数字化转型的重要力量。本文从云原生的基本概念出发,深入探讨了其在现代应用架构中的实际应用,并结合代码示例,展示了云原生技术如何优化资源管理、提升系统弹性和加速开发流程。通过分析云原生的优势与面临的挑战,本文旨在为读者提供一份云原生转型的指南和启示。
17 3
|
4天前
|
运维 Kubernetes Cloud Native
云原生技术在现代应用架构中的实践与挑战####
本文深入探讨了云原生技术的核心概念、关键技术组件及其在实际项目中的应用案例,分析了企业在向云原生转型过程中面临的主要挑战及应对策略。不同于传统摘要的概述性质,本摘要强调通过具体实例揭示云原生技术如何促进应用的灵活性、可扩展性和高效运维,同时指出实践中需注意的技术债务、安全合规等问题,为读者提供一幅云原生技术实践的全景视图。 ####

热门文章

最新文章