关于云原生需要了解什么

戳蓝字“CSDN云计算”关注我们哦!

640?wx_fmt=jpeg

尽管随处可闻云原生,却鲜少有人告诉你到底什么是云原生,若是找资料来看,读完大多会感觉云缭雾绕,一知半解,总之虚得很,甚至会让你一度怀疑自己的智商,不过我对于读不懂的文章,一律归因于文章写得不够直白,当然这不一定是事实,但这样的思考方式能让我避免陷入自我怀疑的负面情绪。

云原生之所以解释不清楚,是因为云原生没有确切的定义,云原生一直在发展变化之中,解释权不归某个人或组织所有。

技术的变革,一定是思想先行。

何谓云原生?

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

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

640?wx_fmt=jpeg

2015年云原生计算基金会(CNCF)成立,CNCF 掺和进来后,最初把云原生定义为包括:容器化封装+自动化管理+面向微服务;到了2018年,CNCF 又更新了云原生的定义,把服务网格(Service Mesh)和声明式 API 给加了进来。

可见,不同的人和组织对云原生有不同的定义,相同的人和组织在不同时间点对云原生也有不同的定义,我的应对很简单,选一个我最容易记住和理解的定义:DevOps+持续交付+微服务+容器。

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

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

云原生的四要素

微服务

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

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

容器化

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

DevOps

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

持续交付

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

640?wx_fmt=jpeg

图片来源网络

如何云原生?

首先,云原生借了云计算的东风,没有云计算,自然没有云原生,云计算是云原生的基础。

随着虚拟化技术的成熟和分布式框架的普及,在容器技术、可持续交付、编排系统等开源社区的推动下,以及微服务等开发理念的带动下,应用上云已经是不可逆转的趋势。

云计算的3层划分,即基础设施即服务(IaaS)、平台即服务(PaaS)、软件即服务(SaaS)为云原生提供了技术基础和方向指引,真正的云化不仅仅是基础设施和平台的变化,应用也需要做出改变,摈弃传统的土方法,在架构设计、开发方式、部署维护等各个阶段和方面都基于云的特点,重新设计,从而建设全新的云化的应用,即云原生应用。

  • 本地部署的传统应用往往采用 c/c++、企业级 java 编写,而云原生应用则需要用以网络为中心的 go、node.js 等新兴语言编写。

  • 本地部署的传统应用可能需要停机更新,而云原生应用应该始终是最新的,需要支持频繁变更,持续交付,蓝绿部署。

  • 本地部署的传统应用无法动态扩展,往往需要冗余资源以抵抗流量高峰,而云原生应用利用云的弹性自动伸缩,通过共享降本增效。

  • 本地部署的传统应用对网络资源,比如 ip、端口等有依赖,甚至是硬编码,而云原生应用对网络和存储都没有这种限制。

  • 本地部署的传统应用通常人肉部署手工运维,而云原生应用这一切都是自动化的。

  • 本地部署的传统应用通常依赖系统环境,而云原生应用不会硬连接到任何系统环境,而是依赖抽象的基础架构,从而获得良好移植性。

  • 本地部署的传统应用有些是单体(巨石)应用,或者强依赖,而基于微服务架构的云原生应用,纵向划分服务,模块化更合理。


可见,要转向云原生应用需要以新的云原生方法开展工作。云原生包括很多方面:基础架构服务、虚拟化、容器化、容器编排、微服务。幸运的是,开源社区在云原生应用方面做出了大量卓有成效的工作,很多开源的框架和设施可以通过拿来主义直接用,2013年 Docker 推出并很快成为容器事实标准,随后围绕容器编排的混战中,2017年诞生的 k8s 很快脱颖而出,而这些技术极大的降低了开发云原生应用的技术门槛。

640?wx_fmt=jpeg
图片来源网络

虽说云原生的推介文档有引导之嫌,但面对它列举的优点,作为杠精的我亦是无可辩驳。这么说的话,云原生也忒好了吧,应用是不是要立刻马上分分钟切换到云原生架构?我的观点是:理想很丰满,现实很骨感,需从应用的实际需要出发,目前的问题是否真的影响到业务发展?而推倒重来的代价能否承受得来?我曾经经历过游戏团队要把带状态的游戏服务器用微服务思路去做,折腾得死去活来最后以失败告终。

技术的趋势和影响

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

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

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

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

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

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

640?wx_fmt=png

福利
扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


推荐阅读:
  • 漫画:程序员战力图鉴
  • 我们到底该如何看待6G?
  • 漫画:什么是插入排序?
  • 从七个方面,面试大厂高级工程师
  • 为什么说边缘计算的发展比5G更重要?
  • 记一道字节跳动的算法面试题                                

真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java f.lenth返回值_long length

描述所述java.io.RandomAccessFile.getFD()方法返回与此流关联的不透明文件描述符对象。声明以下是java.io.RandomAccessFile.getFD()方法的声明。public final FileDescriptor getFD()参数NA返回值此方法返回与此流关联的文件描述符对象。异常IOException - 如果发生I / O错误…

仅使用NumPy完成卷积神经网络CNN的搭建(附Python代码)

