草庐IT

人尽皆知的云原生,到底是大势所趋还是过度炒作?

敬 之 2023-04-15 原文

当今云原生可谓是如火如荼,起码在互联网领域它是人尽皆知,那么云原生到底是时代的大势所趋还是过度炒作概念呢?相信当你看完这篇文章,心里会有答案。

传统云平台 VS 云原生

要知道,在云原生之前,IT/互联网领域中也是存在着云平台的,即基于虚拟化的传统云平台,典型的有 Openstack 等。在传统方式下,如果说一个企业生产应用,需要部署 100 台应用实例,那么它就得准备 100 个虚拟机,然后再将代码部署上去,最后为应用构建高可用的方案。这样无论生产还是运维耗费精力无疑都是巨大的。

了解过云原生的都知道,有一个核心概念容器,而传统云平台与云原生之间必须要关注的少不了容器与虚拟机之间的区别

虚拟机即在宿主机/物理机的基础上装一个操作系统,操作系统之上部署 Hypervisor,由它再带起一个个承担应用的子系统。从这个层面来看它是很复杂的,如果系统出现了某些问题,我们需要去检测宿主机、虚拟机乃至 Hypervisor。

而且虚拟机是模拟完整的操作系统,这当然也包括了硬件驱动等等,资源需求很大,一个物理机可以开放的虚拟机是有限的。当我们要部署一个应用时,需要考虑该应用在并发高峰时可能需要需要多少资源,创建虚拟机时按照资源的最大需求进行设定,以防止虚拟机无法支撑应用。但在大部分时间内应用的资源需求并不会一直处于高峰,这就造成了资源利用率很低。

除此之外传统云平台其他各方面的缺陷也相当明显,诸如:

  • 业务代码与基础架构割裂
  • 虚拟机构建和业务代码相互分离
  • 基础架构后期维护风险大
  • 基础架构无法感知业务状态,升级维护困难
  • 缺少自动化
  • 需要自己构建应用的高可用方案
  • 扩容缩容难
  • 故障转移难

可见传统的云平台无论对于任何的操作、变更都是非常困难的,需要耗费大量的成本和人力。

而云原生正是为解决此问题而生,它鼓励在公有云、私有云、混合云等动态环境中构建和运行规模化应用,可以说云原生是一种思想,是技术和企业管理方法的总结。从技术层面来看:

  • 应用程序从设计之初就在为上云而做好了准备
  • 云平台基于自动化体系

云原生包含的核心技术栈有应用容器化封装服务网格不可变基础架构声明式 API 等。这些技术不仅提升了系统适应性、可管理性、可观察性,使开发者可以以最小成本进行频繁和可预测的系统变更,而且还可以提升部署维护速度和效率,助力业务的快速成长。

此外,在使用云原生之后,运维工程师和开发工程师也不会再那么界限清晰,因为大家面向的都是同样的 API。

传统下的企业开发、测试、运维都是相互割裂的状态,云原生则将企业开发和运维部门很好地结合起来。所提倡的DevOps理念打破了开发、测试、运维部门之间的隔阂,让整体的应用交付变得更快速。从技术角度看,DevOps 涵盖了应用的开发、编译、构建、测试、打包、发布的自动化流程,并包含了很多 DevOps 工具链。

云原生核心项目概览

云原生很复杂,它本身是一个很大的生态,包含着几十个甚至上百个项目。

这其中最重要的就是 Kubernetes,它主要的作用是集群管理(node)和作业调度(pod),作业调度之后, k8s 通过CSICNICRI将应用以容器的方式运行起来。

那么对外暴露什么样的服务?别人如何访问该服务呢?k8s 本身是通过 kube-proxy 去做东西向的流量的负载均衡和服务发现的, 他还包含了 CoreDNS 也就是集群内的域名服务器以及 Istio等集群服务管理软件。

而 k8s 中产生的数据则专存于分布式数据库etcd中。

云原生技术演进

