热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

StoneDB首席架构师李浩:如何选择一款HTAP产品?

作者:李浩责编:宇亭当我们选择一款HTAP数据库时,总是先被其相关文档里所描述的优异性能所吸引。卓越的性能是我们选择一款产品的出发点,因为我们希望该款产品能够解决我们业务

StoneDB 首席架构师李浩:如何选择一款 HTAP 产品?

file

file

作者:李浩

责编:宇亭

当我们选择一款 HTAP 数据库时,总是先被其相关文档里所描述的优异性能所吸引。卓越的性能是我们选择一款产品的出发点,因为我们希望该款产品能够解决我们业务中的痛点。而大家使用 HTAP 产品的出发点就是希望该款数据库能够解决我们在事务处理过程中的实时分析痛点。不过,性能优势只能算作我们选择一款产品的考量因素之一,实际上,公司层级去选择一款HTAP产品时,还需要额外考量一些其他的因素,本篇文章,StoneDB首席架构师李浩给大家分享一下选择 HTAP 产品的六大关键考量因素。

在 TP 产品非常成熟的今天,各类 TP 类型数据库早已在各行各业中支撑着业务系统的高速发展。随着业务系统越来越复杂,所产生的数据量也在飞速增长。同时,对于这些数据的实时分析需求也日益迫切。然而,当前的解决方案却无法满足实时分析的需求。例如:如果直接在TP数据库上进行分析,虽然可以满足实时性要求,但其分析的性能基本无法满足要求,并且在进行分析时会占用大量的计算资源和 IO 资源,从而影响到 TP 性能。因此,传统的做法是将分析任务放在业务低峰时候(通常是半夜进行,因此大家经常会看见 T+1的说明情况)。

HTAP 的出现则解决了这个实时数据分析的痛点。HTAP,即Hybrid Transaction/Analytical Processing,一套系统可以同时解决 TP 需求和 AP需要。如果你的业务对于 TP 业务所产生的数据需要进行实时的 AP 分析,那么 HTAP 将会是你很好的选择。

Gartner 预计在 2024 年左右,HTAP 市场将会走向成熟。从最早 2014 年概念的提出到最近这几年,国内外对于 HTAP 已经从概念走向具体的产品落地。早期大家炒炒概念还可以接受,但显而易见,现在的市场越来越明确地走向产品质量和方案落地的竞争。

无论国内外的 SnowFlake(Unistore)、Google(AlloyDB)、Oracle(HeatWave)还是国内的 TiDB、OceanBase、StoneDB 等都推出了其各自的 HTAP 产品并且在积极的落地到生产系统。那么面对越来越多的 HTAP 产品,我们该如何选择一款适合自己业务的 HTAP 数据库产品呢?我们选择一款 HTAP 数据库又需要从那些方面进行考察呢?本篇文章中,StoneDB将给出一些自己的思考,需要说明的是,本篇作为产品选择篇,我们不从技术架构和具体的实现上进行讨论,而是主要从业务需求端的角度来作分析。对于硬核的技术实现角度,我们将在《什么是真正的 HTAP?实践篇》的下一章进行讨论。

file

业务场景

首先,我们从业务场景的角度来讨论如何选择一款HTAP数据库,主要有以下四个维度:

1.1、业务类型

业务所在的领域决定了产品底层技术栈的选择。这个很好理解,比如电商这个业务场景所需要的技术栈和产品特点与传统制造、CRM 等所关注的侧重点就完全不一样——电商关注高并发、低延时、数据一致性和秒杀场景等等,而传统制造商则对海量多样化数据的处理和如何有效挖掘数据价值这些方面更加关注。

在不同的业务类型下,选择一款 HTAP 产品需要重点考察的是——这个业务类型需要哪一部分能力为主:TP 能力为主亦或是 AP 能力为主。

对于电商系统需要更加注重其在 TP 方面的关键能力,例如:事务、数据一致性等等;而对于CRM系统,经销存等等对TP能力则不会那么严苛,其可能更加看重AP的能力,在 TP 能力满足其基本业务需求的情况下,哪款产品的 AP 能力更强,业务侧可能会更倾向于选择该款产品。

而现有 HTAP 产品从技术实现路线上,基本可以分为这么两类路线,其决定产品的基因:即侧重于 TP 还是 AP?

路线1:以成熟的TP系统为基础,在其上进行AP能力的扩展。现有大部分 HTAP 数据库产品均采用该种策略。为什么采用该种策略?其原因是显而易见的,TP 系统发展到现在其相较于 AP 系统,更加成熟。例如:国内外的 OB,StoneDB,TiDB,Oracle MySQL Heatwave 和 Google AlloyDB 等;
路线2:在 AP 系统的基础上扩展其处理 TP 的能力。例如:Snowflake 等。这种路线,比较困难,但是成熟的科技公司会有更多的资源去做这个事儿,难度大,但是做出来了,也会是一大利器。

