云原生:从基本概念到实践,解析演进与现状

news2024/11/25 20:41:19

在这里插入图片描述

文章目录

    • 云原生:从基本概念到实践,解析演进与现状
    • 概念
    • 演进之路
      • Docker
      • Kubernetes
      • Cloud Native
      • Serverless
    • 业界现状
    • 总结
  • 结语

在这里插入图片描述

云原生:从基本概念到实践,解析演进与现状

在这里插入图片描述

本文仅用于简单普及,达到的目的是给没接触过或者很少接触过这方面的人一点感觉,阅读起来会比较轻松,作者深知短篇幅文章是不可能真正教会什么的,所以也不会出现 RTFM 的内容。

概念

提到云原生(Cloud Native)可能部分人会陌生,但是如果说 Serverless 相信很多人就知道了,实际上两者并不等价。Serverless 是一种理念或者服务交付形态,目标是屏蔽硬件和运维细节,而云原生则是实现此类目标的一种规范以及基础设施。

再进一步,介于 Docker 天然的隔离性和高效等特点,以及 Kubernetes 成为事实意义上的 Docker 编排标准,凡是见到云原生或者 Serverless 的地方,几乎都可以认为是基于 Docker + Kubernetes 的一种实践。

演进之路

单个点展开讲太枯燥,索性我们从历史的角度看看为什么会有云原生。

Docker

先申明下,Docker 是一种容器技术(具体可深入 namespaces 和 cgroups),而不是虚拟化技术,真正的虚拟化比较常见的是 Xen 和 KVM,可能有同学要举手了:老师,那我们经常用的 VirtualBox 和 VMware 算虚拟化么?当然算!不过大多数情况下,它们用在桌面虚拟化领域。不要急着撕,我说的是大多数,而且虚拟化方案也还有很多。

可能大家之前经常遇到这样的场景:为什么在我这可以运行在你那就不行了?为什么刚刚可以运行现在就不行了?最终解决下来,大多是环境不一致导致的问题。这里的环境除了开发环境还包括操作系统。

所以一般给别人代码的时候还需要告诉别人此代码可运行的操作系统版本,所依赖的各种软件的版本,甚至目录、磁盘、内存、CPU 都有要求!

当然这个问题还有更直接的办法,就是把代码跑在虚拟机里,然后打包虚拟机!(不要笑,实际上还真有人这么干)为什么此刻你笑了,因为虚拟机太重了,无论从打包的体积还是运行时占用的资源都太重了。

那有没有轻点的「虚拟机」呢?嗯,如标题,不过我们叫做容器化,特点:

  • 进程级别的隔离性;
  • 除里面运行的应用本身外几乎不占用宿主资源;
  • 结构化的配置文件(Dockerfile);
  • 无状态无副作用(主流方式);
  • 分层的联合文件系统;

Docker 让运行环境变得可编程!

拿一个最近部署 Sourcegraph 的经历举个栗子,官方有个开发者 清单,一堆依赖和环境设置,照着这个部署会爆炸的,好在官方还提供了可快速部署的镜像,就是这么简单:

图片

Kubernetes

太长,以下简称 K8S,类似的简称形式还有很多。

Docker 虽然很厉害,但是在成人看来也只是小孩的玩具,稍微大点的公司内部可能服务就多的吓人,特别是微服务架构盛行后。

Docker 只解决了单个服务的交付问题,一个具备完整形态的应用必然会涉及各种服务依赖,人为组织这些依赖也是会死人的。Docker 把我们从各种跟环境纠缠里解放出来,却让我们陷入了更高维度的服务依赖之间的纠缠。

是个 Docker 用户应该都会想到去解决这个问题,如你所愿,出现了三国争霸的局面:Docker Swarm、Apache Mesos 和 Google Kubernetes,一定程度上 K8S 成为了现在主流的 Docker 编排标准。有意思的是 K8S 有舵手之意,而 Docker 有集装箱之意,所以结合下是不是更合理了?

图片

更有意思的是,K8S 管理 Docker 的过程也是一层层抽象。为了解决一组密切相关容器集合的调度,K8S 的最小的调度单位是 Pod 而不是容器,同一个 Pod 里的容器的资源可以互相访问。为了管理发布、回滚、扩缩容,又在这之上抽象了一个 Deployment,实际上这是我们最直接使用的单元。为了管理负载均衡和调度,又抽象了一个叫 Service。

