云原生应用架构设计与开发实战吾爱fen享

什么是云原生应用? 下崽课程ZY:https://www.97yrbl.com/t-1389...
要理解云原生存储,我们首先要了解云原生技术的概念,CNCF 对云原生定义如下:
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API。
这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
简言之:云原生应用和传统应用并没有一个标准的划分界限,其描述的是一种技术倾向,即越符合以下特征的应用越云原生:

  1. 应用容器化
  2. 服务网格化
  3. 声明式 API
  4. 运行可弹性扩展
  5. 自动化的 DevOps
  6. 故障容忍和自愈
  7. 平台无关,可移植的
    云原生存储的概念来源于云原生应用,顾名思义:一个应用为了满足云原生特性的要求,其对存储所要求的特性是云原生存储的特性,而满足这些特性的存储方案,可以称其为云原生的存储。
为什么需要云原生存储?
云原生存储依然是容器化面临的主要挑战之一
根据 CNCF 的调研报告:在使用/部署容器过程中遇到的挑战中,依然有高达 29% 的人选择存储。存储几乎和安全问题一样,成为应用容器化过程中的主要难点。
file
目前,云原生存储遇到的挑战表现在以下几个方面:
易用性:存储服务部署、运维复杂,云原生化程度低,缺少与主流编排平台整合。
高性能:大量应用 IO 访问,IOPS 需求高,低时延,性能成为应用运行效率瓶颈。
高可用:云原生存储已经应用到生产环境,需要高可靠/高可用,不能出现单点故障。
敏捷性:PV 快速创建、销毁、平滑的扩展/收缩,PV 随 Pod 迁移而快速迁移等。
有状态应用现在已成为容器存储的主体
随着 Kubernetes 的应用程度加强,并且伴随着 IoT、5G、AI 等技术的成熟,越来越多的有状态应用被搬上容器平台。根据 CNCF 的调研报告,已经有超过一半的用户已经在容器中运行有状态应用,并且有 23% 的用户正在评估或计划在容器中部署有状态应用。
file
  1. 通常,有状态应用对存储的有如下三点需求:
  2. ① Volume 拥有独立与pod的生命周期。
  3. ② Volume 中的数据是可以持久保留的。
  4. ③每个 pod 与其使用的存储关系是稳定的,不会因升级等因素而发生变化。
  5. 当然不同类型的应用具有不同的 IO 特点,对于存储有不同需求:
【云原生应用架构设计与开发实战吾爱fen享】数据库 —— 交易型数据库(OLTP) MySQLPostgreSQL 通常承载的都是核心交易类业务,对存储系统的数据可靠性、性能要求极高。
AI/ML —— ML 应用程序, TensorFlow 使用分布式计算处理不同进程中的图形部分,每个进程都可以在单独的容器中运行。
大数据分析 —— 分析型数据库(OLAP),如 Spark,存储系统的可靠性以及延迟的要求都不像 OLTP 数据库那么高,需要大容量存储。
HPC/渲染 —— 如图形绘制和视频转码工具,都可以使用应用程序实例集群化来处理大型批处理作业。
Devops —— Jenkins/Gitlab,通常 Jenkins 基于主从模型构建分布式集群,即会使用一个文件目录来维护其状态。因此,需要在不同主机上的容器之间共享该目录。
多云环境带来的云原生挑战
如今,越来越多的 IT 组织正在构建混合云和多云环境以支撑其业务运行。从容器的角度来看,我们知道在多个云平台上运行应用程序已经成为了容器技术使用的主要驱动力,带来了远超以往的益处,如开发者效率的提升以及支持微服务等。但是,多云以统一的方式管理、保护和部署存储可能具有挑战性:
多个 API —— 云服务通过 API 进行通信。虽然 RESTful API 有一些标准化,但不同的提供者会创建不同的 API 结构。这可以包括不同的规则结构或不同的语言。这些差异需要应用程序自定义以实现跨服务通信。
兼容性问题 —— 为了顺利集成到单一环境中,存储服务需要跨云兼容。这意味着服务需要适应相同的数据结构并允许与相同的工具集成。
复杂的管理 —— 很难确保跨云服务和环境的可见性。它需要集中监控和联合服务,例如身份和访问控制。如果没有中心化,服务可能会出现配置差异或错误,并增加脆弱性。

    推荐阅读