本文为《云原生数据库选型指南》系列选题文章之一,对话一线厂商和用户,探索云原生数据库技术发展的重点和难点,选型关注点,整理行业落地应用实践,供业内参考。
随着云计算技术的迅速发展和企业数字化转型的需求日益增强,云原生数据库慢慢的变成了慢慢的变多企业的首选。而随着云原生数据库的应用逐渐深入,云原生数据库的价值和问题也都一一呈现。
本期我们邀请到了Airwallex空中云汇数据库专家赵飞祥,他是ITPUB的博客专家,也是多年DTCC中国数据库大会的常驻嘉宾,一直专注于数据库领域,拥有传统行业和网络公司等丰富的从业经历。他分享了Airwallex空中云汇在云原生数据库使用方面的实践经验,为企业用户以及云原生数据库厂商提出了宝贵的建议。
关于云原生数据库,市场上还没有统一的定义。赵飞祥认为,云原生数据库这一概念有多种理解方式,可以指某一种具体的数据库,也可以指数据库采用一些不同于以往传统关系数据库的架构和技术,可以很好与云结合。
Airwallex空中云汇是一家做跨境支付的互联网金融公司,目前使用的数据库主要有以下两种:云厂商提供的RDS数据库服务和自建数据库系统。
赵飞祥介绍,前期,企业主要采用云厂商提供的公有云数据库服务,包括支持国内业务的PostgreSQL RDS和支持国际业务的Cloud SQL for PostgreSQL,这些数据库一开始就是设计和运行在公有云上。因为公司创立之初,业务和基础环境都要快速迭代和发展,采用云数据库服务可以很好地满足业务迅速增加需求,对于数据库的运维和稳定能力也有一些优势。且在开始的阶段,公司的特殊业务场景和数据库定制化需求并不明显,采用公有云数据库能够很好的满足业务的功能和性能需求。
但随着公司业务发展,定制化需求越来越明显,也慢慢变得紧迫。而这些定制化需求并不一定是公有云厂商着重关注的需求,不一定可以得到满足。即使经过沟通,你们可以对需求达成共识,云厂商会进行开发和支持这些需求,但具体的功能发布周期和支持时间也存在很多变数。
所以Airwallex空中云汇考虑和测试了一些其他的数据库,通过自建来满足定制化的业务需求。目前使用较多的自建数据库是可以完全兼容PostgreSQL的分布式数据库YugabyteDB。
从Airwallex空中云汇的实践经验来看,云原生数据库给公司带来了不少价值:
在一定程度上简化DBA、研发人员对数据库的管理,并降低使用成本,并且在最 佳实践的指导下,能够完全满足大部分的稳定性和性能需求。
保持了全公司数据库使用环境的一致,并能随着云厂商的计划持续迭代和升级。
不过,云也可能带来成本的上升。在一定规模阶段,云对于运维成本有一定的降低。但随着数据库实例数量和数据量的不断增多,费用成本会不断提高。
可以看到,随义务持续不断的发展,用户定制化需求与厂商标准化产品之间的矛盾会慢慢的突出,在大多数情况下要企业自建数据库来满足其业务发展需求。赵飞祥指出,未来,对于公有云不足以满足的需求,Airwallex空中云汇会继续探索和实践一些自建数据库方案,来满足公司的业务发展需求。此外,随公司业务持续不断的发展,可能在国内会创建私有云环境支持相应的业务。所以公有云和私有云结合的混合云架构,也是其未来会考虑的方向。
业务需求。数据库作为基础设施的一部分,其最终目的是为满足和支持业务需求。只要可以在一定程度上完成业务的需求,就应该被考虑的备选数据库方案。而不是反过来,因为觉得某种数据库好,就必须让业务使用,即是没有需求也要造出需求,这就本末倒置了。
运维成本。在满足业务需求后,通常不可能只有一个选择,会有几个不同的备选方案。在这一步做出合理的选择时,运维成本就显得很重要。不仅要考虑DBA对该数据库产品的理解、运维和把控能力,也要考虑开发者对该数据库的使用经验和熟悉程度。越是大家都比较熟悉、都可以掌控的数据库,在后续使用时,稳定性就会越高。
使用预期。对于任何一个产品来说,都会有对应的产品成熟度。成熟度越高,就说明软件设计的越好,经历的场景越多,之前修复的问题越多,用起来出问题的可能性就相对低一些。但毋庸置疑,只要是软件,就可能会有bug,就会有不断迭代、打补丁的过程。咱们不可以指望选择一个产品一下解决所有问题。或者一个产品出现了一些问题后,就一棒子打死,直接弃用。对于数据库软件的使用要有一个合理的预期。可能因为某些优势选择了一款数据库,出现一些明显的异常问题后要不断深入了解和加深对该数据库的理解,一点一点不间断地积累最 佳实践。
相应的,针对以上三个要素,赵飞祥也提出了一款好的云原生数据库的三个评价因素:
业务需求。这款云原生数据库的设计和应用场景,确实有对应的业务需求可以支撑,切实解决了客户的痛点。只要确实能够支撑业务需求,能解决痛点,那就是有价值的产品。好的云原生数据库必须要清晰地确定自己的设计目标、实践目标、能带来的价值和意义。能够解决的痛点越多,数据库被认可的可能性就越高。
运维成本。在满足业务需求后,易用性和稳定能力,给使用数据库的运维人员和研发人员带来的使用成本的高低,也是衡量一款云原生数据库好坏的重要指标。好的云原生数据库要设计合理、易上手,不会给运维和开发人来带来过多的学习和适应负担,使用成本越低越好。
使用预期。虽然站在客户的角度,要有合理的使用预期。但作为云原生数据来说,产品成熟度越高越好。产品越成熟,被验证和证明的次数越多,已知的问题就会越少。同时对于新发现的bug和性能问题,官方能够接收和优化得越及时,越准确,越能持续维护、提升产品成熟度和稳定能力,数据库产品就会越好。
对于要不要云原生数据库要有清晰的判断。能了解和借鉴前面说的判断标准,做好自己的业务需求分析和产品选型,判断公司目前是不是适合使用云原生数据库。
对于使用云原生数据库的优势和劣势有充分地了解。使用云原生数据库,能带来什么样的好处,是考虑的理由。但决策之后产生的影响,也要有充分的估计。比如很多以“使用公有云后,能够更好的降低成本”为目标而使用云原生数据库的企业,通常最后都会后悔。一方面,初期云原生数据库节省的成本,并不一定是费用成本。另一方面,云原生数据库随着使用规模的扩大,往往费用成本要比自建机房高得多。
对于使用云原生数据库的预期要在合理的范围内,对于故障和性能优化的处理也要有充分的预估。使用了云原生数据库后,一些基础的、重复性的工作,可以不需要DBA来完成,但会有很多新的挑战和更有价值的事情需要DBA去完成。以为上了云之后,就可以不需要DBA的观点是不可取的。没有一点前提,直接提“DBA无用论”的观点更是谬论。除了事前的架构设计、最 佳实践、问题避免,在需要快速处理故障,优化性能时,DBA的价值会得到更明显地体现。
重视客户的真实需求,解决痛点问题。建议在产品需求上,对于客户的真实需求和痛点能够重视并予以解决。比如对于 7*24小时的核心业务系统,数据库零宕机(Zero downtime)的切换、升级、故障转移,是一个很基础、很重要的需求,应该重点支持和解决。
简化不必要的变更,降低客户运维成本。软件版本会一直在升级,云产品也会不断迭代,但站在用户的角度看,一些不必要的升级,就能不用进行了。如果实在要升级,尽可能要考虑好向下兼容,避免对用户有过大的影响。
不断提高稳定性,完善、优化数据库故障诊断和性能优化工具。有比较丰富的工具,原本是公有云RDS的一大特色和优势,只是目前很多云平台在这方面仍然不太完善。在遇到故障和性能问题时,通过已有的RDS功能不一定可以快速定位和解决所有问题,这方面仍然有较大的提升空间。
一款好的数据库不是设计出来的,而是用出来的。关于云原生数据库选型,大家有好的想法和建议,欢迎大家留言讨论。