以上概念是 K8S 基本概念,不过我想强调的是这个:解决复杂问题很多都是在一层层抽象,这点展开还可以说很多东西。

K8S 做的比较极致的点就是以上所有资源的管理都是通过声明式的配置进行,K8S 把容器运维变得可编程!

Cloud Native

到这里,如果要直接在生产环境使用 K8S 基本也可以了,我们聊点别的吧。

都知道 Java 后端广泛采用的 Web 框架是 Spring MVC,那可是 02 年的老古董了!即使现在有了 Spring Boot,也可以算是一种升级,跟近几年百花齐放的前端三大框架比少了太多的口水仗。

百花齐放的原因很大一部分就是前端一开始就没有形成强有力的最佳实践!从工程化角度看,太多的重复轮子很容易导致工程的可维护性变差。Web 后端稳定性的特点不太能容忍这样的事情发生,推导到云上也一样。

云原生就是云的(或狭义指 K8S 的)最佳实践,生而为云,所谓云原生!

为了达到此目的,还有了 CNCF(云原生计算基金会),有了组织就靠谱多了。这个组织有一个收集(或孵化)了各种最佳实践的 云原生全景图谱。比如,一个比较有意思的叫 helm,作为 K8S 应用包管理器,它把一个 K8S 应用抽象成一个包,一键就可以部署一个应用,跟很多包管理器一样,它也有源 KubeApps Hub(甚至有阿里云提供的 国内源)。

Serverless

有了云原生,基本各种业务场景都可以找到适合的最佳实践,Serverless 就是其中一种。个人很不理解为什么这个词被翻译成:无服务器架构,Serverless 屏蔽的是运维,所以叫无运维架构更合适。迫于无法接受其中文翻译,文中还是用 Serverless。

你可能好奇,为啥这里要把 Serverless 单独拉出来说下,因为这是 CNCF 的宠儿啊!CNCF 范畴内太多项目了,但是大多还是偏硬,普通业务很难用上并落地,所以抓了个可以落地的当典型,还为其起草了个 白皮书,建议有兴趣的可以细品。

在说屏蔽运维之前,我们先回顾下运维一般包括哪些:

  • 服务器、网络、存储等物理资源(IaaS)申请;
  • 测试、发布、扩缩容;
  • 监控、日志;

要达到屏蔽运维大体就是无需关心以上点,目前业界主流形式有 BaaS 和 FaaS:

  • BaaS(Backend as a Service):此服务做法就是把常见的后端服务抽象出来,比如数据存储、文件存储、消息等,客户端使用这些服务时感觉就像在使用普通的 SDK/API。

图片

  • FaaS(Function as a Service):BaaS 只在大多数场景好使,某些特殊场景可能就比较麻烦,有些能力可能并没有提供,但是又必须要在后端写。完整关心整个后端代码框架并没必要,所以就可以抽象简单一个个 function 让用户去完成。目前 Google 采用的是 Knative,这里还有个其它方案的对比文章。

具体采用何种方式取决于业务形态,大体上就是用灵活性换方便度,给各种云服务一个灵活度排序:IaaS(各种云主机) > CaaS(Docker 等容器服务) > PaaS(BAE、SAE、GAE 等 APP Engine) > FaaS > BaaS > SaaS(各种 Web APP,如 Google Doc)。

图片

歪歪的云计算九层架构,深色的表示留给用户定制的,灵感来源

Serverless 为开发者提供了一种屏蔽运维又具备一定灵活度的云服务。

业界现状

本文只关心云原生相关产品,即 Docker/K8S 之上的产品,以下是部分主流产品:

  • K8S && CaaS

    • Google Kubernetes Engine
    • Google Cloud Run
    • Amazon EKS
    • Azure AKS
    • 阿里云容器服务
  • FaaS

    • Google Cloud Functions
    • AWS Lambda
    • ZEIT Now
    • 阿里云函数计算
  • BaaS

    • LeanCloud
  • BaaS + FaaS

    • 阿里云小程序云

