领域驱动设计&中台/用状态机封装领域逻辑
用状态机封装领域逻辑 潘加宇 CONTENTS 01 状态机的作用 02 状态机要点和建模思路 03 状态机的实现 危险! 小孩耍大枪 危险! 新瓶装旧酒 Research?Re-Search? 连Re-Search都没有,随意发明新词 Subdomain?主题图。 测试 答对问题有奖金 金额从2.56元到20.48元 请扫我微信以便当场转账 加微信时烦告知尊姓大名 学校里经常教的 编译原理 电子设计自动化 通信协议 …… 作用 三个不同的图 图形 视角 映射到实现 类图 全局、静态 类的签名 序列图 局部(用例)、动态 类之间的协作 状态机图 类、动态 所有的逻辑 测试 答对问题有奖金 金额从2.56元到20.48元 请扫我微信以便当场转账 加微信时烦告知尊姓大名 作用 逻辑内移 都以为自己在做正常的事情, 系统却出问题了 减少get/set 接口变简单 要素 状态 行为由组合决定 复杂就在这里! 状态--表现相同行为的属性值和链接的组合 状态 状态机图 vs. 活动图 顶点和边的含义相反 不同的思考范型 “状态的类”要说得通! 状态 网络上随便搜来 的“状态机图” 状态 子状态 互斥 状态 分层复用行为 提炼公共迁移 状态 缺省和历史 不是“流程开始”的意思 进入状态时,缺省的子状态0 码力 | 30 页 | 1.75 MB | 1 年前3统一建模语言 UML 参考手册 - 基本概念
第二章至第十章展示了 ��� 的各种视图 同时显示了各种结构如何配合工作 ��� 一 览中 以一个简单的例子开始 对 ��� 的视图 概念作了简单的介绍 然后 在后续的 章节中 静态视图 用例视图 状态机视图 活动视图 交互视图 物理视图 模型管理 视图 扩展机制 对各个视图进行详细的讨论 它们分别从静态建模机制 动态建模机制 模型管理机制以及扩展机制对 ��� 进行探讨 � ��� 标准元素讨 ���������������������������������������������������������������������������������������������� �� 状态机视图������������������������������������������������������������������������������������������������� ����������������������������������������������������������������������������������� ��� 状态机视图 状态机视图 状态机视图 状态机视图 STATE MACHINE VIEW ���������������������������������������������������������������������������������0 码力 | 123 页 | 2.61 MB | 1 年前3声明式自愈系统——高可用分布式系统的设计之道-王昕
Realized State之间的差 距,维持最终一致性 Ø 定期处理集群中的事件 Ø 系统必须是幂等的 控制器的设计理念 控制逻辑应该只依赖于当前状态 假设任何错误的可能,并做容错处理 尽量避免复杂状态机,逻辑不要依赖无法监控的内部状 态 每个模块都可以在必要时优雅地降级服务 每个模块都可以在出错后自动恢复 假设任何命令都可能被任何调用对象拒绝,甚至返回错 误结果 声明式自愈系统的现有框架——Kubernetes 声明式自愈系统设计理念的回顾 统一接口 和对象模 型 自愈 能力 幂等操 作和状 态机 DS 和 RS Desired State 可重用部分 已完全实现 要在领域内 自己实现 如何设计好状态机和自愈协议? Writing Correct Software Is Hard! Math and Thinking Can Help Us! Ø TLA+ 是用来给(软件或硬件)系统建模的语言 Leslie Lamport TLA+试图用状态机而不是计算过程描述系统 更加关注系统的非正常输入 更加关注系统的稳定性可用性等特性而不是系统输出 分布式系统环境下没有单一的输入输出 TLA+是一种适合定义状态机的语言 定义一个状态机需要: 1. 定义所有可能的初始状态 2. 定义在特定状态下可能有哪些状态转换 一个程序可以用状态机描述 定义一个状态机需要: 1. 定义变量 2. 定义所有可能的初始状态0 码力 | 44 页 | 2.47 MB | 1 年前3Raft在Curve存储中的工程实践
大多数副本成功即可返回成功 • 速度取决于写的较快的大多数RAFT协议简介 • Leader:负责从客户端接受日志,把日志复制到其 他服务器,当保证安全性的时候告诉其他服务器应用 日志条目到他们的状态机中。 • Candidate: 发起选举。获取大多数选票的候选人将 成为领导者。 • Follower: 响应来自其他服务器的请求,如果接受不 到消息,就变成候选人并发起一次选举。 • 时间被 选举失败,这个任期就会没有领导⼈⽽结束。 raft选举leader raft任期RAFT协议简介 raft复制状态机 1. leader收到客户端的请求。 2. leader把请求指令记录下来,写入日志,然后并⾏发 给其他的服务器,让他们复制这条⽇志。 3. 当这条⽇志条⽬被安全的复制,leader会应⽤这条⽇ 志条⽬到它的状态机中。 4. 然后把执⾏的结果返回给客户端。 • 提供命令在多个节点之间有序复制和执行,当多个节 raft协议提出之后,涌现出了非常多的实现,比如etcd,braft,tikv等。 • braft是raft的一个实现,实现了raft的一致性协议和复制状态机,而且提供了一种通用的基础库。基 于braft,可以基于自己的业务逻辑构建自己的分布式系统。 • braft本身不提供server功能,需要业务自己实现状态机。 Node(一个raft实例) int init(const NodeOptions& options); void0 码力 | 29 页 | 2.20 MB | 5 月前3Idris 语言文档 Version 1.3.1
确 确定 定 定该程序会正确运行(即按照类型描述的规范运行)。 然而在现实中,软件依赖于状态,很多组件则依赖于状态机。它们可以描述像 奔 奃 奐 这样的网络传输协 议, 实现事件驱动的系统以及正则表达式的匹配。此外,像网络 奓 奯奣 奫 奥 奴 和文件这类的很多基础资源, 都由状态机隐式地管理;特定操作只有在资源处于特定状态时才可行,而这些操作也可以改变底层资源 的状态。 例如,只有向已建立连接的网络 例如,只有向已建立连接的网络 奓 奯奣 奫 奥 奴 发送消息才有意义,关闭 奓 奯奣 奫 奥 奴 会将其状态从“打开 ”切换为“关闭”。 状态机同样可以编码重要的安全性质。比如,在一个 奁奔 奍 (自动取款机)的软件 实现中, 有一点性质非常重要:奁奔 奍 只有在卡片插入且通过密码验证的状态下才能吐出钞票。 本教程将介绍Control.ST 库,它支持对带有状态和副作用的程序进行编程和推理。 该库已包含在 奉 奤 奲 型来描述带有状态的函数,以及 ST 用来描述顶层的状态转移。 接下来的章节(用类型表示状态机 夨 姩 妡妵 夷夸天 )描述了如何用类型表示状态机,以及如何定义接 接 接口 口 口以描述带有状态的系统。之后(复合状态 机 夨 姩 妡妵 夸夵天 )描述了如何复合带有多个状态机的系统。 它解释了如何实现同时使用多个状态机的系统, 以及如何基于低级系统来实现高级的带有状态的系统。 最后(示例:网络 S o cket0 码力 | 224 页 | 2.06 MB | 1 年前3Go语言 - 一些简单的读书分享
有问题,总会碰到断连不重 连的情况 • 上游发出来的订单状态机顺序因为⽹络问题会发⽣乱序,影 响我的计算流程 • 上游的业务团队会调整发出来的业务消息,经常导致下游发 ⽣故障 举例 公司内和队列相关的业务总是出故障,⽐如: • 公司⾥的团队使⽤的 kafka sdk 有问题,总会碰到断连不重 连的情况 • 上游发出来的订单状态机顺序因为⽹络问题会发⽣乱序,影 响我的计算流程 •0 码力 | 16 页 | 9.09 MB | 1 年前3PyConChina2022-深圳-Python赋能智慧物流-康昊
ResearchAndMarkets.com Python赋能智慧物流 1-行业背景 · AMR调度系统 AGV/AMR两大核心技术领域 AGV/AMR本体定位/控制技 术 AGV/AMR集群调度系统 -状态机 -通讯模块 -运动控制 -任务执行 -外设 对接 -任务调度 -路径规划 -交通管制 -AMR控 制 -外设对接 Python赋能智慧物流 1-行业背景 · 传统AMR调度系统 - 部署限制 Dynamic A* D* Lite F = g + h h:传统启发函数+额外代价 Python赋能智慧物流 2-系统/模型实现 · 增强系统鲁棒性 - 准确的抛出异常,快速处理 - 引入状态机,在稳定状态中判断 - “高内聚,低耦合” - 判断数据的时效性 Python赋能智慧物流 2-系统/模型实现 · 产品价值 Python赋能智慧物流 2-系统/模型实现 应 用 层 驱0 码力 | 22 页 | 3.81 MB | 1 年前3Await-Tree Async Rust 可观测性的灵丹妙药 - 赵梓淇
• Ownership 与 Lifetime • 无栈协程 Async Rust 回顾 Rust 的无栈协程抽象 — Future Async Rust 回顾 • 通过 poll 驱动的状态机 • 组合嵌套为调度单元: Task • async fn 语法糖 Async Rust 观测与调试的痛点 Async Rust 回顾 • 特性: Future 灵活的可组合性 • 任意定制 Tree 简化实现 • 无 Unsafe 代码 Await Tree 的实现 Await Tree 的设计原理与实现 • Future Adapter API 设计 • Adapter 内部维护状态机以操作 Await-Tree Await-Tree Async Rust 可观测性的灵丹妙药 Await-Tree 的 设计原理与实现 2 回顾 Async Rust 的设计与痛点 10 码力 | 37 页 | 8.60 MB | 1 年前3高可用分布式流数据存储设计-李玥
consensus algorithm” Raft⼀一致性算法 2014 线性 任⼀一时刻⾄至多只有⼀一个请求在执⾏行行 幂等 使⽤用相同参数重复执⾏行行,能获得相同结果 复制状态机 Replication 0 1 2 3 4 5 6 7 8 9 10 11 0 1 2 3 4 5 6 7 8 lastApplied lastApplied commitIndex 顺序⼀一致 已提交位置之前的⽇日志具有不不变性。 对于提交的⽇日志,相同位置上Follower的⽇日志和Leader上是⼀一样的。 强⼀一致 如果两个节点上的⽇日志完全相同,并且这些⽇日志都已经被状态机执 ⾏行行,那么这两个节点的状态是相同的。 集群节点数越多性能越好吗? NO 引⼊入Observers 并⾏行行复制-CAS Atomic Hardware Primitives: faa0 码力 | 36 页 | 6.02 MB | 1 年前3Rust分布式账务系统 - 胡宇
处理被共识的 events ,更新状态机 (账户表) ○ 去重 & 更新余额 ○ 关键路径采用无锁单线程 账户层: Auticuro 分布式账务系统 1 2 3 4 ● 1. 接受转账请求,转换成 events ● 2. 将 events 送入 Raft 共识,等待 events 被多数节点保存 ● 3. 处理被共识的 events ,更新状态机 (账户表) ● 4. 回调完成请求0 码力 | 27 页 | 12.60 MB | 1 年前3
共 94 条
- 1
- 2
- 3
- 4
- 5
- 6
- 10