读数据工程之道:设计和构建健壮的数据系统08主要架构概念

news2024/12/26 23:13:20

1. 域和服务

1.1. 域是你正在为其构建的现实世界主题区域

1.2. 服务是一组功能,其目标是完成一项任务

1.3. 一个域可以包含多个服务

1.4. 确定领域中应包含的内容

  • 1.4.1. 确定领域应该包含什么以及要包括哪些服务时,最好的建议是简单地去与用户和利益相关者交谈,倾听他们在说什么,并构建将帮助他们完成工作的服务

  • 1.4.2. 要避免在真空中进行架构设计的经典陷阱

2. 可扩展性

2.1. 允许我们增加系统的容量以提高性能和处理需求

2.2. 单台机器上可能的资源有硬性限制

3. 弹性

3.1. 一个可扩展系统动态扩展的能力

3.2. 一个高弹性的系统可以根据当前的工作负载自动扩容和缩容

3.3. 随着需求的增加,扩大规模至关重要,而缩小规模则可以在云环境中节省资金

3.4. 现代系统有时会缩放到零,这意味着它们可以在空闲时自动关闭

3.5. 动态缩放有助于在没有工程师手动干预的情况下确保足够的性能

  • 3.5.1. 弹性提高可靠性

4. 可用性

4.1. IT服务或组件处于可操作状态的时间百分比

4.2. 单机通常无法提供高可用性和可靠性

5. 可靠性

5.1. 系统在指定时间间隔内执行其预期功能时满足规定标准的概率

5.2. 低可靠性会导致低可用性

6. 分布式系统

6.1. 利用分布式系统来实现更高的整体扩展能力以及更高的可用性和可靠性

6.2. 水平扩展允许你添加更多机器以满足负载和资源需求

6.3. 水平扩展系统有一个主节点,作为工作负载实例化、进度和完成的主要联系点

6.4. 典型的现代分布式架构也内置冗余

6.5. 分布式系统的管理细节通常被抽象出来,使你可以专注于高级架构而不是低层次管道

7. 紧耦合与松耦合

7.1. 紧耦合

  • 7.1.1. 可以选择拥有较为集中的依赖项和工作流

  • 7.1.2. 领域和服务的每个部分都非常依赖于其他领域和服务

7.2. 松耦合

  • 7.2.1. 拥有分散的领域和服务,它们彼此之间没有严格的依赖性

  • 7.2.2. 在松耦合的情况下,分散的团队很容易构建其数据可能无法被同行使用的系统

  • 7.2.3. 确保为拥有各自领域和服务的团队分配共同的标准、所有权、责任和义务

7.3. 设计“好的”数据架构依赖于领域和服务的紧耦合和松耦合之间的权衡

8. 架构层次

8.1. 单层

  • 8.1.1. 在单层架构中,你的数据库和应用程序紧耦合,驻留在单个服务器上

  • 8.1.2. 该服务器可以是你的笔记本电脑或云中的单个虚拟机(Virtual Machine,VM)

  • 8.1.3. 紧耦合的性质意味着如果服务器、数据库或应用程序出现故障,则整个架构都会失败

  • 8.1.4. 单层架构适用于原型设计和开发,但由于明显的故障风险,因此不建议将其用于生产环境

  • 8.1.5. 单层架构适用于在本地计算机上测试系统,但不建议用于生产用途

  • 8.1.6. 单层架构提供了简单性,但也有严重的局限性