有条件都可以体验下,我举两个切身的例子:

  • 除了大家见到很多公共云服务,还有很多服务是不适合放到公共云的,需要私有化部署。记得之前给某单位做项目,交付的时候过去装系统、装软件,还要各种现场联调,来来回回折腾很久。现在用 Docker + K8S 交付就非常轻松了,只需要有一套 K8S 集群,其它都 Docker 镜像打包带过去,一个配置文件轻松搞定编排!
  • 回想下你们做的系统,是不是很多几乎都没人用了,但是还是不能下线?是不是有的系统可能只有几个接口也要从申请机器到申请各种中间件走一遍流程?我们姑且称这些为长尾应用,这些应用是团队历史包袱变重的重要因素。如果采用 FaaS 或 BaaS 的方式做,你会发现新的人生,而与此相关的配套设施,业界主流的是 CLI 和 WebIDE,无论哪种,都会让你爽。

以上两个例子虽然只反应了业界一部分现状,可见一斑。

总结

本文简单介绍了云原生的一些基本概念,从演进角度解释了为什么会有云原生,本质就是抽象抽象再抽象,最后调研了国内外的主流现状,读到这希望你有点感觉了,进一步了解需要读者自行实践。

结语

如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、评论、收藏➕关注,您的支持是我坚持写作最大的动力。

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

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

相关文章

苹果手机无法开机?黑屏打不开怎么办?出现这种问题的解决办法分享!

各位在使用苹果手机的小伙伴有没有遇到苹果手机突然就黑屏开不了机,打电话也没有任何反应,手机也无法关机重启,这是什么问题呢?我们遇到这种问题该如何去处理呢? 小编今天就来跟大家说说苹果手机突然开不了机的原因以及…

【Linux命令】脚本里常用的几个命令

脚本里常用的命令 一、SORT命令1.1、语法格式1.2常用选项 二、uniq命令2.1命令格式2.2常用选项2.3小实验,过滤出现三次以上的IP地址 三、tr命令3.1语法格式3.2常用选项3.3实验 四、cut命令4.1语法格式4.2常用选项 五、split命令5.1语法格式5.2常用选项 六、eval七、…

在行 | “数智”为离散制造发展注入动能

在行业现场解析行业难题, 用主题方案创新数智价值。 制造业作为我国实体经济的主体,是国民经济体系的重要组成部分,其中以离散制造比重最大,是解决就业等民生问题的支柱。随着技术和经济水平的提升,市场对离散制造行业…

CnOpenData淘宝村淘宝镇名单数据

一、数据简介 随着电商的迅猛发展,以淘宝村为代表的新型城镇化不断推进。淘宝镇和淘宝村是电商巨头阿里巴巴推出的一系列支持中小企业、新创企业发展的计划,旨在为中小企业及创新企业提供融资、营销、培训、咨询等服务。截至2022年,全国涌现了…

创新案例 |探索 Tive 80% 的收入增长得益于智能物流服务、跟踪和实时可视化

您正在寻找可靠的物流解决方案吗? Tive 是领先的智能物流服务提供商,提供跟踪和实时可见性解决方案。使用 Tive,您可以主动监控公路、空运、海运和铁路运输。它可以帮助您减少运输问题并确保准时和全面交付,从而改善客户体验。 …

融合CDN和单CDN的产品对比

仅针对特定地理位置的公司可以使用单一CDN解决方案,建议网站内容在全球分发的优先选择融合CDN来进行加速。 如果您的网站内容/应用程序大多是静态的,那么单一CDN解决方案可能适合大多数市场需求;但如果您的流量高于平均水平,媒体流…

【表面缺陷检测】基于yolov5的钢板表面缺陷检测(附代码和数据集,Windows系统)

写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 路虽远,行则将至;事虽难,做则必成。只要有愚公移山的志气、滴水穿石的毅力,脚踏实地,埋头苦干,积跬步以至千里,就…

iPhone语音备忘录删除了怎么恢复?恢复备忘录,只需3个方法!

案例:语音备忘录被清空 【苹果语音备忘录有我很多会议记录,但是被我清理手机垃圾的时候顺便清理了。有什么方法恢复回来吗?】 很多人都知道,iphone语音备忘录是使用起来非常方便的一种记录方式,但是如何在不小心删除备…

Python之引用

1. 引用简介与工具引入 Python 中对于变量的处理与 C 语言有着很大的不同,Python 中的变量具有一个特殊的属性:identity,即“身份标识”。这种特殊的属性也在很多地方被称为“引用”。 为了更加清晰地说明引用相关的问题,我们首…

MySQL---多表联合查询(下)(内连接查询、外连接查询、子查询(ALL/ANY/SOME/IN/EXISTS关键字)、自关联查询)