摘要: 现有的Caffe、TensorFlow等工具箱已经很好地实现CNN模型,但这些工具箱需要的硬件资源比较多,不利于初学者实践和理解。因此,本文教大家如何仅使用NumPy来构建卷积神经网络(Convolutional Neural Network , CNN&a…

python celery应用场景_python celery 模块

Celery是基于Python开发的一个分布式任务队列框架,支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度Celery是典型的生产生-消费者模式,主要由三部分组成:broker(消息队列)、workers(消费者:处理任务)、backend(存储结…

SpringBoot 使用LibreOffice 在线预览 doc,doxc,xls,xlsx,ppt,pptx 文件

接上一篇:linux环境源码安装unoconv Linux环境_源码安装Unoconv实现文件在线预览doc,doxc,xls,xlsx,ppt,pptx 文件 https://gblfy.blog.csdn.net/article/details/103540694 接上一篇:linux环境…

裸辞面11家python公司,拿到4个offer!网友:买了简历置顶会员吗?

我一直认为,敢裸辞的只有2种人:1、能力足够强,即使裸辞也不会被财务问题所困,更不愁找工作。2、年轻气盛,遇到傻X领导和傻X同事,绝对0容忍!但是最近我在刷某乎的时候,发现了第三种人…

万用表怎么测电池内阻_数字万用表和指针万用表,两者怎么选?

​万用表又称为复用表、多用表、三用表、繁用表等,一般以测量电压、电流和电阻为主要目的。是一种多功能、多量程的测量仪表,可测量直流电流、直流电压、交流电流、交流电压、电阻和音频电平等,有的还可以测交流电流、电容量、电感量及半导体…

在Linux系统上安装Git

Git是目前流行的非常好用的版本控制工具,这里介绍两种安装方式,1、yum安装,2、从github上下载最新的源码编译后安装 文章目录一、yum安装二、从GitHub上下载最新的源码编译后安装1、下载tar包2、上传tar包3、解压压缩包4、进入到解压后的文件…

Michael Jordan:当下的AI其实都是伪“AI”

摘要: Michael Jordan认真的解读当下的AI到底是什么?人工智能(AI)是未来的趋势,这句话是技术人员、学者、记者和风险投资家一致赞同的。如同从技术学术领域跨越到普遍行业的许多词语一样,在使用这些词语的时…

如何提升员工体验 助力企业业务增长?这个棘手的问题终于被解决了!

戳蓝字“CSDN云计算”关注我们哦!相信大部分人都经历过入职第一天的手忙脚乱与无所适从,一份新的工作本就是一项全新的挑战,各种设备的安装与链接、安装适应任何新任务的应用流程,以及令人头疼的各种密码,凡此种种都为…

java 牛生小牛_例题:大牛生小牛的问题解决方法

问题:一只刚出生的小牛,4年后生一只小牛,以后每年生一只。现有一只刚出生的小牛,问20年后共有牛多少只?思路:这种子生孙,孙生子,子子孙孙的问题,循环里面还有循环的嵌套循环&#x…

Git 报错bad default revision 'HEAD'

重新提交一次记录就好了

vb 打印机 任意尺寸_创新小黑管“省心省力”惠普Laser NS 1020 智能闪充激光打印机...

对于小型公司、个人工作室或者有打印需求的家庭用户来说,一款优秀的轻巧、便携的打印机必不可少。前不久,惠普推出了全新一代惠普Laser NS 1020打印机,采用突破性的智能闪充碳粉技术,可实现15秒充粉,简便省时&#xff…

隐私与机器学习,二者可以兼得吗?

摘要: 隐私数据与机器学习看似矛盾,其实不然。如何有效保护机器学习训练中的隐私数据?谷歌专家给出了答案——PATE框架,就算你不太懂隐私保护的知识,也可以通过PATE框架来保护机器学习里的训练数据。最近关于互联网隐私…

SpringBoot 深度调优,让你的项目飞起来!

文章目录项目调优一、修改配置文件项目调优 作为一名工程师,项目调优这事,是必须得熟练掌握的事情。 在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行。 一、修改配置文件 关于修改配置文件application.properties。 …

青年PM倪超:想让程序员多一点点幸福感

摘要: 本文主人公倪超,在内部,同事都习惯叫他花名银时,是阿里云产品经理。前不久,他所负责的企业级分布式应用服务EDAS,荣获了公司2018财年年度最佳产品奖。在五四青年节来临之际,我们有幸近距离…

C语言--if...else语句【语法讲解】

一.if...else语句的介绍 if…else 语句是编程中常用的一种分支语句,用于根据条件执行不同的操作。 它的基本语法如下: if (条件表达式) {// 当条件表达式为真时执行的代码块 } else {// 当条件表达式为假时执行的代码块 } 当条件表达式为真时&#xff…

黑苹果找不到触控板_猫和老鼠手游:好友位不足却找不到人开黑?玩家给好友系统支招...

猫追鼠,鼠躲猫,欢乐互动乐逍遥,欢迎你来到猫和老鼠游戏学院第126期。随着开学季的到来,我们在游戏中会发现一个有趣的现象:任何时候打开自己的好友界面,里面都是灰色一片,不可否认这确实和玩家群…

java 三目算法_Java 中的三目运算符

写在前面:三目运算符是我们经常在代码中使用的,a (bnull?0:1); 这样一行代码可以代替一个 if-else,可以使代码变得清爽易读。但是,三目运算符也是有一定的语言规范的。在运用不恰当的时候会导致意想不到的问题。前段时间遇到(一个…

Serverless 的喧哗与骚动

戳蓝字“CSDN云计算”关注我们哦!导读:从 2016 年 AWS 发布 Lambda 以来,全世界的开发者和云厂商对 Serverless 的热情在不断高涨。假设不想在开发应用程序并将其部署在服务器上的过程细节上花费精力,是否有一种简单的架构模型能够…

2018年最佳深度学习书单

摘要: AI人才缺口巨大?如果你想成为AI革命中的一员,那么你就必须要学习深度学习,看看这12本书,它们将成为你的利器!我相信你应该知道人工智能,尤其是深度学习在过去5年左右取得了不错的进步。 深…