这两年,云原生数据库风起云涌,不管是老牌的数据库厂商,还是大型云计算企业都在向这一趋势靠拢。问题是,什么是云原生数据库?把数据库搬上云就是云原生吗?云原生数据库和传统数据库相比有哪些区别?相信,很多人都是云里雾里!
云就绪不等于云原生
所谓“云原生”是指生在云上,长在云上,在云上用。这样一来,是不是只有云计算企业提供的数据库才是云原生数据库?显然,这一认知不合乎客观事务逻辑!传统数据库厂商虽然没有自己的云,但如果它把数据库架构在其他云上,能支持分布式系统,这依然是云原生数据库。所以,判断一款数据库产品是不是云原生数据库,有两条标准。一条是,是否充分利用了云技术;另一条是,是否采用的是分布式系统。
当然,虽然很多数据库都能在云中运行,但从云就绪到云原生,区别很大。云原生,是指所有的服务、软件、API 或数据库都能在云上运行和部署,同时受益于云原生系统提供的其他能力。云就绪是以架构优化为基础,通过融合、集成等策略,对传统IT架构进行现代化演进。如果说,企业云原生之路要经历云就绪、云原生和无服务器三个阶段。那么,云就绪就是云原生的第一个阶段。所以,云就绪不等于云原生。
Kubernetes是云原生数据库的“康庄大道”
还有,我们在谈论云原生数据库的时候,总会提到Kubernetes。那么,云原生数据库和 Kubernetes是怎样一种关系呢?我们到底要不要把数据库运行在Kubernetes环境中?
其实,如果你理解了云原生和容器之间的关系,就能判断云上的数据库到底要不要运行在Kubernetes环境上。云原生架构的最典型特征就是全面容器化,而Kubernetes是实现容器规模化发展的康庄大道。所以,云原生数据库也一样,需要在Kubernetes环境中运行。但如何存储、迁移数据,保持数据的现有状态,成为一大挑战。
最开始,Kubernetes是为无状态工作负载设计,但数据库的需求刚好相反,需要数据的持久化存储能力。之后,Kubernetes进行了升级,通过有状态服务StatefulSets和持久化存储Persistent Volumes的引入,轻松支持有状态的工作负载。所以,云原生数据库可以在 Kubernetes 环境上运行,并能获取更灵活、可扩展的数据存储和查询服务。
云原生数据库利用新的技术改进,将数据库带到云环境中,并体验到 Kubernetes带来的弹性和可扩展性等所有优势。
云原生数据库是企业IT架构不断演进的结果
随着微服务和容器化趋势的日益普及,需要一个与应用趋势相同的数据库,与之相匹配。而MySQL和MongoDB等传统数据库在可扩展性、安全性和可访问性等方面存在诸多限制。尽管,它们可以与云集成,但在云中使用这些数据库会受到各种应用上的限制,不能充分体验到云带来的优势。
以下是笔者总结的云原生数据库的优势:
(1) 可扩展性强
云原生数据库最典型特征是,具备很强的可扩展性,可以根据工作负载灵活调动资源,随时扩缩容。所以,用户不用担心因流量激增而导致存储资源不足的问题。按需付费,根据工作负载需求扩大和缩小资源应用,这点非常重要,也是云原生数据库带来的最重要优势之一。同时,云原生数据库还要确保数据安全,不能因系统故障而出现数据丢失的现象。一旦意外宕机,要及时把数据迁移到新的 Pod 或者节点上,并能自动修复数据。
(2) 全面自动化
在 Kubernetes 环境中运行数据库,非常易于使用,能让数据库从代码层面实现自动化部署和管理。
(3) 快速部署
云原生数据库与传统数据库部署方式不同,其云原生自带的分布式数据库技术,使得数据库部署更快,并且更容易访问。
(4) 节约成本
云原生数据库能够降低用户的前期投入成本,借助云的弹性扩展能力,让用户按需按量使用资源,优化资源分配。
(5) 易于管理
由于云原生数据库拥有自动化和可扩展性等特性,所以可以轻松管理数据库,调整相关资源。