一、关于云粒
云粒智慧科技有限公司成立于2018年6月,是中国联通集团混改以来成立的首家合资公司,是中国智慧城市数智化建设者。云粒智慧以数字化、智能化、集约化产品为核心,全面融合“5G+大数据+AI+CIM”等最新技术,致力于构建未来城市数字化基础设施平台,打造“绿色、互联、智能”的现代化智慧城市,为政企提供符合政策导向及智慧城市发展趋势的“三中台+智能化应用”解决方案,实现城市智脑与生态环境可持续发展。
“三中台”中最重要的中台即云粒星河数据中台,是一套集“数据建设与运营方法论、软件+行业资产包和数据技术服务”的中台体系,提供数据采集、融合、治理、计算、分析、服务、可视化的全链路一站式管理与服务,建设符合国家和行业标准的数据资产目录,遵从数据可用、可见、可运营的建设与运营原则,创新性地将“数据资产”作为业务价值的基础要素凸显出来,打造业务和数据的闭环,以持续赋能行业应用。经过四年4个大版本的迭代,目前已累计完成80+客户项目的落地交付,实现产品销售总额超过1.2亿元的好成绩。
二、Hive的四大痛点,交付成本增加
云粒星河数据中台作为一个大数据处理系统,数据引擎是其核心中间件,没有之一!云粒星河数据中台的数据引擎一直选用开源的Apache Hive,自诞生,到3.X系列最后一个版本。Apache Hive总体上是一个非常优秀、久经考验的OLAP引擎,但在项目落地实施的过程中,我们也遇到了诸多痛点,导致最终交付成本偏高,拉低了项目的毛利率。
痛点一:组件众多,运维困难,云原生化不友好
Hive依赖Hadoop,我们使用HDFS存储数据,YARN作为资源管理框架,Tez优化Hive DAG任务;由于需要高可用,每个节点都需要启动好几个相关进程,这些进程的配置、监控、伸缩、保活等都极大地增加了运维工作量。由于Hive和Hadoop使用的是已经老旧的按节点方式扩缩容的架构设计,因此云原生非常不友好,社区至今也没有提供容器化部署方案;自行尝试通过Statefulset方式运行在Kubernetes中并进行性能测试,发现性能竟然有30%以上的下降,因此我们仍然使用物理机或VM方式部署。
痛点二:资源利用率低, 任务调优繁琐复杂
由于YARN是双层悲观并发资源管理(调度)框架,经过Tez优化后的Hive DAG任务向YARN申请资源仍然是按固定配额(vCore和Mem)的方式进行,为了能够最大化利用资源提高并发,需要在项目中根据任务处理数据量情况Case By Case做配置调优,并且随着数据中台数据处理量的不断变化(通常情况是逐步增加),配置调优的工作需要持续进行,无法一劳永逸。
痛点三:数据处理时延大,用户体验差
由于诸多原因,我们没有使用Hive的LLAP特性,这会导致Hive即使处理极小的数据量如数百条记录,由于需要冷启动最低两个YARN Container(含一个App Master),至少需要数秒才能返回,无法做到亚秒级交互式查询,难以支持数据大屏等实时性要求较高的下游应用,为了解决这个问题,我们追加部署了基于MPP架构的Presto引擎解决了这个问题,但这也带来新的问题,即对内存资源的需求也大大增加了,这种成本的增加最终还是会转变为交付成本,降低项目利润。
痛点四:不支持行级更新,灵活性较低
Hive是一个为数仓而生经典的OLAP引擎,数据更新仅支持全表/分区级覆盖,极低的情况下如果需要对远景冷区部分数据进行更新,处理较为麻烦;另外分区设置策略也颇为费脑——粒度太大更新效率较低,粒度太小又容易发生分区和小文件数据量爆炸,表现为还是效率低下……
综上所述,自云粒星河数据中台3.0大版本发布支持多引擎并行能力开始,我们一直在寻找一款稳定可靠、AP和TP兼备、能够在集约资源环境下有较高效率表现的数据引擎。
三、迁移至OceanBase,并发性能提升10+倍,时延降低24倍
数据引擎作为基础软件百花齐放,没有最好的只有更适合自己的,怎么判断适合?对于云粒而言,主要有如下五点:
- 开源软件,友好的商业License;
- 支持云原生;
- 支持集群模式;
- 支持私有化部署;
- 有较高成熟度(社区、生态等)。
经过较长时间的调研和比较,初步满足条件的数据引擎仅剩以下四款:CockroachDB、YugabyteDB、PingCap TiDB;OceanBase。其中,CockroachDB社区版限制较多,例如,较为基础的索引功能都需要获取商业版License解锁;YugabyteDB在内部性能测试对比过程中表现较差,因此两者排除较早;而对于后两款,OceanBase相比TiDB,更适合我们的点在于三点,
第一,Oceanbase的架构较为简洁,只有OBServer和OBProxy,而TiDB由PD、TiDB、TiKV、TiFlash四个组件构成。如果只是部署一套集群用于内部服务,那么二者的区别不大,但我们需要部署和运维几十甚至上百套集群,配置、部署、运维等方面用OceanBase较为便利。
第二,OceanBase原生支持多租户,资源隔离和控制模型也比较清晰,而TiDB对于多租户支持很晚(生产可用应该是在V7.0+),至今仍处于完善阶段。云粒数据中台作为一个原生多租户系统,使用OceanBase的多租户体验更舒服。
第三,OceanBase的生态策略感觉更开放,例如,数据集成方面专门为DataX开发了插件,更贴合我们现有技术路线。TiDB虽然提供了更丰富的数据集成组件包含TiCDC、TiDB Data Migration、TiDB Lightning,但我们整合进产品会比较重,工作量会比较大。
基于上述因素,自2021年OceanBase 开源进入我们的候选名单,直到其在2022年发布4.0版本,迭代速度和性能改进让我们惊叹,于是我们果断确定产品选型并启动适配工作。因为项目体量较大及产品功能较多,且大多数都与数据引擎相关,整个适配过程大概持续了两个多月完美收工。数据引擎更换为OceanBase后的云粒星河数据中台得到了如下优化,极大缓解甚至消除了之前的痛点。
优化一:更简介的架构,更好的云原生
更换前(Hive+Presto) 更换后(单一OceanBase)
从上图可以看出,相比Hive引擎,OceanBase只需要在每个节点上启动OBProxy和OBServer两个进程即可,通过Prometheus导出Metrics,监控运维便捷省力。得益于架构的简洁,OceanBase很容易实现云原生化,官方已提供在Kubernetes中部署运行的详细方案,这对云粒星河数据中台本身实现彻底云原生化至关重要。
优化二:让每一核CPU发挥最大价值
私有化环境交付,客户能够提供的资源不足已经是“家常便饭“,这就要求云粒星河数据中台必须具备“螺蛳壳里做道场”的能力,即在较低资源配置下也能有良好的处理能力表现。例如,我们甚至遇到个别客户仅提供三台8C32GB规格的服务器部署数据引擎。以往采用Hive结合Presto作为数据引擎。部署完各类组件,每个节点能够提供给YARN调度的内存往往就只剩下10GB左右,每个作业(Job)还需要启动一个独立的用于协调的AppMaster(通常占用1GB内存),使得在小数据量高并发场景下的性能表现雪上加霜。
前文也提到需要对于YARN资源分配的参数反复调校,费时费力。采用OceanBase作为数据引擎后,单租户模式下,为OBProxy分配2GB内存,系统租户和租户META租户各分配3GB内存,剩余内存全部用于租户本身,通过试验,小数据量场景(单次处理数据量低于1GB)并发能力相比Hive有十数倍提升,在较大的数据量(单次处理数据量超过10GB)场景下也能做好处理,轻松榨干CPU每一核。
优化三:数据治理从分钟级到准实时
准实时数据治理单次需要处理的数据量往往都较小,得益于高效的分布式计算调度和数据存储结构,即使是逻辑较为复杂的数据治理SQL,OceanBase也能游刃有余地快速完成,以下是测试数据治理工作流执行时间对比,它由一个数据接入节点和两个数据更新写入节点构成,每次处理的数据量接近1GB,资源配置同为三台8C32GB服务器集群。
Hive | OceanBase | |
数据接入 | 21s | 14s |
数据更新1(两个表关联) | 24s | <1s |
数据更新2(五个表关联) | 39s | 10s |
可以看出,OceanBase在小数据量场景下各方面的时延都远低于Hive。而相比定位为单一OLAP引擎的Hive,定位为HTAP引擎的OceanBase在TP方面的诸多优势不再赘述,对于冷数据行级更新更不在话下。
四、从Hive 到OceanBase,我们的几点建议
当然,对于团队中习惯使用Hive做数据交付的同学,在使用OceanBase的过程中,也有少量感觉不太方便的地方,主要有两点:
- OceanBase不支持Insert Overwrite,还好可以使用Truncate/Delete + Insert 曲线支持,问题不大;
- OceanBase不支持使用List分区策略时动态分区,因此每次插入数据时,都需要检查对应的分区是否存在,如果不存在,则需要先ALTER TABLE· ADD PARTITION,很不方便,希望未来能尽快支持。
另外,不可否认,当单次需要处理的数据量上升到一定级别如100GB以上,凭借ORC或Parquet列存格式优势,Hive执行数据分析的性能表现是优于OceanBase的,不过可喜的是,列存计划已列入产品roadmap,希望在不久后可以看到更强的AP性能能力。
五、总结
目前,更换为OceanBase作为数据引擎的云粒星河数据中台4.0已经在项目上实施落地。总的来说,OceanBase更简洁的架构、更轻便的运维,帮助我们加速了数据中台云原生的进程,提升资源利用率的同时,并发性能提升10+倍,数据处理时延降低1.5-24倍。这带来的直观效益是机器成本与运维人力的节约,进而带来了20%的毛利率提升。
非常感谢OceanBase贡献优秀的数据引擎并完全开源,也希望它能越做越好,成为数据引擎领域“国产之光”,向世界展现中国技术实力!