云原生白话

本文参考了阿里技术的科普,原文链接:https://mp.weixin.qq.com/s/7-jf3cv0j164igzZDx15Jw

1. 何谓云原生

云原生在PaaS平台中,是一个比较常见的概念,但是具体的解释却很少有讲清楚的。大家常见的往往是K8S属于CNCF之类的。那么什么是云原生呢?

云原生是一种构建和运行应用程序的方法,是一套技术体系和方法论。

云原生(CloudNative)是一个组合词,Cloud+Native。Cloud 表示应用程序位于云中,而不是传统的数据中心;Native 表示应用程序从设计之初即考虑到云的环境,原生为云而设计,在云上以最佳姿势运行,充分利用和发挥云平台的弹性+分布式优势。

2. 历史演进

2.1 提出

Pivotal 公司的 Matt Stine 于2013年首次提出云原生(CloudNative)的概念;2015年,云原生刚推广时,Matt Stine 在《迁移到云原生架构》一书中定义了符合云原生架构的几个特征:12因素、微服务、自敏捷架构、基于 API 协作、扛脆弱性;到了2017年,Matt Stine 改了口风,将云原生架构归纳为模块化、可观察、可部署、可测试、可替换、可处理6特质;而 Pivotal 最新官网对云原生概括为4个要点:DevOps+持续交付+微服务+容器。

2.2 CNCF扩展定义

2015年云原生计算基金会(CNCF)成立,CNCF 掺和进来后,最初把云原生定义为包括:容器化封装+自动化管理+面向微服务

到了2018年,CNCF 又更新了云原生的定义,把服务网格(Service Mesh)和**声明式 API ()给加了进来。

总而言之,符合云原生架构的应用程序应该是:

  • 采用开源堆栈(K8S+Docker)进行容器化,
  • 基于微服务架构提高灵活性和可维护性,
  • 借助敏捷方法、
  • DevOps支持持续迭代和运维自动化,
  • 利用云平台设施实现弹性伸缩、动态调度、优化资源利用率。

云原生构建应用简便快捷,部署应用轻松自如、运行应用按需伸缩。优点不一而足,缺点微乎其微,秒杀传统 Web 框架,吊打祖传 IT 模式,实在是保命或评优晋级的不可多得的终极绝密武器。

3. 云原生的四要素

3.1 微服务

几乎每个云原生的定义都包含微服务,跟微服务相对的是单体应用,微服务有理论基础,那就是康威定律,指导服务怎么切分,很玄乎,凡是能称为理论定律的都简单明白不了,定律的大概意思是组织架构决定产品形态,不知道跟马克思的生产关系影响生产力有无关系。

微服务架构的好处就是按 function 切了之后,服务解耦,内聚更强,变更更易;另一个划分服务的技巧据说是依据 DDD 来搞,不过鄙人对 DDD 知之甚少。

3.2 容器化

Docker 是应用最为广泛的容器引擎,在思科、谷歌等公司的基础设施中大量使用,是基于 LXC 技术搞的,容器也是一个进程,容器化为微服务提供实施保障,起到应用隔离作用;K8S 是容器编排系统,用于容器管理,容器间的负载均衡,谷歌搞的,Docker 和 K8S 都采用 Go 编写,都是好东西,你值得拥有。

3.3 DevOps

这是个组合词,Dev+Ops,就是开发和运维合体,不像开发和产品,经常刀剑相见,实际上 DevOps 应该还包括测试,DevOps 是一个敏捷思维,是一个沟通文化,也是组织形式,为云原生提供持续交付能力。

3.4 持续交付

持续交付是不误时开发,不停机更新,小步快跑,反传统瀑布式开发模型,这要求开发版本和稳定版本并存,其实需要很多流程和工具支撑。

4. 技术的趋势和影响

软件设计有两个关键目标:高内聚、低耦合,围绕这2个核心目标,又提出了单一职责、开闭原则、里氏替换、依赖倒置、接口隔离、最少知识等设计原则。

软件工程师一直都在为这两个目标而努力奋斗,以求把软件编写得更加清晰、更加健壮、更加易于扩展和维护。

但后来,人们发现有更多的诉求,希望开发软件变得更简单、更快捷,程序员希望更少编写代码,非专业人员也希望能开发程序,于是,更多更傻瓜式的编程语言被发明出来,更多的编程技术(组件)和编程思想(复用)被发明出来,比如库、组件、云基础设施。

于是很多技术变成了屠龙之技,比如汇编,时代变了,然后很多软件工程师摇身一变成了调参工程师、Call API 专家、用库包能手、拼组件达人,这是效率分工的结果,也是技术发展的使然。

纵观近二十年的科技互联网发展历程,大的趋势是技术下沉,特别是近些年,随着云计算的发展和普及,基础设施越来越厚实,业务开发变得越来越容易,也越来越没有技术含量,而之前困扰小团队的性能、负载、安全性、扩展性问题都不复存在,这不禁让互联网行业的油腻大叔们噤若寒蝉,仿佛分分钟就要被卷入历史洪流而万劫不复。

虽然不可否认技术的重要性在降低,但也还不至于那么悲观。遥想 PC 时代,当VB、Delphi、MFC 出现的时候,也有类似论调,所见即所得,点点鼠标,就可以开发 PC 桌面程序,有没有很高端?那时候工程师的担心相比现在恐怕是只多不少吧,但后来随着互联网兴起,出现了后端开发这个工种,工程师很快找到了新的战场:网络、分布式、数据库、海量服务、容错容灾,于是又不亦乐乎地玩出一堆新花样。

你可能感兴趣的:(云原生白话)