云原生数据组件
前面已经界定了云原生应用需要消耗的资源,接下来介绍提供这些资源的数据基础设施的类型。下面没有列出所有涉及的产品,而是将其分解成具有相似特征的几大类。
持久化
当谈论数据基础设施时,你可能认为持久化已经是公认的条件了。然而在Kubernetes的世界中,既能存储数据又能通过某种查询方式访问的系统,MySQL和Postgres等关系数据库,以及Cassandra和MongoDB等NoSQL,都成了难以攻克的堡垒,这是因为此种系统对资源的要求非常严格,数据库通常对运行中的应用十分关键,并且对系统的每个部分都至关重要。
流式传输
流式传输的基本功能是促进端点之间的高速数据传输。流式传输系统根据用例提供各种传输语义。在某些情况下,可以向多个客户端交付数据,在需要严格控制时也可以只提交一次数据。加入处理环节可以进一步增强流式传输功能,即实现在传输途中更改数据。快速洞察数据的需求让流分析变得至关重要,其重要性已经不亚于持久化系统。移动数据的流式传输系统包括Apache Flink和Apache Kafka等,其中处理系统包括Apache Flink和Apache Storm等。
批量分析
分析大量数据从而归纳出深层含义或改变数据的用途是大数据面临的首要问题之一。作为第一个用于批量分析的大规模系统,Apache Hadoop围绕使用大量计算和存储设定预期目标,协调资源并通过复杂的分析过程产出结果。这些目标通常作为集群中的作业而被发布,与Spark的情况相似。由于需要大量资源,因此使用这种系统通常会面临成本高昂的问题。编排系统用于通过智能分配来降低成本。
展望未来
考虑到目前已经取得的成功和未来的发展趋势,云原生数据的未来令人期待。选择哪条道路通往未来取决于我们这些数据基础设施的建设者。面对挑战,我们会一如既往地迎难而上。虽然现在有大量工作需要完成,但我们相信结果一定是令人惊喜的,并能够让我们更上一层楼,实现更进一步的突破。
通过Kubernetes实现数据库现代化的倡议
西部数据战略计划高级总监Rick Vasquez
Kubernetes适用于21世纪20年代使用数据库的任何人。它在构建云原生和分布式系统方面有领先优势。只有将数据系统与Kubernetes更好地集成在一起,才能物尽其用,发挥更大的潜力。我曾认为“数据库不应该在容器内部运行”,如今我已经彻底摒弃了这种想法。我现在认为应当提倡每个人都通过Kubernetes进行部署。我一直专注于大规模的企业级用例,认为这不会只是一时兴起。针对其中的一些巨型企业,我正在研究在全球范围内推广企业级用例的可行性。
有一种观点需要纠正,那就是将Kubernetes视为一种操作系统,认为其他应用能够在其上运行。如此看待运行中的数据工作负载是错误的。如果一个操作系统在容器内部运行,那么它一定能在Kubernetes上运行吗?非也,这取决于控制平面是如何部署和运行程序的,它也不一定是你想要的。如果数据系统能更紧密地集成到Kubernetes上,并且将相关功能转由Kubernetes控制平面进行处理,那将会是怎样的呢?服务发现、负载均衡、存储编排、自动化版本更新和回滚、自动装箱、自愈、密钥与配置的管理等都是强大的功能,可以为开发人员和SRE(站点可靠性工程师)提供一致的体验。Kubernetes的关键特点是能提供一致性。使用Kubernetes可以在所有应用部署中保持全局一致性,并能每次以相同的方式执行。但这需要把数据库系统包括在内。想象一下,如果你有Kubernetes上原生构建的Postgres、MongoDB、MySQL或Cassandra,你会怎么做?
不管使用本地磁盘还是远程磁盘作为存储方式,在某些配置对象中,所有这些都是声明式的。我想在数据库中将这些和数据库一起配置。例如,在使用MySQL时,我想将日志文件存储到本地磁盘上,避免出现性能瓶颈。同时,我想将某些表存储到网络传输速度较慢的磁盘上。我还想让过去7天内使用过的数据存储在频繁操作的本地NVMe硬盘上。充分利用副本提供的所有存储空间,其实就是将数据的读取和节点的写入操作分摊到这些副本上,并在一个大集群中进行数据分析,这些功能都可以通过Kubernetes的云原生数据库来实现。
数据库不会察觉和感知自身的大小。如果它变大了,那么需要消耗更多资源。可以将其设置为自动伸缩,这样它在变大的时候可以实现横向扩展。Kubernetes提供的真正意义上的弹性伸缩能给我们带来什么呢?不仅有向上的外向扩展,还有向下的内向回缩!数据库为什么不能也这样呢?基于Kubernetes部署应用,或更宽泛地说,基于云原生部署应用,尽可能地挖掘这个过程中的价值是十分重要的。虽长路漫漫,但未来可期。
Rick的这次演说虽然是专门针对数据库的,但是能够看出他呼吁在Kubernetes上运行数据基础设施。引入Kubernetes控制平面不是在物理服务器上部署数据应用,而是需要与其上运行的服务进行交互。