8.2. 多层

  • 8.2.1. 通过解耦数据和应用程序解决了紧耦合单层架构的挑战

  • 8.2.2. 多层(也称为n层)架构由单独的层组成:数据、应用程序、业务逻辑、展示等

    • 8.2.2.1. 将数据与应用程序分离,并将应用程序与展示分开
  • 8.2.3. 这些层是自底向上和分层的,这意味着下层不一定依赖于上层

    • 8.2.3.1. 上层依赖于下层
  • 8.2.4. 三层架构由数据层、应用程序/逻辑层和表示层组成

    • 8.2.4.1. 每一层都相互隔离,允许关注点的分离

    • 8.2.4.2. 使用三层架构,你可以在每一层中自由使用你喜欢的任何技术,而无须集中精力

  • 8.2.5. 数据工程师应该使用层来评估他们的分层架构和处理依赖关系的方式

    • 8.2.5.1. 考虑你是否希望节点出现资源争用

      8.2.5.1.1. 如果不是,则使用无共享架构:单个节点处理每个请求,这意味着其他节点不与该节点或彼此共享内存、磁盘或CPU等资源

    • 8.2.5.2. 节点是否应该共享所有节点都可以访问的相同磁盘和内存

      8.2.5.2.1. 共享磁盘架构

8.3. 单体

  • 8.3.1. 单体内部的耦合

    • 8.3.1.1. 技术耦合

      8.3.1.1.1. 技术耦合指的是架构层次

    • 8.3.1.2. 领域耦合

      8.3.1.2.1. 领域耦合指的是领域之间耦合在一起的方式

  • 8.3.2. 单体在技术和领域之间具有不同程度的耦合

  • 8.3.3. 单体的紧耦合意味着其组件缺乏模块化

8.4. 微服务

  • 8.4.1. 微服务架构包括独立的、分散的和松耦合的服务

  • 8.4.2. 每个服务都有一个特定的功能,并且与在其领域内运行的其他服务解耦

  • 8.4.3. 单体不是一蹴而就的,它是一个技术问题,也是一个组织问题

8.5. 注意事项

  • 8.5.1. 中央数据仓库本质上是庞大的

    • 8.5.1.1. 向与数据仓库等效的微服务的转变是将拥有特定领域数据管道的工作流连接到相应的特定领域数据仓库进行解耦
  • 8.5.2. 务实地将使用松耦合作为一种理想,同时认识到你在数据架构中使用的数据技术的状态和局限性

  • 8.5.3. 以垂直方式将架构的组件分为不同的关注层

  • 8.5.4. 集中化:一个团队负责从所有领域收集数据并协调它以供整个组织使用

  • 8.5.5. 数据网格

    • 8.5.5.1. 使用数据网格,每个软件团队负责准备其数据以供组织的其他部门使用
  • 8.5.6. 单体不一定是坏的,在某些条件下从单体开始可能是有意义的

    • 8.5.6.1. 从单体开始要简单得多

    • 8.5.6.2. 准备好最终将其分解成更小的部分

9. 用户访问

9.1. 多租户

  • 9.1.1. 所有云服务都是多租户的,尽管这种多租户出现在不同的粒度上

    • 9.1.1.1. 云计算实例通常位于共享服务器上,但虚拟机本身提供了一定程度的隔离

    • 9.1.1.2. 对象存储是一个多租户系统,但只要客户正确配置其权限,云供应商就可以保证安全性和隔离性

  • 9.1.2. 工程师经常需要在更小的范围内做出有关多租户的决策

    • 9.1.2.1. 来自不同租户的数据必须适当隔离

    • 9.1.2.2. 数据隔离策略因系统而异

    • 9.1.2.3. 必须确保视图不会泄漏数据

10. 事件驱动架构

10.1. 一个事件驱动的工作流包含在数据工程生命周期的各个部分创建、更新和异步移动事件的能力

10.2. 主要领域

  • 10.2.1. 事件生产

  • 10.2.2. 路由

  • 10.2.3. 消费

10.3. 事件驱动架构的优势在于它将事件的状态分布到多个服务中

11. 棕地项目

11.1. 棕地(Brownfield)项目通常涉及重构和重组现有架构,并受到现在和过去的选择的限制

11.2. 最好是深入挖掘、提出问题并理解做出决策的原因

11.3. 同理心和上下文在帮助你诊断现有架构的问题、发现机会和识别陷阱方面大有帮助

11.4. 直接重写的一种流行替代方法是绞杀者模式:新系统缓慢地、逐步地替换遗留架构的组件

11.5. 如果你在一个大型组织中,根除遗留技术或架构可能是不可能的

12. 绿地项目

