草庐IT

嵌入式软件开发新趋势:DevOps

zoeking001 2023-03-28 原文

一种新趋势正在全球嵌入式软件开发者之间悄然发生:小至家庭办公室,大至集团公司的尖端科研实验室,开发者们正在尝试新的改变——将“DevOps”实践到嵌入式软件开发中。

 

一些巧合促成了此次革新:同时期内云原生计算正在兴起,物联网设备和边缘技术正爆炸式发展,每时每刻都有数以亿计的嵌入式设备在全球各地不断地接入互联网,用一个新的方法去设计、测试、部署和维护这些设备的需求迫在眉睫。在此基础上,云原生计算引入了持续集成(Continuous integration,CI)和持续交付(Continuous delivery,CD)等方法来实现软件自动化的构建。

上述一系列的巧合在嵌入式软件领域引起了DevOps革命,不仅改变了嵌入式设备以往功能单一且孤立的属性,也改变了嵌入式软件修改性差、复用性低的现状。

 

发展是条漫漫长路:新思想的实践需要建立在安全的基础上

嵌入式软件开发者在项目构建的最初阶段,往往面临着巨大的困难:他们将不得不从头构建一套包含内核、分发版等软件的平台来开发新程序。不仅如此,后续的开发过程中,软件的每次改动都需要进行重新构建、测试和发布。为应对上述问题,传统的解决方式为:使用一个特定的版本控制基础架构团队、CI(Continuous Integration,持续集成)团队、QA(Quality Assurance,质量保证)团队——使三个团队同步工作,步调一致,以满足软件开发计划。

这种开发方式虽然能在一定程度上解决问题,但有着费时费力、成本昂贵等缺点,并不适用于当今的互联网、物联网和边缘设备。以消费品制造商(例如家用电器)为例,制造商并不具备频繁更新版本的充足资源,常规的消费品大类下,除了电脑和手机,消费者也不习惯频繁地更新设备。静态部署嵌入式软件的方式已不再适用于新型应用兴起与激增的当下。

除了开发方式外,安全问题也不容忽视。随着数以亿计的设备开始全时段接入互联网,对于在网络上有数百万个节点的公司来说,安全漏洞成为他们更大的关注点。公司需要持续监控所有的节点和设备,时刻维护并确保其24小时处于安全状态。

 

DevOps:嵌入式软件开发的革命

2008年多伦多敏捷会议,Patrick Debois初次介绍了“DevOps”一词,他被称为“DevOps教父”。DevOps的出现改变了云原生应用的部署方式,使软件可以被高效地频繁更新和部署,实现应用程序的不断升级。

▲Patrick Debois

 

当下的嵌入式设备已经开始应用DevOps完成嵌入式软件的自动化构建。对嵌入式软件生态而言,DevOps的引入为原先需要手动完成构建的公司提供了一个简化工作流的平台——可以使用一系列工具集或者平台来实现版本控制、持续交付和持续集成,既提升了工作效率,也方便对产品进行创新与拓展。

以航空业为例,60年前的飞机百分百都由航空公司自行制造,而其核心技术相差无几,低复用率带来了巨额损耗;技术不断革新的如今,仅波音公司和空客公司就几乎制造了全世界航空公司的所有飞机。当然,各家航空公司仍可基于独特的飞行体验、品牌化等需求定制自己的飞机,可核心技术的差异化设计依然难以实现。

引入DevOps的概念后,嵌入式软件开发者便可聚焦于定制产品,而不用在无差别无意义的基础构建上耗时耗力。这是嵌入式软件领域文化观念上的转变:直接在采购的、现成的机身基础上进行定制与创新。DevOps模型中还有分布式进行开发实践的观点,不同团队不同角色的成员可以在世界各地进行无缝协作。

2020年新型冠状病毒肆虐全球的背景下,DevOps的需求迅速增加。分布式开发的方式不仅没有消失,反而在技术开发中使用得更加普遍。尽管许多嵌入式软件开发人员仍在以上世纪的方式进行工作,但DevOps的普及只是时间问题,是不可阻挡的趋势。使用DevOps实践方法和平台,企业可以借助易用性强、复用性高的工具来实现云开发,减少软件构建的复杂流程,以便开发人员更聚焦于其应用程序的价值提升。

 

参考文献

参考链接:https://devops.com/how-devops-is-revolutionizing-embedded-development/

 

原文链接

https://mp.weixin.qq.com/s/mnL-PdffnwSxdw_JdMUwLg 

有关嵌入式软件开发新趋势:DevOps的更多相关文章

  1. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  2. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  3. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  4. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  5. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  6. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  7. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  8. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  9. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  10. ruby-on-rails - environment.rb 中设置的常量在开发模式中消失 - 2

    了解Rails缓存如何工作的人可以真正帮助我。这是嵌套在Rails::Initializer.runblock中的代码:config.after_initializedoSomeClass.const_set'SOME_CONST','SOME_VAL'end现在,如果我运行script/server并发出请求,一切都很好。然而,在我的Rails应用程序的第二个请求中,一切都因单元化常量错误而变得糟糕。在生产模式下,我可以成功发出第二个请求,这意味着常量仍然存在。我已通过将以上内容更改为以下内容来解决问题:config.after_initializedorequire'some_cl

随机推荐