读数据工程之道:设计和构建健壮的数据系统12开源软件

1.       开源软件

1.1.         开源软件(Open Source Software,OSS)是一种软件发行模式,在这种模式下,软件和底层代码库通常在特定的许可条款下可供普遍开发者使用

1.2.         社区管理的开源软件

  • 1.2.1.           大部分开源软件项目都是社区管理的开源软件

  • 1.2.2.           流行的开源软件项目社区拥有更多的全球开发人员的创新和贡献的比率

  • 1.2.3.           心智份额

    • 1.2.3.1.            避免采用没有吸引力和知名度的OSS项目

    • 1.2.3.2.            参考GitHub星数、分叉数、提交量和回访率

  • 1.2.4.           成熟度

    • 1.2.4.1.            该项目已经存在了多长时间,现在有多活跃
  • 1.2.5.           故障排除

    • 1.2.5.1.            如果出现问题,你将如何处理?

    • 1.2.5.2.            你是一个人去解决问题,还是有社区可以帮助你解决问题

  • 1.2.6.           项目管理

    • 1.2.6.1.            查看Git出现的问题及其解决方式
  • 1.2.7.           团队

    • 1.2.7.1.            是否有公司赞助开源软件项目?

    • 1.2.7.2.            谁是核心贡献者?

  • 1.2.8.           开发者关系和社区管理

    • 1.2.8.1.            该项目正在做什么来鼓励促进被接纳和采用
  • 1.2.9.           贡献

    • 1.2.9.1.            是否鼓励并接受拉取请求?
  • 1.2.10.      路线图

    • 1.2.10.1.        是否清晰透明?
  • 1.2.11.      自托管和维护

  • 1.2.12.      回馈社会

  • 1.2.13.      可以继续使用社区管理的开源软件版本,但你需要继续自己维护管理(更新、维护服务器/容器、错误修复的拉取请求等)​

1.3.         商业开源软件

  • 1.3.1.           取决于开源应用程序,其需要的时间和精力可能是微不足道的,也可能是极其复杂并且烦琐的

  • 1.3.2.           商业开源软件通常也属于社区开源软件项目

  • 1.3.3.           你也可以向供应商付款,使用商业开源软件,让其为你承担管理所需要工作

  • 1.3.4.           价值

    • 1.3.4.1.            供应商来管理的价值是否更高?
  • 1.3.5.           交付模式

    • 1.3.5.1.            如何获取该服务?

    • 1.3.5.2.            确保你可以轻松访问初始版本和后续版本

  • 1.3.6.           技术支持

    • 1.3.6.1.            技术支持的重要性不能被低估,而且对买家来说技术支持往往是不透明的
  • 1.3.7.           发布和错误修复

  • 1.3.8.           销售周期和定价

  • 1.3.9.           公司财务

    • 1.3.9.1.            公司有生存能力吗?
  • 1.3.10.      影响力与收入

    • 1.3.10.1.        公司是关注增加客户的数量(影响力)​,还是关注增加收入?
  • 1.3.11.      社区支持

1.4.         云也提供自己的托管开源产品

2.       私有技术

2.1.         自主发行

  • 2.1.1.           数据工具领域在过去几年呈指数级增长

  • 2.1.2.           数据工具的公司的销售通常不会将产品作为开源软件发布,而是提供一个专有的解决方案

2.2.         互操作性

  • 2.2.1.           确保该工具与你选择的其他工具(开源软件、其他自主发行、云产品等)能互通

2.3.         心智份额和市场份额

  • 2.3.1.           该产品的解决方案受欢迎吗?

  • 2.3.2.           在市场上占有一席之地吗?

  • 2.3.3.           是否拥有积极的客户评价?

2.4.         文档和支持

2.5.         定价

2.6.         寿命

  • 2.6.1.           公司能否生存足够长的时间让你从它的产品中获得价值?

3.       云平台产品

3.1.         云供应商开发和销售他们的专有服务,例如存储、数据库等更多的服务

3.2.         DynamoDB服务

  • 3.2.1.           该服务现在是各种规模的公司使用的高成熟度的顶级产品

3.3.         云供应商通常会将产品捆绑在一起以更好地协同工作

  • 3.3.1.           每个云都可以通过创建强大的集成来与其用户群建立黏性生态系统

3.4.         性能与价格比较

3.5.         购买注意事项

  • 3.5.1.           按需定价可能很昂贵

  • 3.5.2.           你能通过保留容量或者签订长期承诺协议来降低成本吗?

4.       单体与模块化

4.1.         单体与模块化系统是软件架构领域的另一个长期争论的问题

