草庐IT

云原生正在吞噬一切,开发者该如何应对?

《新程序员》编辑部 2024-04-07 原文

十年前,Netscape创始人、硅谷著名投资人马克·安德森(Marc Andreessen)预言“软件正在吞噬世界”;数年后,软件里90%以上的代码都是开源代码,“开源正在吞噬软件”;如今,“云原生吞噬开源”,开源项目正在向云化演进。

图1:云原生吞噬世界

然而在开发者社群、CSDN社区,时常有人心生这样的疑惑:云原生到底是什么?

本文内容摘录自《新程序员003》

什么是云原生?

带着读者的疑问,笔者翻阅了《新程序员003》,其中毕业于北京大学,阿里云容器服务技术专家,曾就职于IBM的郝树伟在《云原生的定义及其关键技术》一文中提到:云原生(Cloud Native)是一个组合词,“云”表示应用程序运行于分布式云环境中,“原生”表示应用程序在设计之初就充分考虑到了云平台的弹性和分布式特性,就是为云设计的。可见,云原生并不是简单地使用云平台运行现有的应用程序,而是一种能充分利用云计算优势对应用程序进行设计、实现、部署、交付和操作的应用架构方法。

云原生技术一直在不断地变化和发展,云原生的定义也在不断地迭代和更新,不同的社区组织或公司对云原生也有不同的理解和定义。

拥有20多年软件及互联网开发经验和技术管理经验、曾在硅谷LinkedIn、Yahoo、IBM三家企业就职,目前担任小米集团副总裁的崔宝秋博士认为:云原生是一种基于云计算的灵活性、可扩展性和弹性来构建并运行软件应用程序的理念和方法论。在云原生的理念中,所有应用在设计阶段就应该考虑如何在云计算的环境下以最佳的方式运行,以发挥云计算的弹性、高容错、自恢复和按需使用等优势。云原生的方法论中往往覆盖了微服务、容器、CI/CD、敏捷开发、DevOps等现代的软件开发技术和理念。

云原生=容器+K8s 吗?

在众多开发者的疑惑中,有不少人认为云原生就等于容器+K8s,甚至还有人认为,只是把应用搬到云上,就是云原生了?

对于云原生理解的种种误区,来自火山引擎的张鑫在《“原生云”时代的四个改变》一文中对常见的2个误区进行了解答:

1、Cloud Hosting=Cloud Native?

很多人将Cloud Hosting等同于Cloud Native,浅显地认为只要开了一个云账号、用云了就是云原生,还有人认为只要把应用搬到云上就是云原生。然而,很多情况下这些应用架构本身的生产方式并没有发生改变,仍然是过去传统的应用架构,只是生搬硬套到了云上,并没有真正发挥云原生的价值。

那么究竟什么才是云原生?有一个非常简单的区分方法:看它所定义的这个主语是谁。云原生的主语不应该是平台或者工具,即不是用容器和K8s搭建一个平台就是云原生,最关键的主语应该是业务和应用,要看是否充分把底层技术业务的能力向上传递至业务和应用侧。

2、云原生是IaaS还是PaaS?

传统的IaaS和PaaS在灵活性和管理性上总有一个不可调和的矛盾:IaaS产品可以提供极高的灵活性但管理难度很大,PaaS产品管理难度很小但灵活性较差。在这种局面下,云原生应运而生,它既不是IaaS也不是PaaS,却将两者做了很好的连接与融合,不仅自带了非常多的管理功能,还提供了丰富且底层的接口,使其具备极强的可扩展能力。

新程序员003》助力开发者乘风破浪

在厘清云原生的概念后,作为开发者,需要具备哪些知识与能力才能在开发范式大转移的时代,保留一席之地呢?

拥有20多年的互联网和金融架构从业经验,MegaEase创始人、前阿里云资深架构师、天猫开发总监、亚马逊高级研发经理、汤森路透基础架构师和高级研发经理陈皓(左耳朵耗子)在《新程序员003》中分享5大能力与知识点:

此外,《新程序员003》还诚邀 50 余位技术专家共同创作,是写给所有关注云原生开发者们的一本技术精选图书,助力开发者在云原生与数字化转移大趋势下乘风破浪,里面更包含了华为、阿里、字节跳动、网易、快手、微软、亚马逊、英特尔、西门子、施耐德等30多家知名公司的云原生和数字化一手实战经验。

扫描下方二维码即可立即购买

畅享电子书+精美纸质书

有关云原生正在吞噬一切,开发者该如何应对?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  4. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  5. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  6. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  7. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  8. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  9. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  10. ruby - 如何使用文字标量样式在 YAML 中转储字符串? - 2

    我有一大串格式化数据(例如JSON),我想使用Psychinruby​​同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解

随机推荐