本意是希望了解一下什么是云原生(CloudNative),但是发现相关的名词解释很多。

就顺带整理分享下,都是互联网老词了,老词新回顾,带领大家再冲冲浪。

本意是希望了解一下什么是云原生(CloudNative),但是发现相关的名词解释很多。

就顺带整理分享下,都是互联网老词了,老词新回顾,带领大家再冲冲浪。也确实是冲浪,大部分是 redhat 官网的摘录。

云计算(Cloud Computing)

在了解什么是云服务之前,肯定要了解一个更老的概念——云计算。那么什么是云计算呢?

云计算定义

一种能够跨网络、按需提供基础架构、服务、平台和应用的交付方式,正在快速取代原本通过硬布线连接进行资源共享的方式。

云计算是指在云中运行工作负载,而云是一种能够抽象、汇集和共享整个网络中的可扩展资源的 IT 环境。云计算和云本身都不属于技术的范畴。

  • 云计算是指在云中运行工作负载的功能。
  • 而云是一种环境,是运行应用的地方。
  • 技术则是指用于构建和使用云的软件和硬件。

云计算分类

以往人们很容易通过位置和所有权来界定公共云、私有云、混合云和多云之间的差异。

但如今已不再那么简单。所以,我们在尽全力定义主要云类型的同时,仍着眼于未来——因为了解过去的情况不一定就知道将来该如何使用云。

按照位置和所有权,我们可以这样划分云:

公共云(公有云) 私有云 混合云 多云(Multi-Cloud)
定义 一种利用非最终用户所有的资源创建的云环境,可重新分发给其他租户。 可广义地定义为:一种专为最终用户而创建,而且通常位于用户的防火墙内(有时也是内部部署)的云环境。 一种具有一定程度的工作负载可移植性以及编排和管理能力的多云环境。 一个含有多个云环境(公共云或私有云)的 IT 系统,云与云之间可能联网也可能不联网。

公有云

一个虚拟资源池,可自动部署并通过自助服务界面在多个客户端间进行分配,其中的虚拟资源来自归第三方公司所有和管理的硬件设备。当工作负载出现意外需求波动时,可直接通过公共云进行横向扩展。

公共云通常不会作为独立的基础架构解决方案来部署,而是被作为异构混合环境的一部分部署,这样即可以提高安全性和性能,降低成本,还可以改进基础架构、服务和应用的可用性。

公有云面对的需求
  1. 资源分配,由第三方提供服务,在租户见共享;
  2. 使用协议,随时可用,不用就停;
  3. 管理,提供商协助维护基础硬件、为网络提供支持、管理虚拟化软件;

综合下来,就是降低成本、提高可用;

私有云

一种专为最终用户而创建,而且通常位于用户的防火墙内的云环境。尽管传统上私有云在内部运行,但现在许多企业构建的私有云位于供应商租赁的外部数据中心内。如果底层 IT 基础架构归某个拥有完全独立访问权限的客户专有,那这种云就是私有云。

私有云面对的需求
  1. 出于安全、加密、权限等等限制导致不能使用公有云;比如银行、金融服务等行业;

混合云

现在的云类型过于复杂,位置和所有权比较抽象;

所以按照功能来划分:

  • 通过网络连接多台计算机。
  • 整合 IT 资源。
  • 横向扩展并快速置备新资源。
  • 能够在不同环境间移动工作负载。
  • 包含单个统一的管理工具。
  • 利用自动化对流程进行编排。

多云

多云是指在多个供应商上部署同一类云方案(公共云或私有云)。混合云是指通过集成或编排组合多种云部署类型(公共云或私有云)。

多云面对的需求
  1. 影子 IT,在大规模线上应用之外的云,比如,在我们的 CRM 系统之外,有另外的小组新搞了个 CRM,希望解决性能等问题,那么这套单独部署的未来可能会替代现有 CRM 的系统部署的环境,就可以叫做影子 IT;
  2. 灵活性,选择不同的价格、不同的性能来部署同一应用,比如 swift 历史 2 年以上的数据,就选一个容量大但是读写慢的机器存储,近三月的就选择容量小但是读写快的机器部署;
  3. 邻近,区域的距离或者法律法规限制;比如国内 swift 和海外 swift;
  4. 故障切换;

云服务

了解了云计算之后,我们就可以来看云服务了。

云服务定义

