21 | 从阿里内部产品看海量数据处理系统的设计(上):Doris的立项

从今天开始,会分两期内容来讨论阿里巴巴的一个海量数据处理系统的设计,这个系统的名字叫 Doris,它是阿里巴巴的一个内部产品。前面专栏曾经提到过,2010 年前后是各种 NoSQL 系统爆发的一个时期,各种开源 NoSQL 在这个时期发布出来,当时阿里巴巴也开发了自己的 NoSQL 系统 Doris。

Doris 的设计目标是支持海量的 KV 结构的数据存储,访问速度和可靠性要高于当时主流的 NoSQL 数据库,系统要易于维护和伸缩。和当时众多 NoSQL 系统相比,Doris 在架构设计上颇具独特性,路由算法、失效转移、集群扩容也有自己的创新之处,并成功申请三项技术专利。

在我们开始讨论 Doris 项目前,我想先跟你聊聊大公司是如何看待内部技术产品这件事。事实上,阿里巴巴内部底层技术产品的研发决策思路也颇有值得借鉴之处,你可以吸收其中好的经验,并把它转化到你所开发的产品上。

我们知道一家互联网公司主要靠自己的互联网产品盈利,比如阿里巴巴主要靠淘宝、天猫、阿里巴巴 B2B 网站等产品赚钱,而公司的工程师主要也是开发这些产品,但是这些产品通常都需要处理海量的用户请求和大规模的数据存储,所以在系统底层通常用到很多基础技术产品,比如分布式缓存、分布式消息队列、分布式服务框架、分布式数据库等。这些基础技术产品可以选择开源技术产品,也可以选择自己研发。自己研发的优点是可以针对业务场景进行定制开发,同时培养提高自己工程师的技术实力;缺点是投入大、风险高。

通常公司到了一定规模,都会开始逐渐自主研发一些基础技术产品,既可以提升自己的产品研发能力,又可以提高自身在业界的地位,吸引更优秀的人才并提高竞争门槛,形成自己的竞争壁垒。

但是公司的资源毕竟是有限的,主要的资源又投入到业务产品开发去了,那剩下的资源到底应该投入到哪里呢?这需要形成公司内部一套竞争策略,以使优秀的项目能够得到资源。

另一方面,对工程师而言,业务产品的开发技术难度相对较低,如果要想更快提高自己的技术水平,去开发基础技术产品更能得到提升和锻炼,所以优秀的工程师更愿意去开发有难度有挑战的创新性基础技术产品,而不是去开发那些千篇一律的业务产品。

这样,在工程师和公司之间就形成了一种博弈:工程师想要开发基础技术产品,但是必须要得到公司管理层的支持;管理层资源有限,只愿意支持开发那些对业务有价值、技术有创新、风险比较低的基础技术产品。

所以事情就变成工程师需要说服公司管理层,想要做的就是对业务有价值、技术有创新、风险比较低的基础技术产品;而管理层则要从这些竞争者中选出最优秀的项目。

通过这种博弈,公司的资源会凝聚到最有价值的技术产品上,优秀的工程师也会被吸引到这些项目上,最后实现了公司价值和员工价值的统一和双赢。

下面我们进入正题,我会拿出当时 Doris 开发立项时说服管理层用的 PPT,向你解读个中技巧以及 Doris 的创新设计。 需要提醒你的是,你在学习这两期专栏时可以试着想象一个场景,假设是在 Doris 项目的立项启动会,今天你是老板,看看你最关注一个项目的哪些技术指标;又或者你是 Doris 项目的工程师,可以想想哪些指标是老板关注的,并且从技术上是可以实现的。这样把自己带入到一个角色中,对于你更好理解这个数据处理系统很有帮助。

PPT 开篇就是当前现状,当时阿里巴巴没有统一的大数据 NoSQL 解决方案,有的产品是自己在业务代码中实现数据分区逻辑,从而实现海量 KV 数据的存储访问。这样做的主要问题有

开发困难。程序员在开发时要知道自己存储的数据在哪台服务器。

运维困难。增加服务器的时候,需要开发配合,故障的时候也很难排查问题。

现状一定是有问题的,需要我们去解决。有没有现成的解决方案?有,但是现成的方案也有问题,所以我们必须要自己开发一套系统才能解决问题。这样,后面想做的一切才能顺理成章。

