内部开发者平台(IDP)是近年来在希望加快软件交付和改善开发者体验的企业中得到普及的一个概念。然而,大众对于什么是 IDP 以及它能为开发者和企业带来什么也有很多困惑和误解。在这篇文章中,我们将尝试解开一些关于平台工程以及 IDP 的常见误解,以及关于企业该如何避免进入这些误区给出一些建议。
之前我们了解过 IDP 和平台工程的基本概念。IDP 实际上是一套标准化的工具和技术,能够实现开发人员的自我服务,为他们在日常工作中创建和部署符合要求的代码提供便利的途径。IDP 抽象了底层基础设施的复杂性,并与现有的 CI/CD 和部署流程相结合,使开发人员能够专注于他们的代码和业务逻辑。在本文中,我们总结了关于 IDP 的五大误区。
有些人可能会简单地认为 IDP 仅仅是一个开发者常用的工具集合,帮助开发者们去执行各类任务,例如版本控制、测试、CI/CD、监控等等。实际上,IDP 的用处远不止这些,IDP 不仅仅是一个工具链,它更是一个以无缝和连贯的方式整合这些工具的产品,同时为开发者提供清晰的界面和工作流程。
当然,IDP 并不是完美适配一切公司的万能解决方案。各个企业的堆栈、文化、代码库和工具集都会因业务内容有所区别,因此企业及开发者需要根据自身的需求和偏好对 IDP 进行定制。例如,有一些企业更偏向于使用 Kubernetes 作为他们的协调层,而其他企业则倾向于选择不同的解决方案。IDP 还应当允许企业在保持定制和可拓展性的同时,仍然保持一致性和操作的简便性。
在之前我们提到过,当企业拥有复杂和分布式系统、多个团队和环境,并对可拓展性和可靠性有高要求,构建 IDP 能够使这些大型组织受益。但这里并不是说只有大型企业才能使用 IDP,相反,任何旨在提高软件交付速度、效率和质量的企业都可以构建自己的 IDP 并从中受益。
IDP 同样可以有效帮助中小型企业组织,让他们从最开始就采用最佳实践和标准,而不必在建立和维护自己的基础设施和工具方面投入过多的时间和资源。IDP 可以通过自动化重复性任务和减少人工错误来降低 DevOps 团队的操作负荷。这样 DevOps 团队就可以专注于建设和维护平台,而不是花费大量时间来回应和解决来自开发人员的 tickets 和 requests。同时,IDP 通过提供一个简单和一致的界面来访问平台的功能,有效改善开发者体验。开发人员可以进行自我服务,在不用了解复杂的工具链和配置的情况下运行他们的应用程序。最重要的是,IDP 能够允许开发人员使用平台上的功能尝试和实验新的想法,测试不同场景,并进行相应优化,从而提高软件产品的创新程度和价值。
我们想聊的关于 IDP 的另一个认知误区是,人们认为 IDP 能够解决开发者在日常工作中面临的所有问题和挑战。现实是,IDP 只是一个帮助开发者高效工作的平台,为开发者提供一个标准化过程、可靠的平台和一个具有支持性的环境,但它并不是一个无所不能的万能解决方案。
直白地讲,IDP 无法消除开发者沟通、协作、反馈、学习、测试或创新的需要。也就是无论企业是否拥有 IDP,开发人员始终需要与其他团队及他们的客户进行交流。开发人员需要了解他们的业务领域、技术领域、用户需求等,开发者还是得编写代码,然后进行测试、调试、监控和改进。
另一个关于 IDP 的误解是 IDP 可以保证应用程序的构建或部署完美无缺。
事实上构建软件、系统和平台是十分复杂的过程。构建是将源代码打包成应用程序工件的过程,构建可能由于各种原因而失败,例如语法错误、缺少依赖项、不兼容的版本或配置。而部署是将应用程序构件从暂存环境转移到生产环境的过程,部署也会由于各种原因失败,例如网络问题、配置错误、资源限制、安全漏洞或性能问题。
在这个过程中有各种范式和技术需要采用,工程师们需要进行大量的筛选和选择。而在构建或部署的过程中,开发人员还需要根据业务内容需求和调整学习新的东西。因此,即便拥有 IDP,企业在构建和部署应用程序时需要测试、监控和故障排除,以确保构建和部署的质量和可靠性。同时,拥有 IDP 也依旧需要在进行部署时考虑对用户和客户的影响。企业仍然需要遵循持续集成、持续交付和按需发布的最佳实践。
最后一个误解是大家想当然地认为平台的访问是绝对安全的,符合企业的所有政策和法规。然而安全性和合规性并不是静态的概念或一次性的要求,恰恰相反,安全和合规是动态且持续的过程,需要企业不断地跟进、适应并相应调整。结合企业内部和外部因素,安全威胁及合规要求可能随时发生变化。
因此企业的 IDP 需要有一个强大的安全态势和合规性框架,涵盖平台生命周期的方方面面,例如认证、授权、加密、审计、日志、监控、报告等。同时 IDP 应当遵循安全最佳实践和标准,比如最小权限原则、深度防御策略及安全设计方法等。与此同时,企业需要定期对 IDP 进行更新和修补,预防潜在的漏洞和风险带来的安全威胁。
那么企业应当如何避免陷入 IDP 认知误区以更好地利用其优势呢?这里我们总结了三个要点供企业参考。
IDP 不仅仅是一个技术项目,而是一个为企业开发人员提供服务的产品。因此,在建立和运行 IDP 时,企业需要采用产品的思路心态。在构建 IDP 时,建议企业考虑并尝试做到:
需要尽可能去了解内部开发者的需求、期望、偏好和反馈。
在设计 IDP 时以用户为中心,同时考虑到 IDP 可用性、可及性和使用简易性。
以敏捷性、质量、可靠性和安全性为前提来交付 IDP。
通过数据驱动的洞察力、实验和创新来改进企业的 IDP。
采用产品思维将会助力企业创建一个实用且有价值的 IDP,为开发人员解决实际问题,为企业提供价值,并以良好的开发人员体验更好地服务于企业用户。
这里我们需要明白 IDP 并不是企业为开发者建立的平台,而是企业和开发者共同建立的。因此,企业需要让开发者们尽早并积极参与到 IDP 建设项目中,并尝试做到:
尽早和经常地让企业的开发人员参与进来,有助于企业与开发者们建立信任关系,这样能够更好地了解他们的需求和期望,确保他们对 IDP 的采用度和满意度,从而培养合作和创新的文化氛围。
一个好的 IDP 应该抽象出底层工具和技术的复杂性和操作。当然,这并不意味开发人员可以对底层工具和技术一无所知。企业在建立和使用 IDP 时,需要对底层技术与工具的抽象和透明度进行平衡。具体来说就是:
平衡好抽象和透明度能够帮助企业更好地构建 IDP,从而为开发者们提供充足的背景信息和知识,有效降低开发人员的认知负荷,这样开发人员就可以更高效地构建高质量的软件。
IDP 是一个强大的工具,它可以帮助企业通过简化应用开发流程,更快更有效地交付数字产品。但是如果企业带着对 IDP 的认知误区和误解,可能会大大降低其采用的效果,因为这些误区往往会导致企业产生不切实际的期望、作出错误的决定、最终浪费资源或错过商业机会。为了避免这些误区,企业需要充分了解 IDP 的真正性质和价值,以及最佳实践。
https://sdtimes.com/softwaredev/the-eight-fallacies-of-your-internal-developer-platform/
https://www.infoworld.com/article/3611369/how-to-build-an-internal-developer-platform-from-those-who-have-done-it.html

