当前位置: 首页 > news >正文

流架构的读书笔记(2)

流架构的读书笔记(2)

一、建模工具之一沃德利地图

推测技术的发展,交流和辩论思想的最有力的方法是沃德利地图

沃德利地图的制作步骤
1确定范围和用户需求
2确定满足用户需求所需的组件
3在一条范围从全新到被人们接受的演进轴上评估这些组成
部分的演进过程

地图的横轴是演化进程,从起源,定制,产品,商品四个阶段.
地图的纵轴是价值链的可见性的度量,从不可见到可见的过程.

在做地图的时候,需要问自己的问题有
谁是需要流集成的用户?
一个不太显眼的组件对一个更显眼的组件有什么承诺呢?

二、流架构的主要的组件的简介

定义,创建和控制流连接的接口
定义如何以及何时在两个实体之间传输数据的协议(包括格式化和流控制)

逻辑关联:消费者与生产者协商建立和管理对流的访问的接口
发现:用于发现流的来源并描述其属性(如数据量,使用的协议)的接口

逻辑关联的接口在生产者与消费者(或他们的代理,如有使用)之间
建立了一个关于如何打包和支付数据的契约。这个接口将允许使用者
发送身份验证信息以建立订阅,订阅有效时管理该订阅,以及在不再需要
订阅时关闭该订阅。

使用发现接口来确定流的质量,例如技术流量,负载模式,财务费用等。

接口的例子:HTTP,WEBSocket,MQTT
消息传递协议的例子:MQTT,AMQP,Kafka Connect API ,Kabbit MQ API

源:收集数据的设备或者软件组件
处理器:处理传入的数据的组件
队列:一种代表生产者消费者收集存储转发流数据和事件的机制
接收器:用于显示,存储流结果的组件

容量:执行各种计算任务所需要的时间和资源
商品服务:许多流交互任务所需要的共享计算能力

三、技术演进阶段

起源:独特,罕见,不确定,不断变化,新发现
定制:仍在学习,不寻常,频繁变化
产品:包括租赁,定义更明确,稳定,同一
商品:包括工具集,高度标准化

产品阶段重点是改善运营,维护产品
商品阶段重点是无情地消除偏差,提高工业化程度和运营效率。

四、流架构的前身

实时数据共享的最早尝试只是允许共享访问文件或者是数据库。

组合数据库涉及重写(以及“重新布线如打开新的网络端口”)
现有的应用程序,或者插入新技术来同步两个应用程序的数据库
之间的数据(本质上就是在两个数据库之间创建一个数据流)

软件使用消息队列来实现异步通信。侧重于生产者和消费者解耦,
并提供各种传递保证。

MQTT是一种发布和订阅的协议。
基本操作如下:
1客户端(充当发布者,访阅者或者两者兼而有之)请求与代理连接。
 该连接被分配了一个连接ID,并由客户端和代理监控
2代理管理一个主题列表,使其能够识别对一组消息集合感兴趣的订阅者组
3作为订阅者的客户端请求订阅一个或者多个主题
4充当发布者的客户端向包含相关主题名称的代理发布消息。
5然后,代理使用主题名称将消息路由到适当的客户端

HTTP是一个请求应答的协议
WEBSocket是一个通信的协议

事件处理引擎包括 函数(包括低代码或无代码处理器)
基于日志的流平台,有状态的流处理。

可组合系统通常不会出现在商业平台中,因为这些平台试图通过预定义
关键流程或流程自动化元素来移除工作。

对于平台供应商来说,使用连接器是一种理想的方案,因为它们可以实现
生态系统形成和营销方案的一致性。通过控制谁和什么可以扩展你的平台,
你可以控制品牌,市场契合度和效用。还可以避免由于采用这种可组合的
方法所造成的针对平台的许多奇怪的意想不到的用法。

五、建设一个流的未来的三件事