很显然,云服务就是利用云计算的交付方式,来通过互联网提供给用户的服务。暨指由第三方提供商托管的基础架构、平台或软件,可通过互联网提供给用户。

服务模式

凡是用户无需下载其他软件而是直接通过互联网就能访问的所有基础架构、平台、软件或技术都可以视为云计算服务,包括以下即服务类解决方案。

IaaS CaaS PaaS SaaS FaaS
基础架构即服务(IaaS)为用户提供计算、网络和存储资源。 容器即服务(CaaS)是一种云服务计算的模型,它允许用户使用内部数据中心或云,通过基于容器的抽象来部署和管理应用。 平台即服务(PaaS)为用户提供一个可运行应用的平台,以及运行所需的所有 IT 基础架构。 软件即服务(SaaS)为用户提供必备的云应用、应用运行平台以及平台的底层基础架构。 功能即服务(FaaS)是一种事件驱动型执行模型,它允许开发人员以功能的形式来构建、运行和管理应用包,无需维护基础架构。

各服务维护范围,除去 FaaS。

On-site IaaS PaaS SaaS
Applications Applications Applications Applications
Data Data Data Data
Runtime Runtime Runtime Runtime
Middleware Middleware Middleware Middleware
O/S O/S O/S O/S
Virtualization Virtualization Virtualization Virtualization
Servers Servers Servers Servers
Storage Storage Storage Storage
Networking Networking Networking Networking

加粗的内容是你需要管理和维护的。

CaaS

在云服务范畴内,CaaS 被认为是基础架构即服务(IaaS)的一种子集,介于 IaaS 和平台即服务(PaaS)之间。

CaaS 的基本资源为容器,它是云原生应用和微服务的常见部署机制。此外,CaaS 还可以提高环境之间的可移植性,无论是混合环境还是多云环境。

FaaS

一种在无状态容器中运行的事件驱动型计算执行模型,这些功能将利用服务来管理服务器端逻辑和状态。

它允许开发人员以功能的形式来构建、运行和管理这些应用包,无需维护自己的基础架构。

云计算服务的原理

我们在分类的时候 IaaS 提供的是基础架构,PaaS 提供的是平台,SaaS 提供的是软件。

那么这三种分别是什么?云计算是如何发布这三种服务的?

云基础架构

将计算功能和硬件组件分离开。例如

  1. 处理能力和 CPU 硬件分离开;
  2. 内存和 RAM 硬件分离开;
  3. 图形处理能力和 GPU 硬件分离开;
  4. 数据存储能力和磁盘等硬件分离开;

怎么理解这个分离呢?举个例子,假设我只有一个 100 算力的 CPU,但是我作为云服务提供的时候,可以将这个 CPU 的 100 算力分开售卖,以满足不同客户群的使用需求,最终形成的售卖方案可能是:

  1. 一个 50 算力的 SP;
  2. 三个 10 算力的 SSR;
  3. 五个 2 算力的 SR;
  4. 一百个 0.1 算力的 R;

怎么做到这个呢?通过虚拟化来实现。在一个 100 算力的 CPU 上,分别虚拟出来上述的内容。CPU 如此,其他硬件资源也是类似的。

云服务平台

云服务平台,就是在上述云基础架构的基础上,同时提供一套可以直接运行某种应用的环境。

实现云服务平台,除了上述的虚拟化技术之外,还要要求容器化、编排、API、路由、安全、管理和自动化等技术。

云平台是一种 PaaS。如果支持 PaaS 的基础架构组件具有高度可扩展性和可共享性,则可以将其视为云。PaaS 云的最佳例证包括公共云和托管私有云。

云软件

提供商可以提供并最终被广泛接受的云服务是一个完整的 Web 应用,也称云软件或 SaaS。这需要最大规模的开发投资,因为云提供商实际上是在为客户提供在线应用。比如我们公司的简道云、九数云等。

作为云软件,很容易和传统软件混淆,或者基于不同的 client 形式难以区分。无论是通过 web 还是通过其他的桌面客户端,只要是需要通过互联网与云服务提供商提供的软件服务器进行通讯的,都是云软件。

云软件可以通过云原生方法提供,云原生是一种结合了小型、独立和松散耦合的微服务的应用架构。多个微服务可以打包至由容器编排引擎(如 Kubernetes )管理的单个 Linux 容器中。最终产品是一个云应用,可通过微服务进行优化,而不会对整个应用中的其他微服务造成影响。