目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类
我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?
我在Ruby中遇到了一个关于Dir[]和File.join()的简单程序,blobs_dir='/path/to/dir'Dir[File.join(blobs_dir,"**","*")].eachdo|file|FileUtils.rm_rf(file)ifFile.symlink?(file)我有两个困惑:首先,File.join(@blobs_dir,"**","*")中的第二个和第三个参数是什么意思?其次,Dir[]在Ruby中有什么用?我只知道它等价于Dir.glob(),但是,我对Dir.glob()确实不是很清楚。 最佳答案
1.回顾.TransportServicepublicclassTransportServiceextendsAbstractLifecycleComponentTransportService:方法:1publicfinalTextendsTransportResponse>voidsendRequest(finalTransport.Connectionconnection,finalStringaction,finalTransportRequestrequest,finalTransportRequestOptionsoptions,TransportResponseHandlerT>
目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'
我是Ruby的新手,但过去两周我一直在对Chef测试进行大量研究。该测试使用ChefSpec和Fauxhai,但它看起来不是很“像ruby”,我希望社区能给我一些编码风格的建议。有没有更好的方法来编写这样的嵌套循环?Recipe/foo/recipes/default.rbpackage"foo"doaction:installendRecipe/foo/spec/default_spec.rbrequire'chefspec'describe'foo::default'doplatforms={"debian"=>['6.0.5'],"ubuntu"=>['12.04','10.04
假设一个使用类变量的简单ruby程序,classHolder@@var=99defHolder.var=(val)@@var=valenddefvar@@varendend@@var="toplevelvariable"a=Holder.newputsa.var我猜结果应该是99,但输出不是99。我想知道为什么。由于类变量的范围是类,我假设@@var="toplevelvariable"行不会影响类中的变量。 最佳答案 @@var是Holder的类变量。而顶层的@@var不是Holder的同名类变量@@var,是你在创建类Obj
一文解决关于VLAN所有的疑惑VLAN基本概念为什么需要VLAN?怎么在交换机上划分VLAN,VLAN的工作原理有了子网,已经隔离了广播,还需要VLAN干啥?只进行子网划分,不进行VLAN划分VLAN划分与子网划分附加VLAN信息的方法VLAN划分交换机的端口类型(Access和Trunk)一、访问链接二、汇聚链接汇聚链接VLAN间通信为什么要进行VLAN间通信?路由器实现VLAN间通信路由器和交换机的连接方式通信细节三层交换机实现VLAN间通信加速VLAN间通信三层交换机与路由器三层交换机路由器路由器和交换机配合构建LAN的实例使用VLAN设计局域网的特点VLAN增加网络的灵活性不使用VLA
我正在尝试了解CoffeeScript变量的范围。根据文档:ThisbehavioriseffectivelyidenticaltoRuby'sscopeforlocalvariables.但是,我发现它的工作方式不同。在CoffeeScript中a=1changeValue=->a=3changeValue()console.log"a:#{a}"#Thisdisplays3在ruby中a=1deffa=3endputsa#Thisdisplays1有人能解释一下吗? 最佳答案 Ruby的局部变量(以[a-z_]开头)arerea