1确定组织中对接近实时处理的需求,以响应组织软件系统内外状态的变化
2采用“事件优先”策略来架构和操作满足这些需求应用程序和服务,
包括与外部实体集成的地方
3 考虑参与流程标准,相关技术或组织网络的创建,以提高效率或通过流创建
新的市场生态系统。

六、流媒体和服务的四个类别

寻址和发现
命令和控制
查询和可观测性
遥测和分析

在现代复杂的系统环境中,必须跨服务协调工作,以正确定位,表示,
(即分配标识符)并且利用系统范围内的每个新实体和现有的实体。
这就是所谓的寻址和发现。

询问事件流的问题,并且使用该数据来理解行为查询和可观测性侧重于
询问和监控单个代理或特定的(尽管可能很大)组的代理。
而遥测和分析侧重于理解系统行为。

双向对话用消息,单向传信息用事件,事件用于警报,通知,简单状态
更新,系列事件的应用程序包括股票行情,气候数据跟踪,医疗保健监测等。

相关文章:

流架构的读书笔记(2)

流架构的读书笔记(2) 一、建模工具之一沃德利地图 推测技术的发展,交流和辩论思想的最有力的方法是沃德利地图 沃德利地图的制作步骤 1确定范围和用户需求 2确定满足用户需求所需的组件 3在一条范围从全新到被人们接受的演进轴上评估这些组成 部分的演…...

E6 中的 扩展运算符(Spread) 和 剩余运算符(Rest)

时间:2024.12.29 之前看到 Es6 中的 三点运算符,有如下的几种写法,有时候三点运算符放在左边,有时候三点运算符放在右边,老是混淆。今天记录下,加强理解。 先看一个问题 最近在看 《ECMAScript 6 入门》关于…...

Python的简单爬虫框架

爬虫为网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、…...

使用 uni-app 开发的微信小程序中,如何在从 B 页面回来时,重新拉取数据?

👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的全栈工程师 欢迎分享 / 收藏 / 赞 / 在看…...

Windows API Set:那些“只存在但不被使用“的DLL

API Set 是什么? 想象一下,Windows就像一个大型图书馆,而API Set就是这个图书馆的索引系统。但这个索引系统非常特别:它是直接内置在Windows加载器中的"虚拟目录"。 // 一个典型的API Set映射示例 api-ms-win-core-mem…...

黑神话悟空鼠标光标分享

效果图: 鼠标光标特点 这套鼠标光标的设计灵感来源于《黑神话:悟空》游戏中的角色和元素,具有以下特点: • 主题鲜明:光标设计紧扣游戏主题,采用了游戏中的元素,让玩家在使用电脑时也能感受到…...

编写一个简单的引导加载程序(bootloader)

编写一个简单的引导加载程序(bootloader)通常用于嵌入式系统或自定义操作系统。这里,我将为你提供一个基于x86架构的简单汇编语言 bootloader 示例。这个 bootloader 将会在启动时打印一条消息到屏幕上。 使用 NASM 汇编器来编写这个 bootlo…...

【Linux基础】进程(上) —— 概念、状态、优先级与环境变量

目录 一、进程的概念 1. 什么是进程 PCB进程控制块的理解 2. 查看进程的方式 ps ajx 指令 getpid系统调用 3. 另外一种查看进程的方式(了解) 4. 进程的常见调用 fork 创建子进程 现象说明 二、进程的状态 1. 操作系统层面的进程状态 ① 运行状态 ② 阻塞状态 ③…...

Rust: enum 和 i32 的区别和互换

在Rust编程语言中,enum(枚举)和i32是两种不同类型的数据结构,它们各自有不同的用途和特性。 i32 i32是一个32位的有符号整数类型。它用于存储整数值,范围从-2,147,483,648到2,147,483,647。i32是Rust中的基本数据类型…...

2024年终回顾