4.2.         评估单体与模块化选项时

  • 4.2.1.           互操作性

    • 4.2.1.1.            共享和互操作性的架构
  • 4.2.2.           避免“空头陷阱”

    • 4.2.2.1.            容易上手的事物可能会很痛苦或无法逃脱
  • 4.2.3.           灵活性

    • 4.2.3.1.            现在数据领域中的事物发展很快

    • 4.2.3.2.            致力于单体模式会降低灵活性和决策的可逆性

5.       单体

5.1.         单体系统是独立的,通常执行单一系统下的多种功能

  • 5.1.1.           单体倾向于简单化,一切功能都在一个地方

  • 5.1.2.           对单个实体进行分析更容易,你可以更快迁移,因为需要改变的部件更少

5.2.         几十年来一直是技术支柱

  • 5.2.1.           瀑布式的旧时代意味着软件发布是巨大的、紧密耦合的、并且步调平稳的

  • 5.2.2.           单体数据系统一直延续到今天,老软件供应商(如Informatica)和开源框架(如Spark)仍然采用这种模式

5.3.         单体的优点是易于推理分析,只需要较低的认知和较少的上下文切换,因为一切都是独立的

5.4.         缺点

  • 5.4.1.           单体很脆弱

    • 5.4.1.1.            因为有大量的移动部件,更新和发布需要更长的时间,并且往往会变得烦琐

    • 5.4.1.2.            如果一个系统有错误——但愿软件已经彻底通过发布前测试——它会损害整个系统

  • 5.4.2.           用户引发的问题也会发生在单体应用中

    • 5.4.2.1.            如果在任何地方有任何东西发生故障导致这个管道任务失败,整个过程不得不重新开始
  • 5.4.3.           单体系统中的多租户也可能是一个严重的问题

    • 5.4.3.1.            隔离多个用户的工作负载具有非常大的挑战性

    • 5.4.3.2.            在本地数据仓库中,一个用户定义的函数可能会消耗许多的CPU以至于减慢其他用户的系统速度

  • 5.4.4.           如果供应商倒闭或开源项目夭折,切换到一个新的系统会非常痛苦

    • 5.4.4.1.            你所有的过程都包含在单体架构内,从那个系统中抽离出来,并进入一个新的平台,这在时间和金钱上的花费都是昂贵的

5.5.         单体系统中的依赖关系和资源争用之间的冲突是常见的问题

5.6.         虽然单体很有吸引力,因为它易于理解且减少了复杂性,但这是有高代价的

  • 5.6.1.           它可能导致灵活性的丧失,机会成本和在开发周期里持续的高冲突

6.       模块化

6.1.         模块化倾向于采用解耦的、最佳组合技术执行它们独特的任务

  • 6.1.1.           考虑到数据世界中产品的变化率,你应该追求在不断变化的一系列解决方案之间的互操作性

