导语:9月9日,2023 INCLUSION·外滩大会【开发者创新营地】展开了以开发者为中心的精彩探讨,OceanBase 社区特邀360商业化数据库负责人管元峥进行了一场闪电演讲。管元峥以《从广告行业看开源数据库》为命题,讲述了互联网广告业务的背景及特点、开源数据库历史演进与技术发展,并站在360商业广告业务的角度解读了企业及行业对数据库的看法与选择。本文摘取了管元峥演讲中的精彩部分。
开源数据库产品力与易用性孰重
对于用户而言,开源数据库的产品力重要还是产品易用性重要?
“我前面有一碗鲜汤,那么这碗汤没有勺,有些用户可能就选择不喝这个汤了。但是如果有人比较头铁一定要尝尝鲜,那怎么办呢?”360商业化数据库负责人管元峥以喝汤比喻,在他看来,着急的用户只能端起这碗汤直接喝,虽然可以喝到但行为并不优雅。
之所以会有这样的问题探讨,是源于管元峥在360商业广告业务的数据库选型时对开源数据库的思考。他表示,如今有非常多开源数据库产品可供企业选择,如何做好开源和产品是厂商需要思考的问题。而作为用户,自己会从近期目标和长期目标思考选型。以360在互联网广告业务的探索经验来说,业务处在生命周期的不同阶段,对开源数据库的需求不同。
业务不同阶段对数据库的需求不同
在广告创意阶段,广告创意将存放在数据库中,因为广告主的创意多,所以数据规模达近千亿级别。在该阶段,要求数据库的容量必须充足以存储广告创意数据,由于单机数据库存在性能和容量方面的瓶颈,故而选择分布式数据库。而在开源领域,OceanBase、TiDB、Greenplum等分布式数据库是初步选择的对象。
在广告投放阶段,因为准确性的要求,需要数据库具备低延时的特性。延迟高直接导致广告曝光率降低,影响收益。因此通过空间换时间的手段,把尽可能多的信息存储进数据库来降低延时。那么,准确投放的标准是什么?该标准依托于用户画像和实时的用户特征,通常,前端流量媒体与后端广告服务提供商(dsp)的超时时间是 100ms,因为广告投放的原则是本轮次的竞价,位价高者得,如果发生了超时意味着即使本轮次内的出价最高,也无缘本轮次在流量媒体的展示,其中100ms的大部分时间要留给算法团队完成匹配、召回、计算、排序等操作,留给数据库的时间并不多,在 90 分位要求数据库在 10ms 左右返回结果,因此,选择NoSQL数据库可以解决此类场景,如 Redis、Pika,Aerospike 等。
在广告变现阶段产生的数据主要为账单类,对数据库的需求是不错、不丢,这就对数据安全和系统可靠性提出了高要求。此时选择稳健的关系型数据库较为保险,如MySQL、PostgreSQL、OceanBase等。
到了生命周期后期,将从OLTP业务转变为 OLAP业务,因为相比前期,后期更注重统计分析,要求数据库的吞吐量大。对于大规模的广告决策与投放,每次请求都会触发引擎层的多种模式进行匹配推荐,传到数据库层就是高并发的读取或写入。通常,业务侧会一次性读取表的一整列或一整张表甚至多张表数据进行综合计算,最终产出的报表给到广告主或流量媒体手中,以便支撑他们的下一步决策,比如对那些回报率较低广告进行持续优化或调整出价增加曝光度。到此,广告业务的生命周期形成闭环,又回到了广告创意与策划阶段。
数据库选型近期关注目标
那么回到文章开头的问题,管元峥认为产品力和产品易用性都是关键,尤其是对于小白用户来说,希望产品能更容易接入和使用,这是他在数据库选型中的近期关注目标。
OceanBase作为其选型产品中的一款,给管元峥的印象是“我们对OceanBase的产品力很放心”。他以OceanBase 在数据库中三副本模式的性能提升为例。分享了OceanBase的产品易用性。请大家在脑海中想象一张A4纸,把这张纸分为三份,每一份中都存储着相同的数据,这就是我们所说的三副本模式。我们把每张纸条分别放到三个文件夹中,把这三个文件夹命名成文件夹A、文件夹B、文件夹C,这样做的好处是,当文件夹A发生故障时,由于数据是一致的,我们还有文件夹B和C可用。那么问题来了,假设每个文件夹中有1w张纸条,当文件夹A不能访问时,只确认1次文件夹B和C的可用性状态,还是去确认文件夹B和C中每一张纸条的可用性状态?管元峥解释道:切换1次肯定比切换多次的效率高,而通常生产环境中,每个文件夹中的纸条数量是惊人的,OceanBase 只需确认一次整体文件夹的可用性状态即可。这种机制提升了切换效率,保障了数据库的连续性,并且该功能已经通过了测试,符合业务对数据库的SLA标准。
数据库选型长期关注目标
从长期关注目标来看,他认为社区的发展将决定产品的走向。“即使现在代码再烂,有社区小伙伴帮忙测试和迭代,只要给时间,产品的各种问题都能得到解决。然而,如果社区出现问题,在这场开源长跑中,产品会逐渐落后,最终会消失在这场开源马拉松中。”
“OceanBase给我的总体感觉是正在逐步完善‘梯子’。举个简单的例子,在刚接触OceanBase时,我想根据官方文档部署一套集群进行测试,而当我打开文档时一头雾水。因为系统默认打开企业版的文档,而在遇到问题输入关键词搜索后,同一个搜索词返回的结果可以说是“百花齐放”,涵盖了OceanBase各个产品线(OBServer、OBProxy、OBCloud)的结果,并且掺杂着社区版与企业版的差异结果,这让我感觉非常迷茫,现在默认打开的是社区版,在搜索时也会贴心地让用户选择是哪个产品线的问题,提高了解决问题的效率。”
管元峥表示,OceanBase社区对用户和开发者的响应及时,案例实践与社区活动丰富,以及越来越多的外部开发者和企业用户持续参与项目共建,都足以说明社区的活跃度。那么如何让开发者或用户优雅地喝下OceanBase这碗鲜美的好汤?管元峥由衷表示:产品易用性这把“梯子”及周边配套设施的成熟度还需完善。
开源数据库与开发者密不可分
无论是产品力还是易用性,都离不开开发者的参与和贡献,“开源数据库不仅是技术工具,更是开发者的价值观和发展理念”。管元峥强调了开发者对开源数据库的重要性,并呼吁开发者积极参与开源社区,一方面为开源数据库的发展做出贡献,另一方面从中获得学习和成长机会。
以广为人知的MySQL为例,MySQL社区的开发者们为其开发新功能、修复漏洞、改进性能、编写文档,以及提供支持,使MySQL保持了高质量和可用性,同时也推动了数据库技术的不断进步。但开源贡献不仅是为了个人或项目利益,它还有更深层次的意义。通过开源贡献,开发者可以:
- 学习和成长。通过参与开源项目接触到高质量的代码和最佳实践,从而提高编程技能和知识水平。
- 建立声誉和社交网络。积极的开源贡献可以帮助开发者建立声誉,获得同行和潜在雇主的关注。同时建立有价值的社交网络,与其他领域专家互动,共同解决问题。
- 回馈社区。通过开源贡献为社区提供支持,并帮助其他人解决问题,从而促进技术共享和合作。
- 塑造未来,为下一代开发者提供更好的工具和资源。
开发者和开源数据库之间的关系是相辅相成的,开发者帮助开源数据库变得更好的同时,也给自己的职业生涯带来了收益。因此,管元峥鼓励开发者积极参与开源项目,分享知识和技能,为技术的发展和社区的繁荣做贡献,他表示“开源贡献不仅是一种技术行为,更是社会责任和价值观的体现。”