读数据工程之道:设计和构建健壮的数据系统16源系统实际细节(下)

1. 数据共享

1.1. 云数据共享的核心概念是,多租户系统支持租户之间共享数据的安全策略

1.2. 任何具有细粒度权限系统的公有云对象存储系统都可以成为数据共享的平台

1.3. 数据共享也简化了数据市场的概念,在几个流行的云和数据平台上都可用

1.4. 数据共享还可以简化组织内的数据管道

1.5. 数据共享和数据网格与我们的通用架构组件的理念紧密结合

2. 第三方数据源

2.1. 技术的消费者化意味着每家公司现在基本上都是技术公司

2.2. 数据是有黏性的,通过允许将公司的数据集成和扩展到用户的应用中,就会产生一个巨大的推动

2.3. 副作用是现在几乎有无限的第三方数据来源

2.4. 第三方数据的直接访问通常是通过API、云平台上的数据共享,或数据下载来完成

3. 消息队列和事件流平台

3.1. 事件驱动架构在软件应用程序中无处不在

3.2. 消息队列

  • 3.2.1. 消息队列是一种使用发布和订阅模式在离散系统之间异步发送数据(通常是小的单独消息,以千字节计)的机制

  • 3.2.2. 消息队列允许应用程序和系统相互解耦,并被广泛用于微服务架构中

  • 3.2.3. 消息队列对消息进行缓冲,以处理瞬时的负载高峰,并通过具有复制功能的分布式架构使消息持久

  • 3.2.4. 消息队列是解耦微服务和事件驱动架构的一个关键要素

  • 3.2.5. 消息队列需要注意的一些事项是交付频率、消息排序和可扩展性

    • 3.2.5.1. 消息的排序和交付

      3.2.5.1.1. 消息的创建、发送和接收顺序会对下游用户产生重大影响

      3.2.5.1.2. 消息队列通常采用模糊的顺序概念或者先进先出(First In,First Out,FIFO)的概念

      3.2.5.1.3. 除非你的消息队列技术保证,否则不要假设你的消息会按顺序交付

      3.2.5.1.4. 通常需要以不按顺序的消息传递进行架构设计

    • 3.2.5.2. 发送频率

      3.2.5.2.1. 消息可以发送恰好一次,或至少发送一次

      3.2.5.2.2. 如果消息被发送恰好一次,那么在订阅者确认消息后,消息就会消失,不会再被发送

      3.2.5.2.3. 至少发送一次的消息可以被多个订阅者或同一订阅者多次使用

      3.2.5.2.4. 系统应该是幂等的

      3.2.5.2.4.1. 在一个幂等的系统中,处理一次消息的结果与多次处理消息的结果是相同的

    • 3.2.5.3. 可扩展性

      3.2.5.3.1. 在事件驱动的应用程序中使用的最流行的消息队列是横向可扩展的,这可以使事务在多个服务器上运行

      3.2.5.3.2. 队列可以动态地扩大和缩小规模,在系统落后时缓冲消息,并且持久地存储消息以避免故障

  • 3.2.6. 消息队列主要用于传导具有一定交付保证的消息

3.3. 事件流平台

  • 3.3.1. 流数据(在这种情况下,消息和流)跨越了许多数据工程生命周期阶段

    • 3.3.1.1. RDBMS通常直接连接到一个应用程序,而流数据的界限有时并不那么清晰
  • 3.3.2. 同样的事件流平台可以在获取和转换阶段使用,为实时分析处理数据

  • 3.3.3. 事件流平台是消息队列的延续,即消息从生产者提供给消费者

  • 3.3.4. 事件流平台是用来获取和处理记录有序的数据的

  • 3.3.5. 在事件流平台中,数据被保留一段时间,并且有可能从过去的时间点重放消息

  • 3.3.6. 主题

    • 3.3.6.1. 在一个事件流平台中,生产者将事件流向一个主题,即相关事件的集合
  • 3.3.7. 流分区

    • 3.3.7.1. 流分区是将一条消息流细分为多条流

    • 3.3.7.2. 信息通过分区键分布在各分区中

    • 3.3.7.3. 具有相同分区键的消息将总是在同一个分区中结束

    • 3.3.7.4. 设置一个分区键,使应该一起处理的消息具有相同的分区键

    • 3.3.7.5. 流分区的一个关键问题是确保你的分区键不会产生热点,即交付给一个分区的消息数量不平均

  • 3.3.8. 容错性和弹性

    • 3.3.8.1. 事件流平台是典型的分布式系统,数据流存储在不同的节点上

    • 3.3.8.2. 如果一个节点坏了,另一个节点会取代它,而流仍然可以访问

      3.3.8.2.1. 这意味着记录不会丢失

    • 3.3.8.3. 当你需要一个能够可靠地产生、存储和获取事件数据的系统时,流媒体平台的容错性和弹性使它成为一个不错的选择