1.2、端到端的解决方案能力:

对于业务开发相关人员,一个新产品或者解决方案的引入,自然希望不会给其带来额外的工作负担,并且最好能够与其原有的技术栈相兼容,这样对于原有业务系统的改动要求最少。但也不完全就是为了让干的活儿更轻松一些,因为,对于一个在线运行的系统,其对于稳定性的要求非常高,而新组件的引入往往会让整个业务的不稳定因素增大。因此,如果不能够保持原有的技术栈,则需要提供端到端的解决方案。例如:原系统采用的 ClickHouse 或者 ElasticSearch,如果需要替换为 OB 或者StoneDB,那么需要考虑原系统 ClickHouse 或者 ElasticSearch 上下游相关模块接口兼容性,数据同步到 CK 或者 ES 的方式等等,这些解决方案都要提供出来。

1.3、数据实时性要求:

数据实时性的高低同样也会影响到产品的选择。当前现有的 HTAP 数据库在 TP和 AP 之间的数据同步策略实现机制不尽相同。例如:有些云厂商通过 MySQL+Binlog+ClickHouse 的组合方式提供 HTAP 服务,从用户的角度看似乎该服务具备了HTAP的能力,但实际上完全不是那么回事儿——因为通过 Binlog 这种方式会有很多弊端,这里可以参考我们之前的两篇文章;又如有厂商通过 TP+Redo+Raft+AP 这样的组合构成 HTAP 产品,其相较于前一种在数据的实时性上有了较大的提升,但也只是提供数据的最终一致性,同样数据的实时性还是得不到保证;有的厂商则采用了基于 LSM-tree 实现的行列混存,这种可以基本保证对于数据实时性的要求;而像 MySQL Heatwave 和 StoneDB 则提供了基于内存计算的强实时性的方案。

HTAP 数据库在产品具体实现的时候,其选择的存储方案会直接到影响架构的选择:是一体化的架构?还是 TP 系统叠加 AP 系统的方案?架构的选择则会直接决定数据同步策略和数据实时性的高低。

1.4、技术能力:

产品背后其公司所代表的技术实力也是业务方选择一款产品的考量因素,例如:我们在下文第六点中给出的观点。

file

性能

考量完业务场景相关的因素后,接下来需要考量的一个重要因素就是性能。不同于TP系的 Benchmark TPC-C 或者 AP 系统的 Benchmark TPC-H,对于HTAP 的性能测评一般不再使用这两个传统的方式来进行衡量。

当前大家更多地使用 TPC-H 来对其 AP 的能力进行评估,该种方法可以对其系统有一定的评价作用,但也存在着一定的弊端,那就是 TPC-H 无法全面地衡量一款 HTAP——因为 HTAP 数据库的系统中会同时存在两类负载:TP负载和AP负载。两类负载需要同时使用系统的CPU资源、IO 资源和网络资源等等。对资源的竞争会导致两类负载的相互干扰。因此,为了更好的衡量 HTAP 数据库,无论是学术界还是工业界,都逐渐提出了一些适用于HTAP数据库的 Benchmark 系统,具体可以参考我们之前的文章:《如何给一个 HTAP 数据库做基准测试?》

这里也简单提一下,除了具体的性能指标,例如:TPS、QPS、吞吐量等等,资源隔离性也是我们的重要考量。而资源隔离通常有两种方式:
(1)通过系统手段(软件)隔离。例如,通过 Cgroup 的方式进行资源的管理;
(2)通过物理手段进行隔离。例如,依据不同的负载类型 Route 到不同引擎上,将 AP 查询路由到列存引擎节点上,这样可将 TP 负载和 AP 负载运行于不同的节点上,从而做到真正的物理隔离。

file

运维

运维的难度也需要我们认真考量。数据库的运维不同于其它基础系统,其对于 DBA 的综合素质有比较高的要求。在系统长时间运行的过程中会遇到各种数据库的使用、功能、性能等等问题。解决这些问题除了需要数据库、操作系统和业务等多方面的知识,同样也需要相关运维工具的支持。运维手段和运维工具可以高效的支持 DBA 的运维工作。复杂的系统形态,会导致 DBA 的运维工作量增大,最直接的影响就是难以快速定位问题,增加了解决问题的耗时。

file

生态

