内部开发者平台|企业是否应当自建?

随着企业越来越依赖软件开发来推动创新并保持竞争优势,建立一个高效协作的内部开发者平台变得尤为重要。内部开发者平台(Internal Developer Platform,IDP)作为一个中心枢纽,开发人员可以在其中获取工具、资源和基础设施,以简化开发流程。然而,企业在建立 IDP 时面临一个关键决策:是在企业内部自行构建一个定制平台还是购买现成的解决方案。在本文中,我们将深入探讨这个决策的复杂性,探讨与两种选择相关的优势、挑战和考虑因素。
 

企业自建 IDP

自行构建内部开发平台可以让企业完全掌控开发过程,使其精确符合企业的独特需求。企业可以创建与现有基础设施、开发方法论和业务目标完全契合的平台。这种定制水平确保开发团队能够高效地工作,最大程度地提高生产力。自建 IDP 的好处我们可以总结为以下四点。
 

定制化解决方案

在内部构建 IDP 为企业提供了根据其特定需求和工作流程设计平台的机会。这种定制化确保平台满足开发团队的独特需求,优化生产力、协作和开发人员满意度。它允许包含专门工具、专有技术和内部流程,这些可能在现成解决方案中不可用。
 

拥有及控制权

内部开发 IDP 使企业完全拥有和控制该平台。这种控制权延伸到平台的路线图、功能开发和整体方向。公司可以根据自身不断变化的需求进行调整和增强IDP,而无需依赖外部供应商。此外,构建IDP提供了将平台与企业的战略目标紧密对齐的机会,确保其成为公司开发文化的重要组成部分。
 

成本考虑

虽然自建 IDP 可能涉及较高的前期成本,但从长期来看,与购买平台相关的持续订阅费用相比,其财务影响可能是积极的。此外,企业可以根据自身预算优先级分配资源,并更好地控制持续维护和基础设施成本。
 

竞争差异化在快速发展的市场中,创新和差异化至关重要。自建定制 IDP 可以通过开发专有工具、简化流程和提供卓越的开发人员体验,提供独特的竞争优势。通过将平台与的愿景和目标紧密对齐,企业可以在竞争对手中脱颖而出,培养创新文化。
 

一些行业内领先的公司通过构建自己的 IDP 来更快更好地交付软件,以下是一些平台工程的例子:

  • Netflix:Netflix 也拥有一套自建的开发者平台控制台,旨在解决开发者在日常工作流中面临的主要碎片化挑战,例如管理多个服务和软件、发现平台工具和文档、以及在不同工具之间切换上下文。该控制台将开发者使用的数十种服务和工具整合到一个简单易用的界面中,例如 Bitbucket、Spinnaker、Jenkins 以及内部的告警和度量工具。
  • Shopify:Shopify 的开发者平台提供了一套完整的为商业而设计的 API、原语和工具。它提供了 GraphQL 和 REST 的 API,基于 React 的框架和组件库,用于加速商店前端的开发,以及一些商业原语,用于构建订阅计划、B2B 销售、国际扩张等功能。平台还包括了 Shopify CLI,用于构建、测试和管理集成,以及一些现成的 UI 组件,以加速开发。
  • Spotify:Spotify 的内部开发者平台是 Backstage,在此平台上,Spotify 的开发人员可以在其微服务架构中创建、管理和发现软件组件。Backstage 为开发者提供了一个统一的接口,可以访问各种工具和服务,例如软件模板、文档、CI/CD 状态、Kubernetes 监控等。
     

通过自行构建平台,企业能够灵活地将其与现有系统和工具无缝集成。这使现有的投资和基础设施得到有效利用,最大程度地减少中断,并降低开发团队的学习曲线。此外,自行构建平台可以在企业内部培养所有权感和合作精神。开发团队可以积极参与塑造平台,推动创新并共享他们的专业知识,不断改进平台的功能。
 

购买现成的 IDP