12.1. 绿地(Greenfield)项目让你开创一个全新的开始,不受先前架构的历史或遗留问题的限制

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

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

相关文章

SQLAlchemy入门:详细介绍SQLAlchemy的安装、配置及基本使用方法

SQLAlchemy是一个流行的Python SQL工具包和对象关系映射(ORM)框架,它为开发人员提供了一种高效、灵活的方式来与数据库进行交互。本文将详细介绍SQLAlchemy的安装、配置及基本使用方法,并通过代码示例和案例分析,帮助新…

C++ | Leetcode C++题解之第478题在圆内随机生成点

题目&#xff1a; 题解&#xff1a; class Solution { private:mt19937 gen{random_device{}()};uniform_real_distribution<double> dis;double xc, yc, r;public:Solution(double radius, double x_center, double y_center): dis(0, 1), xc(x_center), yc(y_center),…

Web前端高级工程师培训:异步处理专题

异步处理专题 课前准备 工具 编辑器 VSCode浏览器 Chorme 前置知识 ES6基础语法 课堂主题 同步及异步概念方块运动的实现promise的用法then的返还值Async 函数 和 await 课堂目标 理解并学会使用promise使用方式以及async 、await的使用 同步异步概念 js是单线程 单线程…

动态规划-多状态问题——LCR.090.打家劫舍

1.题目解析 题目来源&#xff1a;LCR.090.打家劫舍——力扣 测试用例 2.算法原理 1.状态表示 每一个房子都有两个状态&#xff1a;被偷与不被偷&#xff0c;因此需要两个dp表f/g来表示被偷与不被偷&#xff0c;其中f[i]/g[i]表示小偷走到第i个位置的最大偷钱数 2.状态转移方程…

【开源物联网平台】Fastbee系统稳定性和压测报告

目录 一、机器准备 二、压测步骤 2.1 去除认证&#xff0c;修改clientid识别问题 2.2 添加重发布脚本 三、压测结果 四、压测工具使用 一、机器准备 准备两台服务器&#xff0c;一台为部署fastbee服务端应用&#xff0c;另一台为客户端压力机。其中&#xff1a; fastbee…

TensorRT-LLM七日谈 Day3

今天主要是结合理论进一步熟悉TensorRT-LLM的内容 从下面的分享可以看出&#xff0c;TensorRT-LLM是在TensorRT的基础上进行了进一步封装&#xff0c;提供拼batch&#xff0c;量化等推理加速实现方式。 下面的图片更好的展示了TensorRT-LLM的流程&#xff0c;包含权重转换&…

动态规划-简单多状态dp问题——面试题17.16.按摩师

多状态问题的核心就是每个位置不止有一个状态&#xff0c;因此需要多个dp表表示不同状态对应位置的值&#xff0c;然后根据题目考虑特定情况写出状态转移方程即可 1.题目解析 题目来源&#xff1a;面试题17.16.按摩师——力扣 测试用例 2.算法原理 1.状态表示 这里与路径问…

红米AC2100路由器原官方固件关闭IPv6防火墙

红米AC2100路由器原官方固件关闭IPv6防火墙 问题背景 我家里宽带开通了IPv6&#xff0c;并且获得了公网的IPv6地址。在同一Wi-Fi内部&#xff0c;可以使用公网IPv6正常访问。 但是&#xff0c;当我切换为手机流量&#xff0c;也就是公网环境&#xff0c;访问就失败了。 问题…

苹果最新论文:LLM只是复杂的模式匹配 而不是真正的逻辑推理

大语言模型真的可以推理吗&#xff1f;LLM 都是“参数匹配大师”&#xff1f;苹果研究员质疑 LLM 推理能力&#xff0c;称其“不堪一击”&#xff01;苹果的研究员 Mehrdad Farajtabar 等人最近发表了一篇论文&#xff0c;对大型语言模型 &#xff08;LLM&#xff09; 的推理能…

<<迷雾>> 第11章 全自动加法计算机(5)--顺序取数 示例电路