4. 和谁一起工作

4.1. 系统和数据利益相关者

  • 4.1.1. 数据利益相关者拥有并控制你对想要的数据的访问,一般由IT部门、数据治理小组或第三方处理

  • 4.1.2. 系统和数据利益相关者通常是不同的人或团队

    • 4.1.2.1. 可能是相同的
  • 4.1.3. 在数据工程师和源系统的利益相关者之间建立一个反馈途径,促进源系统相关人员建立对数据如何被消费和使用的意识

4.2. 当上游源数据发生某种情况时,无论是架构或数据更改、服务器或数据库故障,还是其他重要事件,你需要意识到这些问题将对你的数据工程系统产生的影响

5. 数据契约

5.1. 数据契约是源系统所有者和从该系统获取数据的团队之间的书面协议

5.2. 契约应该说明获取什么数据、通过什么方法(完全、增量)​、多长时间,以及谁(个人、团队)是源系统和获取的联系人

5.3. 数据合同应该存储在一个知名的、容易找到的地方

6. 数据底层设计及其对源系统的影响

6.1. 安全

  • 6.1.1. 安全是至关重要的

  • 6.1.2. 最不希望的就是意外地在源系统中创造一个漏洞点

  • 6.1.3. 源系统的架构是否对数据进行了安全和加密,包括静止的数据和传输中的数据?

  • 6.1.4. 是否必须通过公共互联网访问源系统,或者你是否使用虚拟专用网络(Virtual Private Network,VPN)?

  • 6.1.5. 将源系统的密码、令牌和凭证安全地锁起来

  • 6.1.6. 信任源系统吗?

6.2. 数据管理

  • 6.2.1. 只能对源系统和它们产生的数据进行外围控制

  • 6.2.2. 上游数据和系统是否以可靠的、易于理解的方式进行管理?

  • 6.2.3. 谁来管理这些数据?

  • 6.2.4. 如何确保上游系统的数据质量和完整性?

  • 6.2.5. 上游模式是可能发生变化的

  • 6.2.6. 上游记录的创建是否由主数据管理实践或系统控制?

  • 6.2.7. 是否能接触到原始数据,或者数据是否会被混淆?

  • 6.2.8. 根据法规,你是否应该访问这些数据?

6.3. Data Ops

  • 6.3.1. 确保你能观察和监控源系统的正常运行时间和使用情况,并在事件发生时做出反应

  • 6.3.2. 在数据工程和支持源系统的团队之间建立一个清晰的沟通链

  • 6.3.3. 将DevOps纳工作流和文化

    • 6.3.3.1. 有助于实现DataOps(DevOps的一个兄弟姐妹)的目标,迅速解决和减少错误
  • 6.3.4. 自动化

    • 6.3.4.1. 自动源系统会受到自动化的影响,如代码更新和新功能化

    • 6.3.4.2. 为你的数据工作流设置的DataOps自动化

  • 6.3.5. 可观测性

    • 6.3.5.1. 当源系统出现问题时,你如何得知

    • 6.3.5.2. 设置检查以确保来自源系统的数据符合下游使用的期望

  • 6.3.6. 事故响应

    • 6.3.6.1. 如果有坏事发生,你有什么计划?

6.4. 数据架构

  • 6.4.1. 与数据管理类似,除非你参与了源系统架构的设计和维护,否则你对上游源系统架构的影响很小

  • 6.4.2. 应该了解上游架构是如何设计的,以及它的优势和劣势

  • 6.4.3. 可靠性

    • 6.4.3.1. 所有的系统在某些时候都会受到熵的影响,输出会偏离预期的内容

    • 6.4.3.2. 漏洞被引入,随机故障发生

  • 6.4.4. 持久性

    • 6.4.4.1. 一切都会失败
  • 6.4.5. 可用性

    • 6.4.5.1. 如何保证源系统在它应该运行的时候是正常的、运行的、可用的?
  • 6.4.6. 人员

    • 6.4.6.1. 谁负责源系统的设计,你怎么知道架构中是否有突破性变化?