当你想做一个新东西,它必须要能解决当前的问题,这是人类社会的基本运行规律。如果当前没有问题呢?你相信我,这个世界不可能没有问题的,重要的是你要能发现问题。就像你做的东西将来也一定会有问题,因为现在的产品在将来一定会落伍,但那已经不再是你的问题。

技术只是手段,技术不落在正确的问题上一点用也没有,而落在错误的问题上甚至会搬起石头砸了自己的脚。而什么是正确的问题,你需要自己去思考和发现。

前一页说完了当前存在的问题,引出了我们必须要自己开发一个海量数据处理系统,这一页就要说明这个产品的定位,也就是“海量分布式透明 KV 存储引擎”,这个引擎能够实现的业务价值就是能够支撑阿里巴巴未来各个主要产品的海量数据存储访问需求。

这两页是整个 PPT 的灵魂,管理层如果对第一页提出的问题不认可,又对第二页产品要实现的价值不以为然,那基本上这个项目也就凉凉了。

如果到这里没有问题,得到认可,那下一步就要趁热打铁,突出项目的创新和特点

产品的功能目标和非功能目标要清晰、要有亮点,和业界主流产品比要有竞争优势(用红色字体标出),要更贴合公司的业务场景。Doris 的主要功能目标是提供 KV 存储,非功能目标包括在运维上要实现集群易于管理,具有自我监控和自动化运维功能,不需要专业运维人员维护;要支持集群线性伸缩,平滑扩容;具有自动容错和故障转移的高可用性;高并发情况下快速响应的高性能性;支持未来功能持续升级的可扩展性。

技术指标也要亮眼,至少不能明显低于当前主流同类产品的指标。当时 Doris 根据阿里巴巴的内部使用需求场景,支持所有的 B2B 业务的 KV 存储,因此设计目标是未来部署一个 100~10000 台服务器的集群规模,并不支持无限伸缩。如果前面说过别的产品的缺点,这里也要对应说明自己强在哪里。

设计指标的设定,既不能低,如果比目前主流同类产品的指标还要差,自己再开发这样的产品就没有意义;也不能太高,如果设定太高,过度承诺,让老板、用户对你未来交付的产品抱有太高的期望,将来稍有不慎,无法达到期望,不但对产品的发展造成不良影响,甚至大家对你的人品都会产生怀疑。做好对别人的期望管理,让大家对你既充满期待,又不至于不切实际,不但对你的职业发展大有帮助,应用到生活中也会获益良多。

到这里,问题也说了、方向也有了、设计指标也定了,究竟能不能开发出满足设计目标的产品,就看后面的 PPT 把核心架构和关键设计讲清楚,要证明自己有把握、有能力做到。

到底如何证明自己能做到,且听下回分解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
基于 Apache Doris 的数据仓库平台架构设计如下: 1. 架构模式: - 采用分布式架构模式,将数据仓库划分为多个节点,每个节点可以独立存储和处理数据,同时支持横向扩展,能够处理大规模的数据量和并发请求。 2. 数据存储层: - 使用分布式文件系统(如HDFS)存储数据,数据按照数据表的划分进行存储,支持数据的分片和复制,提高数据的可靠性和可用性。 - 数据以列式存储的方式存储,提高查询效率。 - 支持数据的压缩和索引,降低存储空间和提高查询效率。 3. 元数据管理: - 使用元数据管理系统(如MySQL)存储数据的元信息,包括表结构、分区、数据位置等。 - 元数据管理系统支持水平扩展,保证元数据的一致性和高可用性。 4. 查询引擎: - 使用分布式查询引擎,支持SQL语法,能够高效地执行复杂的数据查询和分析操作。 - 支持预编译和查询优化技术,提高查询性能。 5. 数据加载和导出: - 支持多种方式的数据加载和导出,如批量导入、实时流入、增量导入、导出到外部系统等。 - 支持数据的转换和清洗,提高数据的质量和一致性。 6. 安全性和权限管理: - 支持访问控制,可以对用户和角色进行权限管理,确保数据的安全性和合规性。 - 支持数据加密和身份认证,保护数据的机密性和完整性。 7. 可视化和监控: - 提供用户友好的可视化界面,方便用户管理和操作数据仓库。 - 支持实时监控和告警功能,及时发现和解决系统故障和性能问题。 总之,基于 Apache Doris 的数据仓库平台架构设计具备高可扩展性、高性能和高可靠性的特点,可以满足大规模数据处理和查询的需求,并提供丰富的功能和工具支持,帮助用户实现高效的数据分析和决策。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值