顺序地从存储器里取数的电路方案. info::操作说明 在开始之前, 地址计数器 AC 需要清零, 以指向地址 0000. 按一下开关 KAR, 将 AC 当前的地址锁存到 AR 地址寄存器. 按住 KRD, 不要松开(注: 系统中使用的是普通开关, 无需按住), 再按一下 KDR, 数据保存到寄存器 DR 中, 最后,…

Mapstruct的使用备忘【代替BeanUtils高效率属性拷贝】

文章目录 Mapstruct的使用备忘【代替BeanUtils高效率属性拷贝】1. 引入mapstruct依赖2. 数据准备2-1 准备一个子类&#xff0c;TestData2-2 准备两个类&#xff0c;SourceData&#xff0c;TargetData&#xff0c;属性完全一样 3. 定义Mapper接口【注&#xff1a;这里的Mapper是…

AIGC毕设项目分享:基于RAG的数字人对话系统及其应用

本研究的主要目标是设计并实现一个基于检索增强生成&#xff08;RAG&#xff09;技术的数字人对话系统&#xff0c;旨在提升数字人系统在多轮对话中的上下文管理、情境感知能力以及动态内容生成效果。系统结合了深度学习中的最新大语言模型技术&#xff0c;通过引入RAG框架来增…

概率论基础01_事件概率

目录 一、事件 1、概率 1.1基本事件 1.3必然事件 1.4不可能事件 1.5样本空间 1.6样本点 2、事件间的关系 2.1包含关系 2.2并集 2.3交集 2.4差集 2.5互斥事件 2.6对立事件 2.7完备事件组 3、运算律 3.1交换律 3.2结合律 3.3分配律 3.4对偶律 二、概率 1、…

10.MySql全局参数优化

从上图可以看出SQL及索引的优化效果是最好的&#xff0c;而且成本最低&#xff0c;所以工作中我们要在这块花更多时间。 一、全局参数 配置文件my.ini(windows)或my.cnf(mac)的全局参数&#xff1a; 假设服务器配置为&#xff1a; CPU&#xff1a;32核 内存&#xff1a;64G…

2025推荐选题|基于MVC的农业病虫害防治平台的设计与实现

作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参与学生毕业答辩指导&#xff0c;…

机器视觉AI场景为什么用Python比C++多?

好多开发者在讨论机在机器视觉人工智能领域的时候&#xff0c;纠结到底是用Python还是C&#xff0c;实际上&#xff0c;Python 和 C 都有广泛的应用&#xff0c;选择 Python而不是 C 可能有以下一些原因&#xff1a; 语言易学性和开发效率 语法简洁&#xff1a; Python 语法简…

【部署篇】Redis-01介绍‌

一、Redis介绍‌ 1、什么是Redis&#xff1f; ‌Redis&#xff0c;英文全称是Remote Dictionary Server&#xff08;远程字典服务&#xff09;&#xff0c;Redis是一个开源的、使用‌ANSI C语言编写的‌Key-Value存储系统&#xff0c;支持网络、可基于内存亦可持久化。‌ 它提…

Android Compose 控件基本属性

本文的代码由上一篇文章的Demo进一步书写完成, 传送门:Android Compose的基本使用-CSDN博客 _____________________________________________________________________________ 以下代码分别列举了控件的: 内边距,外边距,内容居中,渐变自定义边框,宽度权重,string资源引用等…

走进面向对象编程的奇妙世界

在当今的编程领域&#xff0c;面向对象编程&#xff08;Object - Oriented Programming&#xff0c;简称 OOP&#xff09;犹如一颗璀璨的明星&#xff0c;照亮了软件开发的道路。 面向对象编程是一种基于对象概念的编程范式。那么&#xff0c;什么是对象呢&#xff1f;对象可以…

Windows系统C盘爆满了,如何清理?

Windows系统C盘爆满了&#xff0c;如何清理&#xff1f; 大家好&#xff0c;我是秋意零。 相信使用过Windows系统的朋友&#xff0c;都见过C盘那道靓丽的 “红色风景线” &#xff01; 我自己的Win10系统&#xff0c;已经使用了4-5年时间了。最近频频出现"红色风景线&q…