6.5. 编排

  • 6.5.1. 确保你的编排能够访问源系统,这需要正确的网络访问、认证和授权

  • 6.5.2. 节奏和频率

    • 6.5.2.1. 数据是否按照固定的时间表提供,或者你是否可以随时访问新的数据?
  • 6.5.3. 通用框架

    • 6.5.3.1. 软件和数据工程师是否使用相同的容器管理器

6.6. 软件工程

  • 6.6.1. 随着数据格局向简化和自动访问源系统的工具转变,你很可能需要写代码

  • 6.6.2. 网络

    • 6.6.2.1. 确保你的代码能够访问源系统所在的网络
  • 6.6.3. 认证和授权

  • 6.6.4. 访问模式

    • 6.6.4.1. 如何访问数据的?
  • 6.6.5. 编排

    • 6.6.5.1. 代码是否与编排框架集成,并且可以作为编排工作流执行?
  • 6.6.6. 并行化

    • 6.6.6.1. 如何管理和扩展对源系统的并行访问的?
  • 6.6.7. 部署

    • 6.6.7.1. 如何处理源代码变化的部署的?

7. 卓越运营

7.1. DevOps、DataOps、MLOps、XOps

7.2. 应该在整个栈上下延伸,并且支持数据工程和生命周期

7.3. 很理想,但往往不能完全实现

7.4. 源系统和它们的数据在数据工程的生命周期中是至关重要的

7.5. 软硬皆施

  • 7.5.1. 与源系统团队更好的合作可以带来更高质量的数据、更成功的结果,以及更好的数据产品

7.6. 在数据工程中,主动沟通你的数据需求来帮助应用程序团队

7.7. 寻找机会来建立面向用户的数据产品

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

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

相关文章

RabbitMQ系列学习笔记(三)--工作队列模式

文章目录 一、工作队列模式原理二、工作队列模式实战1、抽取工具类2、消费者代码3、生产者代码4、查看运行结果 本文参考 尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件rabbitmq RabbitMQ 详解 Centos7环境安装Erlang、RabbitMQ详细过程(配图) 一、工作队列模式原理 与简单模式相…

SpringBoot篇(二、制作SpringBoot程序)

目录 一、代码位置 二、四种方式 1. IDEA联网版 2. 官网 3. 阿里云 4. 手动 五、在IDEA中隐藏指定文件/文件夹 六、复制工程-快速操作 七、更改引导类别名 一、代码位置 二、四种方式 1. IDEA联网版 2. 官网 官网制作:Spring Boot 3. 阿里云 阿里云版制…

基于SSM+微信小程序的家庭记账本管理系统(家庭1)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 1、管理员端功能有首页、个人中心、用户管理,消费详情管理、收入详情管理、系统管理等。 2、用户端功能有首页、消费详情、收入详情、论坛信息、我的等功能。 2、项目技术 …

django5入门【02】创建新的django程序

注意: ⭐前提:已经安装了python以及django所依赖的包1、通过django-admin管理工具在命令行创建Django应用程序,创建命令如下: django-admin startproject ProjectName❓ 疑问:除了使用命令行创建django程序外&#x…

OCR经典神经网络(三)LayoutLM v2算法原理及其在发票数据集上的应用(NER及RE)

OCR经典神经网络(三)LayoutLM v2算法原理及其在发票数据集上的应用(NER及RE) LayoutLM系列模型是微软发布的、文档理解多模态基础模型领域最重要和有代表性的工作: LayoutLM v2:在一个单一的多模态框架中对文本(text)、布局&…

eQEP正交解码

目录 基本介绍 整体框架 关键模块 编译问题 实验效果 基本介绍 编码器是一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感器,我们可以通过编码器测量到位移或者速度信息。编码器从输出数据类型上分,可以分为增量式编码器和绝对式编码器。…

深入浅出MySQL:概述与体系结构解析

目录 1. 初识MySQL1.1. 数据库1.1.1. OLTP(联机事务处理)1.1.2. OLAP(联机分析处理) 2. SQL2.1. 定义2.2. DQL(数据查询语言)2.3. DML(数据操纵语言)2.4. DDL(数据定义语…

Python基于OpenCV的实时疲劳检测

2.检测方法 1)方法 与用于计算眨眼的传统图像处理方法不同,该方法通常涉及以下几种组合: 1、眼睛定位。 2、阈值找到眼睛的白色。 3、确定眼睛的“白色”区域是否消失了一段时间(表示眨眼)。 相反,眼睛长…

