关于作者
蔡灏旻:openEuler 社区 Cloud Native SIG 初创发起成员,任 Cloud Native SIG Maintainer 。 2017年加入华为,多年容器、操作系统研发经验,对容器、Kubernetes、云原生等领域有深入的研究。现任 iSula 容器团队架构师,带领团队研发 iSula 容器解决方案,其中轻量级容器引擎 iSulad,镜像构建方案 isula-build 等已经在 openEuler 开源。
写在前面
以下观点是我自己一点点粗浅的理解,如有赞同,那太棒了,我们想一块儿去了。如有不同,那真是太棒了,欢迎讨论。什么是定义?
在现代汉语词典里, “定义” 是指 “对于一种事物的本质特征或一个概念的内涵和外延的确切而简要的说明”。这里不得不提到经典系统艺术里《一把和三把椅子》中诠释了定义的概念:一把实物椅子,一把椅子照片,一篇关于椅子的字典定义。象征着实物、理念、语言定义三种观念,有那个味儿了是不?这也引申出了,定义本身是有外延、内涵和拓展的,以及含糊的。 藏书卷四 《一把和三把椅子》——对寻常之物的质疑这里提一个有意思的事儿,刚刚对于"定义"的定义,本身是一种什么样的定义呢?定义作为一种说明,必然有方法论支持,定义应该包括三个部分:被定义项,定义项与定义关联,大概的类型应该描述为: 被定义项就是定义项。比如樱木花道是天才,樱木花道就是被定义项,就是属于定义关联,天才是定义项。但真实的定义方法论有很多,这里列举一些:- 词法定义:描述一个词或者一个表达的意义,一般一个词法定义提供一个与原词相当的表达。比如“摸鱼“定义为”开心地消耗时间“。
- 实物定义:这是一个大家最熟悉的定义方法,比如看着一只小狗定义为“狗”,看到兵长定义为“一米六”。
- 内涵定义:将一个物件与其它物件之间不同的所有特征列举出来,比如 ”CSGO 中所有自动步枪的集合“。这里延伸一个附属种差定义,先找出被定义的概念的属概念,再找出种差,这是我们最常见的定义方法,比如:哺乳类动物就是以分泌乳汁喂养出生后代的脊椎动物。
- 外延定义:是描述一个概念或者词的外延,即所有这个概念或者词所包含的事物。这里延伸一个列举定义,即列举一个概念或者词所描写的所有物件,这是一个特殊的外延定义,只适用于有限集合。
- 混合定义:先给出某个概念的一些或全部内涵,再列举概念的一些或全部外延。这个定义方法就完全是在耍流氓了。我先说一些,可能也不完备,引申内涵和外延的时候也可能不完备,比如书上写的:基本粒子是迄今所知的、能够以自由状态存在的所有最小物质粒子的统称,包括电子、中子、光子等。
Pivotal 的定义
这里不得不提 First Man -- Matt Stine,这位老大哥有 20 年 IT 从业经验,在 2013 年任职于 Pivotal 的时候首次提出了 Cloud Native 的概念,并且也是著名的《Migrating to Cloud-Native Application Architectures》的作者。
2019 年这位老哥从 Pivotal 离职,现在任职于摩根大通。Pivotal 也被 vmware 收购,这里就牵扯出云原生定义的一条线,也是很多人都在提及的概念,我解释为 Pivotal(vmware)对云原生的定义:实际上来说,Pivotal 对云原生的定义也是在不断变化的,总体来说为三个阶段:2015:
- 符合 12 因素应用(Twelve-Factor Applications)
- 面向微服务架构(Microservices)
- 自服务敏捷架构(Self-Service Agile Infrastructure)
- 基于 API 的协作(API-Based Collaboration)
- 抗脆弱性(Antifragility)
- 模块化(Modularity)(通过微服务)
- 可观测性(Observability)
- 可部署性(Deployability)
- 可测试性(Testability)
- 可处理性(Disposability)
- 可替换性(Replaceability)
- Devops
- CI/CD
- 微服务
- 容器
这里我们可以看出两点,一是云原生的定义在 Pivotal 内部也是不断更迭的,很多概念被放弃或者抽象,并且有新的东西加入。2017 年的定义是 Pivotal 一直尝试于用 内涵定义与外延定义来导出定义。看,刚刚的方法论用上了吧。因为这种方法对大家来说是比较好接受的,也就是说满足了这些种属特征的就是云原生,所以大家看到这个定义的时候,都有一种微微点头,然后"哦~~~"的感觉。谈到这里,我们就得看看“官方”声音,CNCF 基金会是怎么定义云原生的。
CNCF 的定义
CNCF 成立于 2015 年,在成立之初,CNCF 就发布了关于 Cloud Native 的一个定义,在 2018 年正式发布了关于 Cloud Native 定义的 1.0 release 版本,这里与 Pivotal 一致,实际上也是不断演进和变化的:2015:
- 应用容器化(software stack to be Containerized)
- 面向微服务架构(Microservices oriented)
- 应用支持容器的编排调度(Dynamically Orchestrated)
总结
到这里,我们基本理清楚了业界关于云原生定义的两条线:Pivotal 使用内涵定义与外延定义来定义云原生,试图将云原生的内涵范畴和有限集合归纳,这让人感到清晰,但是实质上可能是不完备的。CNCF 利用混合定义,概念+衍生的方式定义云原生,这样做保留了扩展空间,但是会让人感到困惑。简单追究一下本质原因,我认为可能是 CNCF 作为一个中立的第三方组织,必然预料到云原生技术是不断发展的,同时也是各种商业组织博弈的场所,点到为止,暂时按下不表。以后可能会有更多的新鲜技术架构加入进来,保留一个可扩展、松耦合的架构本质上也是云原生的一个特征,所以他们连定义都搞成这种架构了!而 Pivotal(Vmware)作为一个商业公司,定义最终为其商业目的服务,必然最重要和自己盈利产品对上,这样清晰的定义也是合乎其逻辑的。篇幅过长,反正先开个坑,忙完这阵儿再开始写下一篇,看看我们能不能说清楚" 当我在说云原生的时候我在说什么",还是“ 当我在说云原生的时候我也不知道我在说啥”?下篇文章我们来聊一聊 openEuler 的 Cloud Native SIG 是怎么来定义云原生的。