前言 很久没有更新博客,因为工作内容主要是内场开发,后来有点和互联网脱轨,断断续续上来看一下。这个总结应该也很简单,涉及以下的几个内容进行逐一说明 一、就业问题 这个问题可能很尖锐,从大环境来说,去…...

RGB、HSV颜色模型及MATLAB互换应用实例

一、前言 RGB和HSV模型是数字图像处理中颜色空间中的两种重要表示方式,RGB和HSV都是描述颜色的数学模型,可以用于表示和处理图像中的颜色信息。 RGB模型是一种基于光的颜色模型,由红(Red)、绿(Green&#x…...

# 【超全面了解鸿蒙生命周期】-生命周期补充

【超全面了解鸿蒙生命周期】-生命周期补充 鸿蒙所有的生命周期函数梳理 文章目录 【超全面了解鸿蒙生命周期】-生命周期补充前言一、AbilityStage的生命周期二、ExtensionAbility卡片生命周期三、Web组件常用生命周期 前言 本文是继之前写的生命周期函数梳理的进一步补充&…...

黑神话悟空游戏鼠标光标使用教程与下载

效果图: 鼠标光标特点 这套鼠标光标的设计灵感来源于《黑神话:悟空》游戏中的角色和元素,具有以下特点: • 主题鲜明:光标设计紧扣游戏主题,采用了游戏中的元素,让玩家在使用电脑时也能感受到…...

【机器学习】梯度下降

文章目录 1. 梯度下降概念2. 梯度下降的技巧2.1 动态设置学习率2.2 Adagrad调整梯度2.3 随机梯度下降(SGD)2.4 特征缩放 3. 梯度下降理论基础 1. 梯度下降概念 梯度:Loss 对参数在某一点的偏微分,函数沿梯度的方向具有最大的变化…...

【leetcode 07】707.设计链表

要点⭐ 链表的常见操作 获取第n个节点的值 头部插入节点 尾部插入节点 第n个节点前插入(先立新,在破旧) 删除第n个节点 class ListNode{int val;ListNode next;ListNode(){};ListNode(int val){this.valval;} } class MyLinkedList {//链表大…...

【Spring】详解(上)

Spring 框架核心原理与应用(上) 一、Spring 框架概述 (一)诞生背景 随着 Java 应用程序规模的不断扩大以及复杂度的日益提升,传统的 Java开发方式在对象管理、代码耦合度等方面面临诸多挑战。例如,对象之…...

短视频矩阵系统后端源码搭建实战与技术详解,支持OEM

一、引言 随着短视频行业的蓬勃发展,短视频矩阵系统成为了众多企业和创作者进行多平台内容运营的有力工具。后端作为整个系统的核心支撑,负责处理复杂的业务逻辑、数据存储与交互,其搭建的质量直接影响着系统的性能、稳定性和可扩展性。本文将…...

力扣每日刷题

24. 两两交换链表中的节点 - 力扣(LeetCode) 递归写法 做题思路:把需要交换的两个数的前一个数作为参数传入,然后使用一个变量保存这两个变量的后一个数,交换这个两个数,最后把第二个数(原第一…...

QT的信号和槽页面的应用

完善对话框,点击登录弹出对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如果账号和密码不匹配&…...

【Java】线程相关面试题 (基础)

文章目录 线程与进程区别并行与并发区别解析概念含义资源利用执行方式应用场景 创建线程线程状态如何保证新建的三个线程按顺序执行wait方法和sleep方法的不同所属类和使用场景方法签名和参数说明调用wait方法的前提条件被唤醒的方式与notify/notifyAll方法的协作使用示例注意事…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

快刀集(1): 一刀斩断视频片头广告

一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...

一些实用的chrome扩展0x01

简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...

yaml读取写入常见错误 (‘cannot represent an object‘, 117)

错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...

[特殊字符] 手撸 Redis 互斥锁那些坑

📖 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作,想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁,也顺便跟 Redisson 的 RLock 机制对比了下,记录一波,别踩我踩过…...