Python网络请求库requests的10个基本用法

大家好!今天我们要聊聊Python中非常实用的一个库——requests。这个库让发送HTTP请求变得超级简单。无论你是想抓取网页数据还是测试API接口,requests都能派上大用场。下面我们就一起来看看如何使用requests完成一些常见的任务。 引言 随着互联网技术的…

队列(数据结构)——C语言

目录 1.概念与结构 2.队列的实现 初始化QueueInit 申请新节点BuyNode 入队QueuePush 判断队为空QueueEmpty 出队QueuePop 读取队头数据QueueFront 读取队尾数据QueueBack 元素个数QueueSize 销毁队列QueueDestroy 3.整体代码 (文章中结点和节点是同一个意思) 1.概…

keil兼容C51和ARM,C251

三合一 C51,AEM,C251获取STC32的包 将 C51,AEM,C251安装到一块。 C51,AEM,C251 将三个软件分别下载到不同的文件夹KEIL,MDK,KEIL2里。 然后打开KEIL,MDK,KEIL2文件夹,复制KEIL文件夹里的C51和KEIL2文件夹里的C251的文件夹到MDK文件夹里。 打开KEIL和KEIL2文件夹里…

单链表的经典算法OJ

目录 1.反转链表 2.链表的中间节点 3.移除链表元素 ——————————————————————————————————————————— 正文开始 1.反转链表 typedef struct ListNode ListNode; struct ListNode* reverseList(struct ListNode* head) {//判空if(…

运行kafka查看所有主题Topic报错zookeeper is not a recognized option

执行命令查看:./kafka-topics.sh --list --zookeeper localhost:2181 报错 zookeeper is not a recognized option joptsimple.UnrecognizedOptionException: zookeeper is not a recognized optionat joptsimple.OptionException.unrecognizedOption(OptionExcept…

000010 - Mapreduce框架原理

Mapreduce框架原理 1. InputFormat 数据输入1.1 切片与 MapTask 并行度决定机制1.2 Job 提交流程源码和切片源码详解1.2.1 Job 提交流程源码详解1.2.2 FileInputFormat 切片源码解析(input.getSplits(job)) 1.3 FileInputFormat 切片机制1.3.1 切片机制1…

二、PyCharm基本设置

PyCharm基本设置 前言一、设置中文汉化二、设置代码字体颜色三、设置鼠标滚轮调整字体大小四、修改 PyCharm 运行内存4.1 方式一4.1 方式二 五、显示 PyCharm 运行时内存六、设置代码模版配置的参数有: 七、PyCharm设置背景图总结 前言 为了让我们的 PyCharm 更好用…

一家射频芯片企业终止,报告期持续亏损,高端产品占比不足

飞骧科技终止原因如下:飞骧科技从事的射频芯片行业如今竞争激烈,飞骧科技的产品主要应用于中低端手机,如摩托罗拉、传音,相比同行业上市公司已经退出的低集成度市场,相关产品展飞骧科技业务比重仍然不低。交易所质疑其…

【Matlab】基于Prandtl−Ishlinskii的迟滞模型-RLS辨识

PI模型 PI迟滞模型的输出公式: 代码记录 此代码为根据PI模型,已知输入(正弦函数幅值为3.5)、阈值以及权重值,利用matlab生成迟滞回线。 %% The Prandtl-Ishlinskii Hysteresis Model- %% 20241021 clc;clear; close…

数据结构与算法——Java实现 44.翻转二叉树

目录 226. 翻转二叉树 思路 代码 本地代码测试 不管前方的路有多苦 只要走的方向正确 不管多么崎岖不平 都比站在原地更接近幸福 —— 24.10.21 226. 翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 1: 输…

Unity AnimationClip详解(2)——动画数据的优化

【内存优化】 首先要意识到运行时和编辑时的区别,当运行时和编辑时所需的数据相差不大时,我们用同一套数据结构即可,当两者差异较多或者数据量很大时,需要有各自的数据结构,这意味着在打包或构建时需要将编辑时数据转…

【Linux探索学习】第七弹——Linux的工具(二):Linux下vim编辑器的使用详解

Linux的工具(一):【Linux探索学习】第六弹——Linux的工具(一):Ubuntu系统下的软件包管理器_ubuntu软件管理器-CSDN博客 前言: 在学习Linux之前,相信大家都或多或少的学习过一些计算…