1. 内连接查询 数据准备: use mydb3;-- 创建部门表 create table if not exists dept3(deptno varchar(20) primary key , -- 部门号name varchar(20) -- 部门名字 );-- 创建员工表 create table if not exists emp3(eid varchar(20) primary key , -- 员工编号e…

代表Java未来的ZGC深度剖析

JAVA程序最爽的地方是它的GC机制,开发人员不需要关注内存申请和回收问题。同时,JAVA程序最头疼的地方也是它的GC机制,因为掌握JVM和GC调优是一件非常困难的事情。在ParallelOldGC、CMS、G1之后,JDK11带来的全新的「ZGC」为我们解决…

css中常用伪类表单验证:invalid、:valid、:required、以及:not 、:lang、:empty的使用

MDN文档关于伪类的相关介绍 1、 :invalid :invalid 是 CSS 伪类选择器&#xff0c;用来选择任何未通过验证的 <form>、<fieldset>、<input> 或其他表单元素。 <form class"form"><label for"email">邮箱地址:</label>…

Sqlite3 生成lib库文件

特此记录&#xff01; QT使用SQL一般有两种方式 No1&#xff0c;使用Qt内部的Sql模块 No2&#xff0c;不通过Qt的Sql模块&#xff0c;直接使用Sqlite的lib库&#xff0c;使用Sqlite的标准C/C接口就行 接下来主要针对第二种。 第一步&#xff0c;进入官网 SQLite Download P…

Google Play应用广告该如何运作

Google 应用广告是一种付费广告渠道&#xff0c;可以帮助我们把应用推向特定的目标受众。比如可以使用应用安装广告&#xff0c;用来吸引用户安装我们的应用&#xff0c;我们可以选择手动设置出价和定位&#xff0c;或使用 Google Ads 自动设置目标和出价。 Google 在创建和投…

unity3D 魔兽争霸游戏开发案例教程

文章连载更新中&#xff0c;可以提前领取素材进行预习&#xff0c;自学 素材领取&#xff1a;私信发送 领取RPG网络开发教材 这里写目录标题 游戏玩法这门课适合哪些人学习学完了能达到什么效果项目准备基础系统战斗系统同步设计精讲社交系统副本系统优化项目准备正文美术准备&…

给k8s集群添加负载均衡的能力

常识: k8s没有自带负载均衡能力, 需云服务提供商来做负载均衡, 或者自己装负载均衡控制器. 负载均衡控制器有很多, 这次装Ingress-Nginx https://kubernetes.github.io/ingress-nginx/ 文档里根据环境有很多安装方式,不要用quick start的,因为那是云环境下的. 我们的k8s是自己的…

微信小程序商品分类页最佳实践

首先我们来分析下UI小妹发来的产品原型图&#xff1a; 微信小程序商品分类页需要实现 1.单击左边的商品类目&#xff0c;右侧实现联动跳转到对应商品类目标题&#xff1b; 2.触屏拖动右侧商品列表&#xff0c;右侧跳转到对应商品类目&#xff1b; 2.分析需求我们可以把屏幕分…

使用阿里云服务器三分钟搭建网站教程(详细图文详解)

使用阿里云服务器快速搭建网站教程&#xff0c;先为云服务器安装宝塔面板&#xff0c;然后在宝塔面板上新建站点&#xff0c;阿里云服务器网以搭建WordPress网站博客为例&#xff0c;来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流程&#xff1a; …

5月编程排行榜出炉,最佳编程语言是谁?

技术的发展日新月异&#xff0c;作为开发者&#xff0c;应该时刻关注这些变化&#xff0c;不断学习才能跟上时代步伐。 编程语言层出不穷&#xff0c;关于“ 最佳编程语言 ”的争论也从未停止&#xff0c;网友们各抒己见...... 网友A&#xff1a; 人生苦短&#xff0c;我选Pyt…

我做了一个 VSCode 插件版的 ChatGPT

大家好&#xff0c;我是风筝&#xff0c;公众号&#xff1a;「古时的风筝」 其实很早之前就想学学 VSCode 插件开发了&#xff0c;但是又不知道做什么&#xff0c;加上我这半吊子前端水平&#xff0c;迟迟没有动手。 最近 ChatGPT 火的一塌糊涂&#xff0c;我也一直在用&#…