云原生

好家伙,终于到云原生了。

就如上文所说,云原生是一种方法,一种结合了小型、独立和松散耦合的微服务的应用架构。

云原生包含四个要点。

DevOps

从字面上来看,“DevOps”一词是由英文 Development(开发)和 Operations (运维)组合而成。

DevOps 强调通过一系列手段来实现既快又稳的工作流程,使每个想法(比如一个新的软件功能,一个功能增强请求或者一个 bug 修复)在从开发到生产环境部署的整个流程中,都能不断地为用户带来价值。这种方式需要开发团队和运维团队密切交流、高效协作并且彼此体谅。此外,DevOps 还要能够方便扩展,灵活部署。有了 DevOps,需求最迫切的工作就能通过自助服务和自动化得到解决;通常在标准开发环境编写代码的开发人员也可与 IT 运维人员紧密合作,加速软件的构建、测试和发布,同时保障开发成果的稳定可靠。

当然,这意味着更改代码会更频繁,基础架构的使用也会更灵活。所以传统的管理策略无法满足这种需求。

它是一种文化,也是一个流程,更是一组的平台和工具。

微服务(Microservices)

微服务既是一种架构,也是构建软件的方法。在微服务中,应用被拆分成最小的组件,彼此独立。不同于将所有组件内置于一个架构中的传统单体式应用构建方法,在微服务架构中,所有部分相互独立,通过合作来完成同一个任务。其中的每一个组件或流程都是一个微服务。这种软件开发方法强调细粒度、轻量化,力求在多个应用中共享相似的流程。它是针对云原生模型优化应用开发的主要组件。

微服务架构有助于更快地交付高质量的软件。使用微服务有助实现这一点,但也需要注意一些细节。仅仅将应用拆分成微服务是不够的,您还必须对微服务进行管理和编排,处理微服务创建和修改的数据。

API

应用编程接口(API)由一组用于集成应用软件和服务的工具、定义和协议组合而成。有了这类接口,您无需不断构建新的连接基础架构,就能让自己的产品和服务与其他产品和服务进行通信。

容器

对应用及其整个运行时环境(包括全部所需文件)一起进行打包或隔离。从而让您可以在不同环境(如开发、测试和生产等环境)之间轻松迁移应用,同时还可保留应用的全部功能。

容器使开发团队可以全心投入应用开发,而运维团队则专注于基础架构维护。容器编排是管理这些部署的方式。

Kubernetes 是一种可自动实施 Linux 容器操作的开源平台。它可以省去应用容器化过程的许多手动部署和扩展操作。Kubernetes 可提供一个便捷有效的平台,可以在物理机或虚拟机集群上调用和运行容器。Kubernetes 架构将集群分为不同的组件,这些组件要协同工作来维护集群的预期状态。

总结

简而言之,云原生,就是使用 DevOps 的方法搭建出一个完整的云端应用,这个应用由若干个运行在容器内部的微服务组成,它们之间借助 API 进行通信。

How to Make Change

首先从能够开展协作的自动化流程入手。也就是说,通过 DevOps 使开发和运维协同合作,让朝着共同目标努力并定期进行反馈。

容器提供理想的应用部署单元和独立的执行环境,为这些实践提供支持。凭借 DevOps 和容器,能更加轻松地以松散耦合服务的形式(如微服务)来发布和更新应用,而不是等待大型版本的发布。

云原生开发注重架构的模块性、松散耦合及其服务的独立性。每个微服务实现一种业务能力,在自己的流程中运行,并通过应用编程接口(API)或消息传递进行通信。该通信可通过服务层进行管理。

但是,作为云原生应用的一部分,无需始终从微服务开始以加速应用交付。仍然可以使用基于服务的实用架构来优化其传统应用。持续整合和持续部署(CI/CD)等 DevOps 工作流以及全自动部署操作为该优化提供支持。

框架

既然方法思想都变了,那么对应的技术栈层面很显然也要跟随改变。

历史就是这样演变的。我们从传统的 tomcat 开发到 spring boot,再到云端的 spring cloud。

云原生开发当然也会有专门的框架和解决方案。

之前提到的 quarkus 就是其中一种。

不过由于时间的关系(我懒,进一步的内容放在下次的分享吧。

ref

red hat cloud topic