6.2.         是软件工程中的一个古老概念

  • 6.2.1.           系统不再是依靠庞大的单体来处理需求,而是将系统和流程分解为相关的独立区域

  • 6.2.2.           微服务可以通过API通信,这允许开发人员在制作应用程序时专注于他们的领域,同时其他微服务也可以访问

    • 6.2.2.1.            这是软件工程的趋势,在现代数据系统中越来越流行

    • 6.2.2.2.            大型科技公司一直是微服务的主要推动者

    • 6.2.2.3.            著名的贝索斯API指令减少了应用程序之间的耦合,允许重构和分解

    • 6.2.2.4.            贝索斯还实施了两个比萨原则(任何团队都不应大到两个比萨饼无法喂饱整个团队

      6.2.2.4.1.             意味着团队最多有五名成员

      6.2.2.4.2.             这个上限也限制了团队的责任和领域的复杂性——特别是它可以管理的代码库

6.3.         在模块化的微服务环境中,组件是可交换的,而且能够创建一个多语言(多编程语言)应用程序

  • 6.3.1.           Java服务可以替代用Python编写的服务

  • 6.3.2.           服务客户只需要考虑服务API的技术规范,而不是幕后细节如何执行

6.4.         数据处理技术通过对互操作性的强大支持转向模块化

  • 6.4.1.           数据采用标准的格式(如Parquet格式)将对象存储存放在数据湖和数据湖仓中

  • 6.4.2.           任何支持其格式的读取工具都可以读取数据并将处理后的结果由另一个工具写回数据湖中

  • 6.4.3.           云数据仓库通过使用标准格式和外部表导入导出,支持与对象存储的互操作

    • 6.4.3.1.            查询直接在数据湖中的数据中运行

6.5.         模块化允许工程师为每项工作或流程中的每一步挑选最佳的技术

6.6.         缺点

  • 6.6.1.           模块化不再是关注和处理一个单一系统,现在你可能有无数系统需要了解和操作

  • 6.6.2.           编排5~10个系统比编排一个系统要复杂得多

    • 6.6.2.1.            编排变成将数据各类技术栈模块绑定在一起的黏合剂

7.       分布式单体模式

7.1.         分布式单体模式存在许多单体架构的局限性

7.2.         其基本思想是运行一个分布式系统来执行不同的任务

  • 7.2.1.           服务和节点享有一套共同的依赖关系或共同的代码库

7.3.         一个标准示例是传统的Hadoop集群

  • 7.3.1.           一个Hadoop集群可以同时托管多个框架

    • 7.3.1.1.            Hive、Pig或Spark
  • 7.3.2.           该集群具有许多内部依赖性

  • 7.3.3.           集群还运行Hadoop核心组件

    • 7.3.3.1.            Hadoop公共库、HDFS、YARN和Java
  • 7.3.4.           一个集群对各种组件通常有一个版本

7.4.         标准的本地Hadoop系统需要管理一个公共环境,该环境适用于所有用户和所有作业

  • 7.4.1.           强制现有任务升级依赖关系会有破坏环境的风险,而维持一个框架的两个版本会带来额外的复杂性

7.5.         分布式单体模式问题的一种解决方案是在云环境中使用临时的基础设施

  • 7.5.1.           第二种解决方案是使用容器将分布式单体分解为多个软件环境

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/56663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Qt】信号和槽——信号和槽的概念、信号和槽的使用、信号和槽的优缺点、自定义信号和槽、信号和槽的断开

文章目录 Qt1. 信号和槽的概念2. 信号和槽的使用3. 信号和槽的优缺点4. 自定义信号和槽5. 信号和槽的断开 Qt 1. 信号和槽的概念 信号是什么: 在Linux中,我们知道信号是一种异步的事件通知机制,用于通知进程某个事件已经发生。它是进程间通信…

MOE论文详解(4)-GLaM

2022年google在GShard之后发表另一篇跟MoE相关的paper, 论文名为GLaM (Generalist Language Model), 最大的GLaM模型有1.2 trillion参数, 比GPT-3大7倍, 但成本只有GPT-3的1/3, 同时效果也超过GPT-3. 以下是两者的对比: 跟之前模型对比如下, 跟GShard和Switch-C相比, GLaM是第一…

opcode从零开始

opcode从零开始 参考资料: Intel 64 and IA-32 ArchitecturesSoftware Developer’s Manual Combined Volumes: 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D, and 4() Intel64和IA-32架构软件开发人员手册组合卷:1,2a, 2B, 2C, 2D, 3A, 3B, 3C, 3D,和4 罗聪–c…

wordart.top - 轻松创建令人惊叹的文字云!

轻松创建令人惊叹的文字云/词云图!适合营销人员、教育工作者、数据爱好者、创意人员、商务人士、活动策划者和社交媒体专家等多种用户群体。支持海量模版库、自定义模板、文本快速提取、精准关键字调整、词云Gif动图制作、词云视频制作、图片一键分享及数据轻松导入…

网盘如何拉新方法教程

网盘拉新是指通过各种推广方式吸引新用户注册和使用网盘服务的过程。以下是对网盘拉新的详细解释: 一、网盘拉新的背景与意义 背景:随着互联网的发展,网盘作为一种基于云计算技术的存储服务,因其便捷性和高效性而备受欢迎。为了…

Linux debian 系桌面系统安装软件方式介绍

debian 系软件的安装方式多种多样,但对于不想花太多时间配置各种环境和依赖的用户来说,建议直接使用“新立得包管理器”安装,既方便又直观。 本文将以常用软件为例,介绍常用的几种软件安装方式。 1. 使用新立得包管理器安装&…

数据字典是什么?和数据库、数据仓库有什么关系?

一、数据字典的定义及作用 数据字典是一种对数据的定义和描述的集合,它包含了数据的名称、类型、长度、取值范围、业务含义、数据来源等详细信息。 数据字典的主要作用如下: 1. 对于数据开发者来说,数据字典包含了关于数据结构和内容的清晰…

15分钟学Go 第4天:Go的基本语法

第4天:基本语法 在这一部分,将讨论Go语言的基本语法,了解其程序结构和基础语句。这将为我们后续的学习打下坚实的基础。 1. Go语言程序结构 Go语言程序的结构相对简单,主要包括: 包声明导入语句函数语句 1.1 包声…

react+video:限制快进、倍速、画中画

实现代码&#xff1a; <video ref{videoRef} src{videoUrl} className{style.video} controls onRateChange{rateChange} onPlay{playVideo} onPause{pauseVideo} onTimeUpdate{timeUpdate} disablePictureInPicture playsInline poster{poster} controlsList"nodownl…

卸载Python

1、查看安装框架位置并删除 Sudo rm -rf /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8 2、查看应用并删除 在 /Applications/Python 3.x 看是否存在&#xff0c;如果存在并删除。 3、删除软连接 ls -l /usr/bin/py* 或 ls -…

MATLAB电车(宝马 i3)卸载电池再利用电气模型分析

&#x1f3af;要点 特性测试评估卸载电池性能以及不同温度下电池容量和电阻。使用两种电气模型评估和模拟卸载电池可利用性能。从宝马 i3模块中提取三星三元锂方形电池作为评估电池&#xff1a;容量测量、电阻测量&#xff0c;对比新电池性能。使用的等效电路模型以及用于校准…

群晖前面加了雷池社区版,安装失败,然后无法识别出用户真实访问IP

有nas的相信对公网都不模式&#xff0c;在现在基础上传带宽能有100兆的时代&#xff0c;有公网代表着家里有一个小服务器&#xff0c;像百度网盘&#xff0c;优酷这种在线服务都能部署为私有化服务。但现在运营商几乎不可能提供公网ip&#xff0c;要么自己买个云服务器做内网穿…

MacOS RocketMQ安装

MacOS RocketMQ安装 文章目录 MacOS RocketMQ安装一、下载二、安装修改JVM参数启动关闭测试关闭测试测试收发消息运行自带的生产者测试类运行自带的消费者测试类参考博客&#xff1a;https://blog.csdn.net/zhiyikeji/article/details/140911649 一、下载 打开官网&#xff0c;…

ListView的Items绑定和comboBox和CheckBox组合使用实现复选框的功能

为 ListView 控件的内容指定视图模式的方法&#xff0c;参考官方文档。 ComboBox 样式和模板 案例说明&#xff1a;通过checkBox和ComboBox的组合方式实现下拉窗口的多选方式&#xff0c;同时说明了ListView中Items项目的两种绑定方式. 示例&#xff1a; 设计样式 Xaml代码…

C++初阶学习第七弹——string的模拟实现

C初阶学习第六弹------标准库中的string类_c语言返回string-CSDN博客 通过上篇我们已经学习到了string类的基本使用&#xff0c;这里我们就试着模拟实现一些&#xff0c;我们主要实现一些常用到的函数。 目录 一、string类的构造 二、string类的拷贝构造 三、string类的析构函…

第五课:Python学习之if语句

判断&#xff08;if&#xff09;语句 目标 开发中的应用场景if 语句体验if 语句进阶综合应用 01. 开发中的应用场景 生活中的判断几乎是无所不在的&#xff0c;我们每天都在做各种各样的选择&#xff0c;如果这样&#xff1f;如果那样&#xff1f;…… 程序中的判断 # 定义…

web前端面试中拍摄的真实vue面试题

发一波web前端面试题&#xff0c;真实拍摄。最最最最最简单的vue面试题了。 image image image 如果以上都不会&#xff0c;那么vue面试基本都是凉了&#xff0c;想彻底学习一下&#xff0c;我这里在之前录制过一套vue面试题的视频教程。 视频地址&#xff1a;https://www.3moo…

小猿口算炸鱼脚本

目录 写在前面&#xff1a; 一、关于小猿口算&#xff1a; 二、代码逻辑 1.数字识别 2.答题部分 三、代码分享&#xff1a; 补充&#xff1a;软件包下载 写在前面&#xff1a; 最近小猿口算已经被不少大学生攻占&#xff0c;小学生直呼有挂。原本是以为大学生都打着本…

智慧链动青春:国家区块链中心接待北京市十一学校青少年访学探索

以生动科学的方法点燃青少年科学探索欲望是构建未来科技人才梯队的基石。近期国家区块链技术创新中心接待北京市十一学校新生访学&#xff0c;以科普讲座、实操互动的方式让学生在深度思考中感受科学魅力、接触前沿科技&#xff0c;激发学生对区块链、隐私计算和芯片设计制造的…

MES制造执行系统原型图动端 Axure原型 交互设计 Axure实战项目

MES制造执行系统原型移动端 Manufacturing Execution System prototype MES制造执行系统原型图移动端是专门为制造执行系统设计的移动端是一个可视化的设计。用于展示和演示该系统在移动设备上的功能和界面。通过原型图&#xff0c;可以清晰地了解制造执行系统在移动端的各个…