生态是选择一款 HTAP 数据库的一个重要因素。当前有两类生态:PostgreSQL 和 MySQL。选择哪一种生态,会直接影响到后续围绕数据库所构成的整个技术栈。同时,业务也会从其自身的特点选择相应的技术路线。例如:如果业务系统是基于 JSON 和 GIS 能力的话,那么多数的业务开发者可能更倾向于选择 PostgreSQL 生态;如果是电商业务则更多的会选择 MySQL 生态。

具体来讲,生态中的周边工具、中间件和解决方案的完整性和丰富性非常重要。除工具、方案外,社区参与的人数(不管是对开源的 HTAP 数据库,还是对于商业或云上的 HTAP 服务,都需要考量该使用该服务的人群数量),更多的社区参与人数往往意味着社区比较活跃,那么,我们使用者遇到的一些问题就可以得到快速的响应。

生态的繁荣也从另外一个侧面反映出该技术路线获得了相当多的上下游厂商的支持。

file
成本是一个无法绕过的话题,一般企业/组织内的管理者对于成本的关注度往往是多于其他项的。如果想要使用一款 HTAP,需要考量的成本主要包括以下几个方面:硬件成本、替换(迁移)成本、运维成本等:

5.1、硬件成本:

其中最主要包括:计算成本和存储成本。在 StoneDB 实际的产品 POC 过程中,遇到很多客户实际的业务数据量在 100GB-1TB 内。如果采用一些现有的其他国产 HTAP 产品,由于这些产品对最小集群有要求,从而使得这些小厂商在使用 HTAP 服务时,必须付出比较高的集群硬件成本,这个是他们不愿意接受的。特别地,当需要替换现有MySQL数据库的时候,目前的一些国产 HTAP 数据库,基本都存在 MySQL 语法兼容性的问题,这导致迁移到新的业务系统上需要进行大量的修改,从而造成整体成本的飙升。如果厂商比较在乎这一部分的成本的话,StoneDB 就是很好的选择了。

5.2、替换成本:

需要能够提供对于原系统的平滑迁移能力。对于业务侵入改动最小,业务无需做修改即可平滑迁移到新的数据库平台。

5.3、运维成本:

在第三点中我们讨论运维问题,这里就不再详细讨论了。运维成本将会是系统稳定后,最主要的支出成本。

file

LTS 支持性

对于LTS(Long Term Support,长期支持版)支持性,这里又可以从两个方面来讨论。
(1)商业 HTAP 数据库
(2)开源 HTAP 数据库
无论对于商业数据库还是开源数据库都面临某个版本的生命周期问题。

商业数据库相对来说,其售后服务有保障,但同时商业数据库又面临闭源和售后服务需要支付昂贵的服务费用等问题。而开源数据库,其 LTS 的支持除了需要社区支持以外,也需要由其背后的公司来进行保证。我们也很容易发现,一个成功的开源数据库项目背后,通常都有一个成功的商业公司支撑。

因此,无论是选择哪类 HTAP 数据库,都需要注意所选择的产品的 LTS 支持性的问题。

好了,以上就是我们总结的选择一款 HTAP 数据库需要考量的六大因素,也即:业务场景、性能、运维、生态、成本和 LTS 支持性,希望对于这六点的分析能给大家在做 HTAP 产品选型时提供帮助。

StoneDB 的 2.0 架构完全对标 Oracle MySQL MDS(HeatWave),目前,我们的架构设计方案的RFC文档也完全公布在了 Github 上:

https://github.com/stoneatom/stonedb/issues/436

如果您想了解更多,也可以关注我们的 Github 仓库:

https://github.com/stoneatom/stonedb

本周五(12月9号)下午,StoneDB 开源社区PMC、StoneDB 首席架构师李浩老师也将参与由 ITPUB 社区举办的开源小秀场线上 Meetup 活动,欢迎大家前往官网 http://os.itpub.net/ 关注:

file

StoneDB 2.0 云原生分布式实时 HTAP 架构详细设计以 RFC 形式持续进行,欢迎大家关注我们最新进展,更欢迎给我们开源协作的模式和方法提出改进意见,一起通过开源的方式共建 StoneDB ~

https://github.com/stoneatom/stonedb/issues/436

  • StoneDB 代码已完全在 Github 开源:

https://github.com/stoneatom/stonedb

  • StoneDB 官网:

https://stonedb.io/


推荐阅读
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 如何使用代理服务器进行网页抓取?
    本文介绍了如何使用代理服务器进行网页抓取,并探讨了数据驱动对竞争优势的重要性。通过网页抓取,企业可以快速获取并分析大量与需求相关的数据,从而制定营销战略。同时,网页抓取还可以帮助电子商务公司在竞争对手的网站上下载数百页的有用数据,提高销售增长和毛利率。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
author-avatar
手机用户2502872401
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有