基础设施类型
在过去20年中,根据分布式应用部署方式逐渐将数据基础设施划分为两类,如图1-1所示。
图1-1 无状态服务与有状态服务的对比
无状态服务
无状态服务仅在当前请求的生命周期内存储信息,如向手机客户端发送格式化的购物车信息。执行购物车业务逻辑的应用服务器便是一个典型用例。有关购物车内容的信息都保存在这些服务之外,只需在从请求到响应的短时间内在线即可。提供这种服务的数据基础设施可轻松实现弹性伸缩,按需扩展计算和网络资源,几乎不会影响到应用本身。因为关键数据没有存储在单项服务中,所以几乎不需要协调就可以快速创建和销毁各项服务。无状态服务是分布式系统中的关键组成部分。
有状态服务
有状态服务需要跨越请求的生命周期存储信息。这些信息存储在磁盘和内存中,以便不同请求调用。数据库或文件系统就是典型用例。为了实现高可用性,通常需要复制信息,这就需要使用数据同步机制保障数据副本的一致性。因此,有状态服务的弹性伸缩要复杂得多。此外,有状态服务通常有不同的横向和纵向伸缩方式,其与无状态服务的任务操作集也不同。
信息的存储方式正在转变,开发系统也朝着能实现数据基础设施自动化部署的方向转变。以下是最新进展:
• 虚拟机正逐步取代物理服务器,这是因为虚拟机能够实现快速部署和运维。
• 虚拟机最终显著简化,并专注于容器。
• 容器允许数据基础设施工程师将应用对操作系统的依赖项打包到单个可执行文件中。
容器的使用无疑提高了应用部署的一致性,使得批量部署和运行数据基础设施更加容易。面对容器的爆炸式增长,几乎没有其他系统能像Kubernetes一样胜任容器编排任务。而Kubernetes惊人的发展速度更是彰显了它的实力。Kubernetes官方文档(见网址列表条目[12])描述如下:
Kubernetes是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,促进声明式配置和自动化部署。Kubernetes拥有一个庞大且快速增长的生态系统。Kubernetes有很多可用的服务、支持和工具。
Kubernetes最初是为无状态工作负载设计的,这是过去它做得卓越的地方。“一个构建平台的平台”是Kubernetes在云原生领域赢得的赞誉。然而,完整的云原生解决方案必须将数据包含在内,这一点无可厚非。因此,本书旨在探索如何通过Kubernetes构建云原生数据解决方案。下面让我们一起了解一下“云原生数据”的定义。