构建内部开发平台需要大量的时间、资源和专业知识。它涉及大量的开发工作和持续维护,这对企业的 IT 团队有着极高的要求,并给其构成巨大负担。如果企业组织缺乏开发此类平台的经验,该过程还可能会造成业务中断或延迟等问题。这也是为何目前只有一些领先的大型企业才倾向选择自建 IDP。
 

而通过购买 IDP,企业可以直接获得一个涵盖了 IDP 所有方面和完备功能的平台,从而节省大量的时间和精力。同时 IDP 供应商能够为企业提供相关专业知识、支持和创新,为企业处理平台的技术复杂性和维护,从而使企业从中获益。企业也因此可以更多地关注核心业务目标和价值。这里我们将从外部购买 IDP 的优势列为以下几点。
 

快速部署和实现价值

购买 IDP 的主要优势之一是能够快速部署平台并加速实现价值。现成解决方案通常经过开发和优化,以满足各种开发人员需求。通过使用现成的解决方案,避开自行构建所需的耗时开发和测试阶段,企业可以快速实施平台。这对于具有有限开发专业知识和时间紧迫的企业来说尤为有益。
 

专业知识和支持

选择现成的 IDP,企业可以利用供应商的专业知识,依赖供应商提供的维护和更新来解决潜在的漏洞和错误,从而消除了从零开始构建平台所带来的风险。IDP 供应商对开发人员领域、最佳实践和不断变化的趋势有深入了解。他们可以提供全面的技术支持、定期更新和帮助解决可能出现的任何问题,确保开发人员的顺畅体验。
 

行业最佳实践

商业 IDP 相较于自研平台更加成熟,因为 IDP 供应商具有行业最佳实践和经得起验证的记录,这些经验来自于与各种企业组织的合作总结和沉淀而来。通过采用现成的平台,企业可以借鉴这些丰富的知识,获取优化的工作流程、开发模式和安全标准,从而显著提高软件开发过程的效率和质量。企业也可以从供应商的经验和专业知识中获益,获得丰富的功能、最佳实践和持续支持。
 

可扩展性和灵活性

购买 IDP 的另一个优势是可扩展性。从小型创业公司到大型企业,商业解决方案设计用于满足各种企业的需求。现成的 IDP 通常提供灵活性,可以定制、集成和扩展,使企业能够根据自身需求调整 IDP,而无需从零开始。强大的可扩展性功能,使企业能够随着业务的增长扩展软件开发能力。此外,现成的 IDP 能够与企业的技术栈中其他工具无缝集成,促进更流畅的工作流程,提高生产力。这种可扩展性和灵活性对于快速增长的企业或需求变动大的企业来说尤为有利。
 

总结

购买还是自建内部开发者平台是一个复杂的决策,需要仔细考虑各种因素,如实现时间、定制需求、可扩展性和控制权。虽然购买现成解决方案提供快速部署、行业专业知识和支持,自建 IDP 则提供定制化解决方案、所有权和竞争差异化。最终,企业必须评估其具体需求、可用资源和长期战略目标,以做出明智的决策,最好地为其开发团队服务,并推动创新发展。

本文转载于网络 如有侵权请联系删除

