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

这篇具有很好参考价值的文章主要介绍了云原生:从基本概念到实践,解析演进与现状。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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


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

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

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

本文仅用于简单普及,达到的目的是给没接触过或者很少接触过这方面的人一点感觉,阅读起来会比较轻松,作者深知短篇幅文章是不可能真正教会什么的,所以也不会出现 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,无论哪种,都会让你爽。

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

总结

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

结语

如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、评论、收藏➕关注,您的支持是我坚持写作最大的动力。文章来源地址https://www.toymoban.com/news/detail-446469.html

到了这里,关于云原生:从基本概念到实践,解析演进与现状的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch权威指南:深度解析搜索技术核心概念、原理及实践

    作者:禅与计算机程序设计艺术 2010年,当时仅仅30岁的Elasticsearch创始人黄文坚就率先发布了开源分布式搜索引擎Elasticsearch。从此, Elasticsearch 名扬天下,成为了当前搜索领域的翘楚。随着 Elasticsearch 的快速崛起,越来越多的人开始关注并应用 Elasticsearch 来进行搜索服务。

    2024年02月10日
    浏览(65)
  • 从方法论到最佳实践,深度解析企业云原生 DevSecOps 体系构建

    作者:匡大虎 安全一直是企业上云关注的核心问题。随着云原生对云计算基础设施和企业应用架构的重定义,传统的企业安全防护架构已经不能够满足新时期下的安全防护要求。为此企业安全人员需要针对云原生时代的安全挑战重新进行系统性的威胁分析并构建适合企业自身

    2024年01月25日
    浏览(76)
  • VPN入门教程:基本概念、使用方法及思科模拟器实践

    数据来源         本文仅用于信息安全的学习,请遵守相关法律法规,严禁用于非法途径。若观众因此作出任何危害网络安全的行为,后果自负,与本人无关。 VPN可以实现在不安全的网络上,安全的传输数据,类似专网 VPN只是一个技术,使用PKI技术,来保证数据的安全三

    2024年02月08日
    浏览(94)
  • Kafka核心设计与实践原理:设计理念、基本概念、主要功能与应用场景

    详细介绍Kafka作为分布式流式处理平台的设计理念、基本概念,以及其主要功能与应用场景,包括消息系统、容错的持久化、流式处理平台等功能,同时探讨如何保证消息的唯一性、消费顺序等问题。

    2024年02月22日
    浏览(48)
  • 决策树(Decision Tree)原理解析:从基本概念到建立模型

    决策树是一种常用的机器学习算法,用于解决分类和回归问题。它基于树形结构进行决策,通过一系列的分裂和判断条件来预测目标变量的值。本文将详细解析决策树的原理,从基本概念到建立模型的过程 决策树由节点和边组成,其中节点表示特征或属性,边表示特征的取值

    2024年02月10日
    浏览(48)
  • 解析Apache Kafka:在大数据体系中的基本概念和核心组件

    关联阅读博客文章:探讨在大数据体系中API的通信机制与工作原理 关联阅读博客文章:深入解析大数据体系中的ETL工作原理及常见组件 关联阅读博客文章:深度剖析:计算机集群在大数据体系中的关键角色和技术要点 关联阅读博客文章:深入理解HDFS工作原理:大数据存储和

    2024年04月10日
    浏览(61)
  • 浅析云原生时代的服务架构演进

    摘要: 相比于传统的微服务架构,云原生和 serverless 技术更加灵活、高效,能够更好地满足用户的需求。 本文分享自华为云社区《《凤凰架构》学习和思考——云原生时代的服务架构演进史》,作者:breakDawn。 随着云原生的概念越来越火,服务的架构应该如何发展和演进,

    2023年04月10日
    浏览(76)
  • 云原生演进中的AI算力高效使用

    0 1  云原生技术的普及与发展 云原生技术是一种基于容器技术的轻量级、高可用的应用架构,具有弹性扩展、快速部署、统一管理等特点。随着企业对敏捷开发和快速迭代的需求不断增加,云原生技术的普及与发展已成为不可逆转的趋势。 图1. 云原生技术发展之路 云原生技

    2024年01月19日
    浏览(42)
  • 【云原生】软件架构的演进以及各个架构的优缺点

    软件架构是指在设计和构建软件系统时,对系统的组织结构、组件、模块、接口以及它们之间的关系和行为进行规划和定义的过程。它描述了软件系统的整体结构和组成部分之间的关系,以及系统的行为和功能。 软件架构的演进大致可以分为: 单机架构 应用数据分离架构 应

    2024年02月11日
    浏览(46)
  • 从传统云架构到云原生生态体系架构的演进

    随着科技的不断发展,云计算领域也经历了巨大的变革。这一演进的核心焦点是从传统云架构过渡到云原生生态体系架构,这个过程在过去的几年里已经发生了显著变化。本文将深入探讨这一演进过程,以及它对企业和技术生态系统的影响。 在云计算兴起之初,虚拟化技术是

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包