云原生本身其实是为微服务而服务的,在应用架构上的演进由最开始的单体应用,到分层架构,到 SOA,再到当前流行的微服务。

每一个微服务都是一个独立的部署单元,比如说这几个微服务由这个团队负责,那几个微服务由那个团队负责,团队只需关注自己负责的业务即可,不会受全局的影响。微服务也有着启动速度快、资源需求小、部署灵活等诸多优点。

此外云原生也不断在朝着应用规模化计算边缘化部署多样化应用复杂化的趋势发展。

  • 应用规模化:从概念验证到大规模生产应用
  • 计算边缘化:以数据中心为主的云计算到面向边缘节点的边缘计算
  • 部署多样化:私有云和公有云混合的多云和混合云
  • 应用复杂化:简单的无状态应用到复杂的有状态应用管理

还有更重要的局部技术革新,如基于 XDP 和 eBPF 实现的网络加速和应用隔离、基于 WebAssembly 实现的个性化 proxy plugin、不断增强的安全保证手段等等。

相较于传统云平台,云原生有着得天独厚的诸多优势。毫不夸张的说,云原生是这个时代的产物,也必将会引领一个新的时代

那么你心目中的云原生是什么样的呢?

有关人尽皆知的云原生,到底是大势所趋还是过度炒作?的更多相关文章

  1. ruby-on-rails - Ruby 流量控制 : throw an exception, 返回 nil 还是让它失败? - 2

    我在思考流量控制的最佳实践。我应该走哪条路?1)不要检查任何东西并让程序失败(更清晰的代码,自然的错误消息):defself.fetch(feed_id)feed=Feed.find(feed_id)feed.fetchend2)通过返回nil静默失败(但是,“CleanCode”说,你永远不应该返回null):defself.fetch(feed_id)returnunlessfeed_idfeed=Feed.find(feed_id)returnunlessfeedfeed.fetchend3)抛出异常(因为不按id查找feed是异常的):defself.fetch(feed_id

  2. ruby - 使用哪个,eruby 还是 erb? - 2

    eruby和erb有什么区别?哪些考虑因素会促使我选择其中之一?我的应用程序正在为网络设备(路由器、负载平衡器、防火墙等)生成配置文件。我的计划是对配置文件进行模板化,在源文件中使用嵌入式ruby​​(通过eruby或erb)来执行诸如迭代生成路由器的所有接口(interface)配置block之类的操作(这些block都非常相似,仅在标签上有所不同和IP地址)。例如,我可能有这样一个配置模板文件:hostnamesample-routerlogging10.5.16.26当通过嵌入式ruby​​解释器(erb或eruby)运行时,会产生以下输出:hostnamesample-rout

  3. ruby - Ruby 中的 `&:capitalize` 到底是什么? - 2

    我刚读了这个答案Convertingupper-casestringintotitle-caseusingRuby.有如下一行代码"abc".split(/(\W)/).map(&:capitalize).join&:capitalize到底是什么?在我自己将它放入irb之前,我会告诉你,它不是有效的ruby​​语法。它必须是某种Proc对象,因为Array#map通常需要一个block。但事实并非如此。如果我单独将它放入irb,我会得到syntaxerror,unexpectedtAMPER。 最佳答案 foo(&a_proc_o

  4. 【云原生】SpringCloud-Spring Boot Starter使用测试 - 2

    目录SpringBootStarter是什么?以前传统的做法使用SpringBootStarter之后starter的理念:starter的实现: 创建SpringBootStarter步骤在idea新建一个starter项目、直接执行下一步即可生成项目。 在xml中加入如下配置文件:创建proterties类来保存配置信息创建业务类:创建AutoConfiguration测试如下:SpringBootStarter是什么? SpringBootStarter是在SpringBoot组件中被提出来的一种概念、简化了很多烦琐的配置、通过引入各种SpringBootStarter包可以快速搭建出一

  5. ruby-on-rails - Ruby on Rails - 参数是方法还是散列? - 2

    所以,我正在尝试RubyonRails指南的入门部分here.我不明白line在本教程中。引用它:Theparamsmethodistheobjectwhichrepresentstheparameters(orfields)cominginfromtheform.我以前确实有一些Rails方面的经验,而且我一直假设params是一个散列。但这里他们称之为方法,它是一个对象。params是方法还是哈希?还有,在ruby中,方法也是对象吗? 最佳答案 params是一个返回ActionController::Parameters对象的

  6. 适用于Web开发的Python还是Ruby? - 2

    Asitcurrentlystands,thisquestionisnotagoodfitforourQ&Aformat.Weexpectanswerstobesupportedbyfacts,references,orexpertise,butthisquestionwilllikelysolicitdebate,arguments,polling,orextendeddiscussion.Ifyoufeelthatthisquestioncanbeimprovedandpossiblyreopened,visitthehelpcenter提供指导。11年前关闭。我是一位精通HTML

  7. Ruby 命名空间与类还是模块? - 2

    考虑Ruby类Foo::Bar。惯例是将“Foo”命名空间作为一个模块,但它也可以很容易地作为一个类:moduleFoo;classBar;end;end对比:classFoo;classBar;end;end在第二种情况下,Bar不是Foo的内部类,它只是在Foo的单例上定义的另一个常量。在这两种情况下,父类(superclass)都是Object并且它们只包含Kernel模块。它们的祖先链是相同的。因此,除了您可以根据其类使用Foo进行的操作(如果是类则实例化,如果是模块则扩展/包含),命名空间的性质是否对有任何影响酒吧?是否有令人信服的理由选择其中一个名称间距而不是另一个?我看到

  8. ruby-on-rails - 在 Rails 4 中组织外部 API 调用 - 模块还是类? - 2

    我正在创建一个Rails应用程序,它将使用相当多的外部API,例如SalesForce、FolderGrid(如Dropbox)等,它们都会同步到我的数据库。我从来没有使用过外部api调用,所以我创建了一些基本的Ruby脚本和分散的方法来测试对这些资源的调用。现在我想用我的完整Rails应用程序来实现它们。到目前为止,我首先在我的/lib文件夹中创建一个目录来保存api调用模块/类。/lib/apis/foldergrid.rb现在我不确定组织代码的最佳方法是什么。在我的独立Ruby脚本中,我有用于身份验证、创建文件夹、审核文件、下载文件等的方法。模块中应该包含什么?我什至需要一个模块

  9. ruby-on-rails - EventMachine 和 Ruby 线程——这里到底发生了什么? - 2

    我们将Rails和EventMachine一起使用,当与Passenger一起使用该组合时,需要进行一些非常具体的设置。经过大量的试验和错误,我让EventMachine初始化工作得很好,但我想更好地理解代码。正如您在下面的代码片段中看到的那样,我们的初始化程序会检查乘客,然后在重新启动EventMachine之前检查它是否是fork进程。ifdefined?(PhusionPassenger)PhusionPassenger.on_event(:starting_worker_process)do|forked|#forpassenger,weneedtoavoidorphanedt

  10. ruby-on-rails - 我应该为这个网站应用程序使用 Rails 还是 Ruby?如何? - 2

    我对网络编程还很陌生(或者实际上,对网络编程很陌生,因为我上次弄乱网络是HTML1.1),但现在需要快速部署网络应用程序。似乎每次我转身,都有新的首字母缩略词和技术需要学习(JSON、XMLRPC、GWT、Javascript、Rails等)。这是我的应用必须执行的操作:给定用户名和密码,进行身份验证(很简单,显然一切都这样做)。允许用户上传大量数据进行处理。处理该数据。允许用户下载他们处理过的数据。我已经有了用于处理数据的Java脚本和数据库。在一台机器上,我可以运行一系列命令行程序来处理传入的数据block并将结果放回mysql数据库。这已经存在并且有效。我想为这个任务构建一个网络

随机推荐