相关文章

  • 3分钟短文:Laravel路由注册,你必须掌握的“动词”!

    引言无论是web页面还是API接口,我们都绕不开的是路由地址,网络资源定位也只能依赖于路由地址,它是衔接网络请求与应用程序的桥梁。本期为大家说一说用laravel注册路由的那些必知必会的方法。代码时间遵循编程惯例,首先实现一个helloworld的示例。在路由文件routes/web.php内注册一个get请求的路径://routes/web.php Route::get('/',function(){ return'Hello,World!'; });复制web服务器配置正确后,我们就可以通过http://www.example.com/这个路由地址直达该路由。因为路由内传入了一个闭包,那么匿名函数的返回值,就会直接返回给response,并显示到页面上。大家注意,get这个静态方法,是一个动词,声明了该请求的方式是GET请求。同样地,我们可以注册更多的类似路由,在路由文件内注册更多的地址:Route::get('/',function(){ returnview('welcome'); }); Rou

  • java中的Set集合

    大家好,又见面了,我是你们的朋友全栈君。概述 Set集合类似于一个罐子,程序可以依次把多个对象“丢进”Set集合,而Set集合通常不能记住元素的添加顺序。实际上Set就是Collection只是行为略有不同(Set不允许包含重复元素)。 Set集合不允许包含相同的元素,如果试图把两个相同元素加入同一个Set集合中,则添加操作失败,add()方法返回false,且新元素不会被加入。HashSet类HashSet是Set接口的典型实现,大多数时候使用Set集合时就是使用这个实现类。HashSet按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能。底层数据结构是哈希表。 哈希表 一个元素为链表的数组,综合了数组与链表的优点。HashSet具有以下特点:不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也可能发生变化;HashSet不是同步的;集合元素值可以是null;内部存储机制当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode方法来得到该对象的hashCode值,然后根据该hashCode值决定该对象在HashSet中的存储位置。如果有两个元

  • 这些绘图细节(字体、线类型、标记等)让你的论文配图耳目一新

    今天这篇推文,小编就对Python-matplotlib的一些基本绘图样式(字体、线类型、标记等)进行汇总统计,希望对小伙伴们有所帮助。主要内容如下: matplotlib-字体属性(fontproperties)汇总matplotlib-横线类型(linestyle)汇总matplotlib-标记样式(Marker)汇总matplotlib-FontProperties这里对字体的操作只是对其斜体、粗字等属性的更改,主要从样式、粗细程度、大小。详细如下:font-style:normal(正常),italic(斜体),oblique(倾斜的字体)font-weight:light(细),normal(正常),medium(中等),semibold(半粗),bold(粗),heavy(特粗),black(黑)font-size:xx-small(最小),x-small(较小),small(小),medium(正常(默认值)),large(大),x-large(较大),xx-large(最大)下面小编通过可视化效果展示matplotlib的字体变化:frommatplotlib.font

  • 介绍一款 API 敏捷开发工具

    初衷特性传统开发步骤:演示说明初衷 用尽可能简单的方式,完成尽可能多的需求。通过约定的方式实现统一的标准。告别加班,拒绝重复劳动,远离搬砖特性用于快速开发API接口。不再定义Controller,Service,Dao,Mybatis,xml,Entity,VO等对象和方法.可视化界面,将入参自动封装到可执行的脚本上,支持所有关系性数据库SQL执行语句,非关系型MONGODB查询语句.欢迎扩展完全基于springboot2.x作为springboot项目的stater方式集成,无侵入性,新老项目都能快速集成只需编写一行代码即可完成大部分的业务需求开发,使用难度级别(测试or运维)也可参与开发在线动态编译,无需重启,即时生效,多数据源操作版本控制,历史记录比对,回滚等功能远程一键发布到线上环境线上POSTMAN调试,保存POSTMAN信息或三方文档的自动生成,历史调用记录存储,回塑代码提示,SQL提示,语法提示用户管理控制,安全性控制,以及历史行为记录经过多次项目验证,传统业务型开发,服务端效率能够提升3-5倍,前后端联调提升效率1倍,测试效率2倍提升传统开发步骤:增加一张表创建实体对象

  • 有这种好事?腾讯云 Serverless 免费学,还能拿奖!

    用极致体验,写高质应用。不少开发者应该已经知道,Serverless能让开发者更专注构建和运行应用,而无需管理服务器。在以往,如果你想将应用程序上线,一般得提前了解它究竟需要多少台服务器、多大的存储量和数据库等。现在,Serverless让开发更便捷!如果你尚未尝试Serverless开发,那么机会来了——不仅能免费学习Serverless,还有福利拿!参与方式:即日起至2020/12/1324时,成功部署基于腾讯云Serverless的任一函数应用,并将部署成功的截图及相关信息提交至下方链接,即有机会获取礼品!https://wj.qq.com/s2/7635274/4b15复制奖项设置:成功部署并提交的开发者可获得价值50元云函数代金券前30位提交应用的开发者可获得参与奖:Serverless纪念贴纸活动抽1人,赢Serverless限量文创周边-参与者需使用腾讯云实名认证主账户,保证代码部署在该账户上; -每位用户仅可使用一个本人合法拥有的腾讯云账号参与该活动一次; -未使用过Serverless部署应用的腾讯云企业用户和个人用户均可参与,大客户、代理商、代客、协作者请期待其他活

  • 图像处理之目标检测的入门总结

    1背景介绍目标检测,objectdetection,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。目标检测要解决的问题有两个:物体在哪里,物体是什么的整个流程问题。 目标检测问题的难点:物体的尺寸变化范围很大;摆放物体的角度,姿态不定;而且可以出现在图片的任何地方;物体还可以是多个类别。目前主要算法分两类:1)候选区域/框+深度学习分类;2)基于深度学习的回归方法目标检测中有很大一部分工作是做图像分类。对于图像分类,不得不提的是2012年ImageNet大规模视觉识别挑战赛(ILSVRC)上,机器学习泰斗GeoffreyHinton教授带领学生Krizhevsky使用卷积神经网络将ILSVRC分类任务的Top-5error降低到了15.3%,而使用传统方法的第二名top-5error高达26.2%。此后,卷积神经网络CNN占据了图像分类任务的绝对统治地位。2候选区域+深度学习通过提取候选区域,并对相应区域进行以深度学习方法为主的分类的方案,如:2.1R-CNN(SelectiveSearch+CNN+SVM)先找出图中目标可能出现的位置,即候选区域(RegionPropo

  • 人类准备好应对疫情的爆发了么?2015年Bill Gates在TEDs的演讲

    未来10年或更多年,真正成为全人类的最重大威胁的,可能不是核战争,因为多年以来人类对此极为重视并做好相应的应对,如核不扩散条约,确保相互毁灭的恐怖均衡,世界各国的努力等。相反,比如1918年的所谓“西班牙流感”,以及埃博拉病毒,SARS,MERS,H1N1,COVID-19等。人类社会一次次的遭受重创,而全球和各国政府似乎仍旧没有行动起来,采取全球化的应对。2015年盖茨就极具预见性,并不幸言中。而中国,正在做正确的事情。 以下为视频内容-

  • 字符串转表达式

    1.模板表达式模板:构造表达式对象解析表达式并存储数据(表达式的符号、数值抽象成函数)http://blog.csdn.net/magisu/article/details/12964911(表达式模板)模板参数:类型参数,非类型参数(变量对象初始化需要),模版参数(模板嵌套)http://blog.csdn.net/pcliuguangtao/article/details/6449804(模板)http://www.cnblogs.com/gw811/archive/2012/10/25/2738929.html(模板)http://m.blog.csdn.net/blog/hongjiqin/4924893(模板特化,相当于重载特殊的类型模板)模板实现多态:http://blog.csdn.net/my_business/article/details/12194691(静态模板)http://blog.sina.com.cn/s/blog_48d4cf2d0100nd3h.html(Strategy模式)2.宏替换#、#@、##宏定义函数,实现字符转和变量的组合#definea

  • UI篇-关于单个页面屏幕旋转要注意的问题

    前言有时候,我们会需要在整个项目中,使某一个ViewController支持屏幕旋转,而其他的ViewController并不能自动旋转。这是一个很常见的需求,下面就屏幕旋转相关问题做个小结。强制页面旋转(假的屏幕旋转)最多见的是,视屏播放中的横屏模式,点击全屏按钮,播放页面横屏最大化。使用 CGAffineTransformMakeRotation旋转操作配合动画即可。-(void)fullScreenClick:(UIButton*)btn{ btn.selected=!btn.selected; if(btn.selected){ self.mySuperView=self.superview; [UIViewanimateWithDuration:0.3animations:^{ [[UIApplicationsharedApplication].keyWindowaddSubview:self]; self.transform=CGAffineTransformMakeRotation(M_PI/2); }completion:nil]; self.frame=self.bi

  • 基于xgboost+GridSearchCV的波士顿房价预测

    2018年8月23日笔记 sklearn官方英文用户使用指南:https://sklearn.org/user_guide.html sklearn翻译中文用户使用指南:http://sklearn.apachecn.org/cn/0.19.0/user_guide.html0.打开jupyternotebook不知道怎么打开jupyternotebook的朋友请查看我的入门指南文章:https://www.jianshu.com/p/bb0812a702461.准备数据阅读此篇文章的基础是已经阅读了作者的上一篇文章《基于LinearRegression的波士顿房价预测》。 文章链接:https://www.jianshu.com/p/f828eae005a1加载数据集中的预测目标值。fromsklearn.datasetsimportload_boston y=load_boston().target复制如果阅读过上一篇文章,读者应该知道特征提取后的数据处理主要是对数据进行分箱,从而产生新的字段。 将数据处理的过程封装成函数,代码如下:defdataProcessing(df):

  • 蜂群衰竭,这架专为植物授粉的无人机应运而生

    近日,来自日本的科研人员制造出了一种跟昆虫差不多大小的无人机,未来它将能取代--或是至少能协助蜜蜂传播花粉。可以看到,这种无人机的底部粘有类似于蜜蜂腹毛的毛发,而在毛发的上面附着了一种特制的凝胶,它将能协助无人机完成取粉、撒粉。不过眼下,这种无人机还无法像蜜蜂一样在户外工作,它们还无法做到全自动,并且它们也还没有在实验室外的场地展开过测试。近些年来,由于蜜蜂的数量因气候变化、农药、疾病等多个因素正在不断减少,所以这样一款设备的诞生对于农业以及经济来说是个好消息:据统计,在美国,蜜蜂授粉每年能创造出价值150多亿美元的作物。美国去年将夏威夷上的7种蜜蜂列入濒危物种名单,另外一种生活在中西部和东海岸的铁锈色斑纹大黄蜂同样也被列入名单,不过日前因特朗普政府的一项行政命令而被搁置。研究报告联合作者EijiroMiyako指出,蜂群衰竭失调是他们决定研发这样一款机器人蜜蜂的部分原因。这架人工授粉者的尺寸大小为1.6英寸x1.6英寸。这已经不是科学家第一次想到研发一款人工蜜蜂。2013年,来自哈佛大学的研究人员就曾展示过一款能在任意平面上停靠的小型飞行机器人。日本团队打造的这款人工授粉者目前还只能

  • JFinal极速开发框架使用笔记(三) 分析Model和ActiveRecord

    JFinal框架的一些新发现的用法:在JFinal框架中,实体类并不需要设置属性,更不需要配置getset方法就可以很方便的操作数据库,如果需要设置或者获取属性,可以直接使用一下方式:Useruser=newUser().set("id","MY_SEQ.nextval").set("age",18); user.save(); //获取id值 Integerid=user.get("id");复制但是,如果有需要使用getset方法的情况,就可以使用JFinal框架中的生成器来方便的生成方法。JFinal框架中的实体类以及getset方法生成器:packagecom.demo.common.model; importjavax.sql.DataSource; importcom.demo.common.DemoConfig; importcom.jfinal.kit.PathKit; importcom.jfinal.kit.PropKit; importcom.jfinal.plugin.active

  • DevOps 下的质保测试方法

    前言以DevOps为主,今天给大家聊一下作为一个咨询公司,从咨询方这个视角,所看到企业在DevOps的变革,在这个变革当中,我们关于测试的变化。有多少同事听说过世界质量报告?它里面有包含很多当前的一些趋势,投资的趋势、技术的趋势不同的地域的趋势。不管是做日常测试工作的、经理、运维,还是CXO,从本文主题里都能够拿到你要的东西。首先我们会讲DevOps下测试面临的挑战,在我们的视角,作为凯捷持续的质保方案。同时如果你已经很好的应用了,他带来的最佳实践是什么?基于测试的视角,在大企业当中,或者在一些传统型企业当中,它的变革是怎么发生的?最后就是最终的一个质量观点,在DevOps大环境底下,我们测试关键的点是什么,他的KPI有哪些?一、ClientChallenges面临的挑战 二、DevOpsQA/TestSolution质保测试方案 三、BusinessBenefits业务效益 四、CaseStory参考案例 五、PointofView质量观点 六、SolutionDetail方案细节一、ClientChallenges面临的挑战有挑战我们才有动力,才会解决问题。当你的运算负责人、老板、

  • 16-js-缓冲运动

    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>*{margin:0;padding:0;}#div1{width:100px;height:100px;background-color:red;position:absolute;left:600px;top:50px;}#div2{width:1px;height:300px;position:absolute;left:300px;top:0;background-color:black;}</style><script>functionstartMove(){varoDiv=document.getElementById(\'div1\');setInterval(function(){varspeed=(300-oDiv.offsetLeft)/10;//speed=Math.ceil(speed);//

  • 全排列问题

    全排列问题 思路:定义一个函数,函数里的变量用于计数。数组a用于放数,数组b表示位置标记(为了方便在一个序列中数字不重复)。从1开始深搜,搜索时运用回溯判定即可。然后就是找出口,出口当然是搜索次数大于n或者等于n+1的时候,进行输出。 #include<iostream> #include<cstdio> #include<algorithm> usingnamespacestd; intn,a[101],b[101]; voiddfs(intx) { if(x==n+1)//个数满足 { for(inti=1;i<=n;i++)//输出 printf("%5d",a[i]); cout<<endl; return; } for(inti=1;i<=n;i++) { if(b[i]==0)//未被标记 { a[x]=i;//保存 b[i]=1;//标记 dfs(x+1);//进行下一轮递归 b[i]=0;//回溯,返回上一步(清空标记) } } } intmain() { cin>>n; dfs(1);//从1开始

  • ABC233

    ABCDE略 F 容易想到建图,我卡在如果把所有属于同一集合的边都加在图上,会让问题变复杂,当两个点属于同一集合的时候就不用在把这个边加上去了。 #include<bits/stdc++.h> #definelllonglong #defineullunsignedlonglong #definerep(i,a,b)for(lli=(a);i<=(b);i++) #definedec(i,a,b)for(lli=(a);i>=(b);i--) #definepllpair<ll,ll> usingnamespacestd; llINF=0x7f7f7f7f7f7f7f7f; constintN=1e3+5; llmod=998244353; llf[N],p[N]; vector<pll>g[N]; llfind(llx){ returnf[x]==x?x:f[x]=find(f[x]); } booladd(llx,lly){ llfx=find(x),fy=find(y); if(fx!=fy){ f[fx]=fy; retu

  • 宽放大模式——一种前端模块化的方式探讨

     一、所需储备的知识点    要理解宽放大模式,需要先储备两个知识点。    1、匿名函数和闭包      匿名函数就不说了,闭包我的理解是在内部作用域返回一个包含内部作用域引用的对象给外部作用域,这样的话,就能保证内部作用域中的引用不会被垃圾回收器回收的一种机制。      由此发展出来的一种类的构建方式如下 varobject=function(){ varfield1; varmethod1=function(){ }; return{ field1:field1, method1:method1 } }(); 复制     这样可以很好的保护私有成员变量和方法。    2、全局变量注入       对于全局变量,可以通过以下方式注入 varmodel=(function(mod){ ... })(window.mo

  • Simple Windows Service in C++

    本文是来自CodeProject中的一篇名为SimpleWindowsServiceinC++的译文,原文地址为:SimpleWindowsServiceinC++,作者为:MohitArora。 这是一篇使用C++展示如何创建简单的Windows服务的文章。 源代码下载地址为:Downloadsample-SampleService或者Github地址 介绍 这篇文章展示如何使用C++创建一个基本的Windows服务程序。根据应用程序的体系结构,服务在许多开发方案中非常有用。 背景 我在C++中找到的Windows服务示例并不多。我使用MSDN编写这个非常基本的Windows服务。 使用代码 (1)主入口点(与任何应用程序一样) (2)服务入口点 (3)服务控制处理程序 你可以使用VisualStudio模板项目来帮助你入门。我刚创建了一个空的Win32控制台应用程序。 在我们开始主入口程序点之前,我们需要声明一些将在整个服务中使用的全局变量。为了更加面向对象,你始终可以创建一个表示服务的类,并使用类成员代表全局变量。为了简单起见,我将使用全局变量。 我们需要一个SERVICE

  • Vue.js指令小结

    主要简单的介绍一下Vue.js这个轻量级的前端框架的指令部分 Vue.js提供了很多的指令,简化了我们写JS的复杂度,下面简单的介绍各个指令的常规用法。 v-text:这个指令它的效果与双大括号效果是一样的,使用v-text可以避免因为js出错,而暴露了双括号里面的内容   1<divid="app-text"> 2//下面两个效果一样 3<spanv-text="msg"></span> 4<span>{{msg}}</span> 5</div> 6 7<script> 8new.Vue({ 9el:"#app-text", 10data(){ 11return{ 12msg:"helloVue.js" 13} 14} 15 16}) 17</script> v-html:这个指令的主要功能是把规范的html字符串渲染成浏览器可以解析的html内容   <divid="app-text"> //v-html会使用h1标签,而v-text会输出原

  • 数据仓库的架构以及数据分层

    数据仓库分层的原因 1通过数据预处理提高效率,因为预处理,所以会存在冗余数据 2如果不分层而业务系统的业务规则发生变化,就会影响整个数据清洗过程,工作量巨大 3通过分层管理来实现分步完成工作,这样每一层的处理逻辑就简单了   标准的数据仓库分层:ods(临时存储层),pdw(数据仓库层),mid(数据集市层),app(应用层) ods:历史存储层,它和源系统数据是同构的,而且这一层数据粒度是最细的,这层的表分为两种,一种是存储当前需要加载的数据,一种是用于存储处理完后的数据。 pdw:数据仓库层,它的数据是干净的数据,是一致的准确的,也就是清洗后的数据,它的数据一般都遵循数据库第三范式,数据粒度和ods的粒度相同,它会保存bi系统中所有历史数据 mid:数据集市层,它是面向主题组织数据的,通常是星状和雪花状数据,从数据粒度将,它是轻度汇总级别的数据,已经不存在明细的数据了,从广度来说,它包含了所有业务数量。从分析角度讲,大概就是近几年 app:应用层,数据粒度高度汇总,倒不一定涵盖所有业务数据,只是mid层数据的一个子集。   数据仓库的目的是构建面向分析的集成化数

  • 接口自动化测试框架 (一) :APIAutoTest框架

      前言        随着测试技术的发展,接口自动化测试逐渐成为各大公司投入产出比最高的测试技术。介入时间早,执行效率高,稳定性高的优点,让越来越多的公司引入接口自动化测试。  框架简介         APIAutoTest是处理API接口的轻量级自动化测试框架,Java语言实现,基于TestNG测试框架,支持持续集成,自动构建与测试。  框架介绍           1.    数据驱动设计,使用TestNG中的@DataProvider读取Excel中存储的自动化测试用例。         2.    基于TestNG测试框架    &

相关推荐

推荐阅读