 电商消息系统架构演进&mdash0 码力 | 22 页 | 12.22 MB | 1 年前3 电商消息系统架构演进&mdash0 码力 | 22 页 | 12.22 MB | 1 年前3
 领域驱动设计&中台/架构分层模型适配架构分层模型适配 吴雪峰@201811 — 有效防⽌止架构腐化实践 CONTENTS 01 DDD分层参考架构 02 严纪律律 防腐化 — 分层模型适配 03 分层模型适配实例例 DDD分层参考架构 DDD分层参考架构 给⽤用户提供界⾯面,关注⽤用户交互和体验 前端应⽤用 API服务 业务领域 基础设施 为前端应⽤用提供API服务,关注事务和分布式等技术性问题 领域模型和领域逻辑,关注业务概念。 接收外部请求并响应: 如HTTP请求, 消息处理理 • 事务管理理 • 认证 • 缓存 • ⽇日志 • 异常处理理 • 配置 • Session 技术⼈人员关注的层 腐化案例例: ⼤大量量业务逻辑堆积 模型: • View Object • Resource Model DDD分层参考架构 领域模型和领域逻辑,关注业务概念。 前端应⽤用 API服务 领域模型 基础设施 ⼲干系⼈人: 诉求: 表现业务概念和实现业务价值 要点: 业务建模和复杂性管理理 ⼯工作内容: • 建⽴立业务模型,并体现在代码上 • 管理理模型复杂度,适度拆分模块 • 实现业务逻辑 业务⼈人员关注的层 业务领域 腐化案例例: 亏空 ⼤大量量技术术语业务⼈人员完全看不不懂 模型: • 应⽤用服务 — 跨Bond Context DTO • 领域服务 — 跨聚合 • 聚合0 码力 | 39 页 | 2.54 MB | 1 年前3 领域驱动设计&中台/架构分层模型适配架构分层模型适配 吴雪峰@201811 — 有效防⽌止架构腐化实践 CONTENTS 01 DDD分层参考架构 02 严纪律律 防腐化 — 分层模型适配 03 分层模型适配实例例 DDD分层参考架构 DDD分层参考架构 给⽤用户提供界⾯面,关注⽤用户交互和体验 前端应⽤用 API服务 业务领域 基础设施 为前端应⽤用提供API服务,关注事务和分布式等技术性问题 领域模型和领域逻辑,关注业务概念。 接收外部请求并响应: 如HTTP请求, 消息处理理 • 事务管理理 • 认证 • 缓存 • ⽇日志 • 异常处理理 • 配置 • Session 技术⼈人员关注的层 腐化案例例: ⼤大量量业务逻辑堆积 模型: • View Object • Resource Model DDD分层参考架构 领域模型和领域逻辑,关注业务概念。 前端应⽤用 API服务 领域模型 基础设施 ⼲干系⼈人: 诉求: 表现业务概念和实现业务价值 要点: 业务建模和复杂性管理理 ⼯工作内容: • 建⽴立业务模型,并体现在代码上 • 管理理模型复杂度,适度拆分模块 • 实现业务逻辑 业务⼈人员关注的层 业务领域 腐化案例例: 亏空 ⼤大量量技术术语业务⼈人员完全看不不懂 模型: • 应⽤用服务 — 跨Bond Context DTO • 领域服务 — 跨聚合 • 聚合0 码力 | 39 页 | 2.54 MB | 1 年前3
 唯品会调度系统的前世今生高可用和分布式功能 功能单一,只支持Java,不支持 Shell(PHP)和消息驱动的作业调度 对任务超时、任务执行情况、监控逻辑 支持粒度功能较单一或缺乏 没有容器化选型? 调度产品的定位 简易开发、简单维护 高可用、分片并发处理、资源调度动态平衡 支持Java、Shell以及本地模式(VIP还支持消息模式) 统一配置、统一监控、统一管理 VIP弹性调度系统 -- Saturn Saturn 开源地址: Github.com/vipshop/Saturn 体系中的定位 服务化框OSP 开发框架Venus 唯品会基础架构体系 消息队列 VMS 全链路监控 Mercury 统一日志平台 dragonfly 任务调度平台 Saturn 统一配置中心 CfgCenter 统一鉴权中心 AuthCenter 服务网关 Janus 安全管理平台 Salus * * 领域模型 Ready Running Stopping Stopped 启用 触发(手工, 时间或消息) 停用 执行完成 停用 执行完成 作业状态变迁 内部系统集成 ZK 执行结点 Job A Job B 作业调度器 控制台UI 消息系统 控制、调度结果下发 作业控制 结点监听 作业调度 执行日志 监控日志 日志查询 消息订阅 告警信息 执行结果0 码力 | 58 页 | 5.40 MB | 1 年前3 唯品会调度系统的前世今生高可用和分布式功能 功能单一,只支持Java,不支持 Shell(PHP)和消息驱动的作业调度 对任务超时、任务执行情况、监控逻辑 支持粒度功能较单一或缺乏 没有容器化选型? 调度产品的定位 简易开发、简单维护 高可用、分片并发处理、资源调度动态平衡 支持Java、Shell以及本地模式(VIP还支持消息模式) 统一配置、统一监控、统一管理 VIP弹性调度系统 -- Saturn Saturn 开源地址: Github.com/vipshop/Saturn 体系中的定位 服务化框OSP 开发框架Venus 唯品会基础架构体系 消息队列 VMS 全链路监控 Mercury 统一日志平台 dragonfly 任务调度平台 Saturn 统一配置中心 CfgCenter 统一鉴权中心 AuthCenter 服务网关 Janus 安全管理平台 Salus * * 领域模型 Ready Running Stopping Stopped 启用 触发(手工, 时间或消息) 停用 执行完成 停用 执行完成 作业状态变迁 内部系统集成 ZK 执行结点 Job A Job B 作业调度器 控制台UI 消息系统 控制、调度结果下发 作业控制 结点监听 作业调度 执行日志 监控日志 日志查询 消息订阅 告警信息 执行结果0 码力 | 58 页 | 5.40 MB | 1 年前3
 大规模分布式系统架构下调测能力构建之道大规模分布式系统架构下调测能力构建之道 李鑫 大纲 分布式环境下开发的调测效率问题 应对之道 远程应用服务 契约测试 分布式消息服务 分布式缓存 分布式服务的“租户”隔离策略 总体调测框架实践 分布式环境下调测方法论 单体应用 服务化 微服务 小中型规模应用+小型团队 中大型规模应用+多团队协同 Cache DB NFS Load Balancer 行功能/接口 调测存在如下困难: 开发依赖重 联调成本高 变动把控困难 拆 应用拆分 数据拆分 团队拆分 分布式服务 API Gateway 分布式文件 分布式缓存 分布式消息 DB Cluster 连接 序列化 路由 负载均衡 … 问题示例 1. 我依赖一个远程服务,但在负责它的团队把它上线之前,我什 么也做不了 2. 我负责的功能依赖一堆的远程服务,为了本地调测,我必须从 我和其他团队共用一套分布式缓存服务,为了防止数据覆盖, 我只能和别人轮流排队上线调试,我等了一天,结果只能用一 个小时。 6. 我写了个消息Consumer,布到线上准备测测,结果,别人的消 息先到了,一下把我的预置数据全搞乱了… 7. 我的开发机性能还行,我想自己装一套依赖环境提高开发调测 效率,结果消息服务、缓存服务、服务框架装完一启动,80% 的系统资源就没有了,想想还有一堆的应用服务还没装,直接 泪崩… 80 码力 | 19 页 | 2.74 MB | 1 年前3 大规模分布式系统架构下调测能力构建之道大规模分布式系统架构下调测能力构建之道 李鑫 大纲 分布式环境下开发的调测效率问题 应对之道 远程应用服务 契约测试 分布式消息服务 分布式缓存 分布式服务的“租户”隔离策略 总体调测框架实践 分布式环境下调测方法论 单体应用 服务化 微服务 小中型规模应用+小型团队 中大型规模应用+多团队协同 Cache DB NFS Load Balancer 行功能/接口 调测存在如下困难: 开发依赖重 联调成本高 变动把控困难 拆 应用拆分 数据拆分 团队拆分 分布式服务 API Gateway 分布式文件 分布式缓存 分布式消息 DB Cluster 连接 序列化 路由 负载均衡 … 问题示例 1. 我依赖一个远程服务,但在负责它的团队把它上线之前,我什 么也做不了 2. 我负责的功能依赖一堆的远程服务,为了本地调测,我必须从 我和其他团队共用一套分布式缓存服务,为了防止数据覆盖, 我只能和别人轮流排队上线调试,我等了一天,结果只能用一 个小时。 6. 我写了个消息Consumer,布到线上准备测测,结果,别人的消 息先到了,一下把我的预置数据全搞乱了… 7. 我的开发机性能还行,我想自己装一套依赖环境提高开发调测 效率,结果消息服务、缓存服务、服务框架装完一启动,80% 的系统资源就没有了,想想还有一堆的应用服务还没装,直接 泪崩… 80 码力 | 19 页 | 2.74 MB | 1 年前3
 领域驱动设计&中台/化繁为简--DDD驱动复杂业务软件架构的演进产品云+端转型,核心业 务逐步实现服务化,不同 业务演化路径不同 简化业务模型复杂度 架构演进目标 不同业务间解耦 各业务独立演化 单体架构 共享模型 模糊分层 应对复杂业务挑战的思考 关注点分离 抽象建模 应对复杂业务挑战的策略 领域驱动设计 1 2 3 领域拆分 架构分层 构建领域模型 CONTENTS CONTENT 产品介绍 业务挑战及架构目标 架构演进 领域拆分 架构分层 构建领域模型 业务分析 2 1 3 4 分析业务流程 提炼业务规则 分析业务用例 识别业务对象 子域拆分 • 业务流程 • 专业知识 建模子域 计算子域 登录与 授权子域 报表子域 指标子域 做法子域 限界上下文拆分 • 业务用例 • 功能\语义相关性 • 技术应用 • 团队规模 建模子域 构件模型上下 文 模型编辑上下 文 计算子域 计算子域 报表子域 模型转换子域 做法子域 通用子域 汇总上下文 指标管理上 下文 三维模型转换 上下文 CAD翻模上下 文 模型检查上下 文 平法模型上下 文 截面钢筋模型 上下文 土建计算上下 文 钢筋计算上下 文 土建计算设置 上下文 钢筋计算设置 上下文 做法上下文 登录与授权 上下文 指标定制上 下文 限界上下文协作关系 报表子域0 码力 | 33 页 | 1.25 MB | 1 年前3 领域驱动设计&中台/化繁为简--DDD驱动复杂业务软件架构的演进产品云+端转型,核心业 务逐步实现服务化,不同 业务演化路径不同 简化业务模型复杂度 架构演进目标 不同业务间解耦 各业务独立演化 单体架构 共享模型 模糊分层 应对复杂业务挑战的思考 关注点分离 抽象建模 应对复杂业务挑战的策略 领域驱动设计 1 2 3 领域拆分 架构分层 构建领域模型 CONTENTS CONTENT 产品介绍 业务挑战及架构目标 架构演进 领域拆分 架构分层 构建领域模型 业务分析 2 1 3 4 分析业务流程 提炼业务规则 分析业务用例 识别业务对象 子域拆分 • 业务流程 • 专业知识 建模子域 计算子域 登录与 授权子域 报表子域 指标子域 做法子域 限界上下文拆分 • 业务用例 • 功能\语义相关性 • 技术应用 • 团队规模 建模子域 构件模型上下 文 模型编辑上下 文 计算子域 计算子域 报表子域 模型转换子域 做法子域 通用子域 汇总上下文 指标管理上 下文 三维模型转换 上下文 CAD翻模上下 文 模型检查上下 文 平法模型上下 文 截面钢筋模型 上下文 土建计算上下 文 钢筋计算上下 文 土建计算设置 上下文 钢筋计算设置 上下文 做法上下文 登录与授权 上下文 指标定制上 下文 限界上下文协作关系 报表子域0 码力 | 33 页 | 1.25 MB | 1 年前3
 领域驱动设计&中台/如何让DDD落地如何把需求拆解成⽤用户故事,然后如何把⽤用户故事转变成领 域故事,最后领域故事⼜又如何变成为代码。 02 从需求到代码 京⻄西商城的需求 ‣ 产品运营⼈人员可以添加新的商品,编辑产品库存,并发布到京⻄西商城,⽤用户 可以进⾏行行购买; ‣ 京⻄西商城的买家可以查看产品可购买的库存数量量,并⽣生成购买订单,买家可 以撤单,查看订单的状态,对订单进⾏行行⽀支付(⽀支付宝)。⽀支付成功后,仓储 订单 已创建 库存 已锁定 提交 订单 ⽤用户 SubmitOrderCommand OrderCreated StockLocked 订单聚合创建订单服务 接收 仓库聚合的事件订阅者 仓库聚合锁定库存服务 发送 LockStockCommand ⽣生成 ⽣生成 接收 ⽣生成 QueryOrderCommand 订单域查询服务 接收 OrderList ⽣生成 和原因给订单API适配器器 3.创建订单服务收到命令后,会把创建订单命令转换成订单,然后调⽤用订单仓库进⾏行行 保存,保存成功后会让事件发布器器发布订单已创建事件 4.事件发布器器会根据事件类型把订单已创建事件转发给商品库存订阅者, 5.商品库存订阅者收到事件以后会根据事件中的商品ID和订单数量量创建锁定商品库存 命令,然后给锁定商品库存服务进⾏行行库存锁定 6.锁定商品库存服务收到命令0 码力 | 32 页 | 3.25 MB | 1 年前3 领域驱动设计&中台/如何让DDD落地如何把需求拆解成⽤用户故事,然后如何把⽤用户故事转变成领 域故事,最后领域故事⼜又如何变成为代码。 02 从需求到代码 京⻄西商城的需求 ‣ 产品运营⼈人员可以添加新的商品,编辑产品库存,并发布到京⻄西商城,⽤用户 可以进⾏行行购买; ‣ 京⻄西商城的买家可以查看产品可购买的库存数量量,并⽣生成购买订单,买家可 以撤单,查看订单的状态,对订单进⾏行行⽀支付(⽀支付宝)。⽀支付成功后,仓储 订单 已创建 库存 已锁定 提交 订单 ⽤用户 SubmitOrderCommand OrderCreated StockLocked 订单聚合创建订单服务 接收 仓库聚合的事件订阅者 仓库聚合锁定库存服务 发送 LockStockCommand ⽣生成 ⽣生成 接收 ⽣生成 QueryOrderCommand 订单域查询服务 接收 OrderList ⽣生成 和原因给订单API适配器器 3.创建订单服务收到命令后,会把创建订单命令转换成订单,然后调⽤用订单仓库进⾏行行 保存,保存成功后会让事件发布器器发布订单已创建事件 4.事件发布器器会根据事件类型把订单已创建事件转发给商品库存订阅者, 5.商品库存订阅者收到事件以后会根据事件中的商品ID和订单数量量创建锁定商品库存 命令,然后给锁定商品库存服务进⾏行行库存锁定 6.锁定商品库存服务收到命令0 码力 | 32 页 | 3.25 MB | 1 年前3
 降级预案在同程艺龙的工程实践-王俊翔资源2 资源3 资源4 …… 资源4 ⼤大量量超时 统⼀一资源⽹网关 搜索引擎 API⽹网关 ⼤大量量请求超时 缺乏熔断设计 交易易故障 第三⽅方⽀支付 ⽀支付中⼼心 ⽀支付回写 消息队列列 ⽀支付通知 交易易中台 ⽀支付时限任务 出票处理理 队列列故障 已⽀支付订单被取消 ⽀支付超时 订单取消 缺乏降级设计 稳定性之路路到底有多远 如何设计⾯面向容错的系统,如何提升系统的可⽤用性 Netflix开源的一款容错框架,支持多种降级熔断技术 资源隔离 断路路器器 降级操作 请求合并 请求缓存 实践过程中遇到的问题 • 业务改造成本⾼高,代码耦合,维护成本增⾼高 • 固化策略略,需线下修改代码,测试,发布,线上应急策略略响应不不 友好 • ⽆无法⽀支撑多系统的复合指标计算,业务降级⽀支持不不友好 • ⼤大量量应⽤用各⾃自实现降级熔断,代码散落在各应⽤用,没有统⼀一的管 理理和治理理。久⽽而久 本地多队列列轮循,数据缓冲,合并异步发送 指标如何计算处理理 数据采集 KAFKA ETL 复合指标 ⾃自定义指标 系统指标 业务指标 指标脚本计算 指标规则计算 指标脚本 规则表达式 熔断 降级 条件 计算 降级消息 数据 存储 实时告警 规则配置 开发 ⽇日志解析规则 控制中⼼心 ETCD 降级服务 降级处理理 流处理理集群(Flink) HBase ES Redis 落地存储 数据服务0 码力 | 26 页 | 18.67 MB | 1 年前3 降级预案在同程艺龙的工程实践-王俊翔资源2 资源3 资源4 …… 资源4 ⼤大量量超时 统⼀一资源⽹网关 搜索引擎 API⽹网关 ⼤大量量请求超时 缺乏熔断设计 交易易故障 第三⽅方⽀支付 ⽀支付中⼼心 ⽀支付回写 消息队列列 ⽀支付通知 交易易中台 ⽀支付时限任务 出票处理理 队列列故障 已⽀支付订单被取消 ⽀支付超时 订单取消 缺乏降级设计 稳定性之路路到底有多远 如何设计⾯面向容错的系统,如何提升系统的可⽤用性 Netflix开源的一款容错框架,支持多种降级熔断技术 资源隔离 断路路器器 降级操作 请求合并 请求缓存 实践过程中遇到的问题 • 业务改造成本⾼高,代码耦合,维护成本增⾼高 • 固化策略略,需线下修改代码,测试,发布,线上应急策略略响应不不 友好 • ⽆无法⽀支撑多系统的复合指标计算,业务降级⽀支持不不友好 • ⼤大量量应⽤用各⾃自实现降级熔断,代码散落在各应⽤用,没有统⼀一的管 理理和治理理。久⽽而久 本地多队列列轮循,数据缓冲,合并异步发送 指标如何计算处理理 数据采集 KAFKA ETL 复合指标 ⾃自定义指标 系统指标 业务指标 指标脚本计算 指标规则计算 指标脚本 规则表达式 熔断 降级 条件 计算 降级消息 数据 存储 实时告警 规则配置 开发 ⽇日志解析规则 控制中⼼心 ETCD 降级服务 降级处理理 流处理理集群(Flink) HBase ES Redis 落地存储 数据服务0 码力 | 26 页 | 18.67 MB | 1 年前3
 领域驱动设计&中台/可视化的遗留系统微服务改造•基础设施⾃自动化 •容错设计 •演进式设计 可视化能帮我们什什么 掌握系统业务 明确系统边界 ⼩小步改造系统 可视化的认识遗留留系统 C4模型、⽤用户画像、⽤用户旅程 C4模型系统架构可视化 国家级 省级 道路路级 市级 C4模型系统架构可视化 系统上 下⽂文图 容器器图 代码图 组件图 已可视化 ⽤用户画像和旅程系统功能⽤用户可视化 ⽤用户画像 ⽤用户旅程 已可视化 的⾏行行为放在别处。如 果你要修改某个服务 的⾏行行为,最好只在⼀一 处修改。 领域驱动设计 ‣领域驱动设计是⼀一种处理理⾼高度复杂域的设 计思想,试图分离技术实现的复杂性, 围 绕业务概念构建领域模型来控制业务的复 杂性,以解决软件难以理理解,难以演化等 问题。团队应⽤用它可以成功地开发复杂业 务软件系统,使系统在增⼤大时仍然保持敏敏 捷。 事件⻛风暴暴⼯工作坊 - Event St TW的很多团队实践验证后,于2015年年11⽉月进⼊入 ThoughtWorks技术雷雷达 ‣Powerful:可以让实践者在数⼩小时内理理解复杂的业务 模型 ‣Engaging:把带着问题的⼈人和拥有答案的⼈人共聚⼀一 堂构建模型 ‣Efficient:跟DDD的实现模型⾼高度⼀一致,并能快速发 现Aggregate和 Bounded Context ‣Easy:标记都很简单,没有复杂的UML ‣Fun0 码力 | 54 页 | 3.85 MB | 1 年前3 领域驱动设计&中台/可视化的遗留系统微服务改造•基础设施⾃自动化 •容错设计 •演进式设计 可视化能帮我们什什么 掌握系统业务 明确系统边界 ⼩小步改造系统 可视化的认识遗留留系统 C4模型、⽤用户画像、⽤用户旅程 C4模型系统架构可视化 国家级 省级 道路路级 市级 C4模型系统架构可视化 系统上 下⽂文图 容器器图 代码图 组件图 已可视化 ⽤用户画像和旅程系统功能⽤用户可视化 ⽤用户画像 ⽤用户旅程 已可视化 的⾏行行为放在别处。如 果你要修改某个服务 的⾏行行为,最好只在⼀一 处修改。 领域驱动设计 ‣领域驱动设计是⼀一种处理理⾼高度复杂域的设 计思想,试图分离技术实现的复杂性, 围 绕业务概念构建领域模型来控制业务的复 杂性,以解决软件难以理理解,难以演化等 问题。团队应⽤用它可以成功地开发复杂业 务软件系统,使系统在增⼤大时仍然保持敏敏 捷。 事件⻛风暴暴⼯工作坊 - Event St TW的很多团队实践验证后,于2015年年11⽉月进⼊入 ThoughtWorks技术雷雷达 ‣Powerful:可以让实践者在数⼩小时内理理解复杂的业务 模型 ‣Engaging:把带着问题的⼈人和拥有答案的⼈人共聚⼀一 堂构建模型 ‣Efficient:跟DDD的实现模型⾼高度⼀一致,并能快速发 现Aggregate和 Bounded Context ‣Easy:标记都很简单,没有复杂的UML ‣Fun0 码力 | 54 页 | 3.85 MB | 1 年前3
 领域驱动设计&中台/淘宝应用架构升级——反应式架构的探索与实践能达到这种效果? CONTENTS 01 架构升级的效果 02 架构升级的思考 03 架构升级的实践 架构升级的思考 现有架构的问题? 现有架构的问题 同步等待 • 现有同步模型,线程 多 load ⾼高 • 资源利利⽤用率 应⽤用本身的解决⽅方案? 并⾏行行度有限 • ⽆无法纯业务依赖并发 • 微服务化让问题更更凸 显 • RT 累积 RT 与 编程框架 • 中间件 • 业务 编程框架选型 Rx* (RxJava/RxJS/RxSwift) Project Reactor Akka Stream 特点 * 出现早(7年年前)、已发布 V2 * 在 Android ⼴广泛使⽤用,有⽤用户基础 * 全栈:客户端 + 服务端 + 前端 * 活跃度:RxJava Github Java 排名 No. 2 出现较晚(3年年) 接⼝口不不变、分段实施、不不返回 Flowable * 更更⾃自然的流式 ⽀支持业务直接返回 Flowable 3. 缓存(Cache) 4. 消息(Queue) * 天然异步 * 已有集成,或集成成本低 5. DB(JDBC)(Block) * ⽤用 Ali JVM协程 异步集成 * 或⽤用线程池异步集成0 码力 | 27 页 | 1.13 MB | 1 年前3 领域驱动设计&中台/淘宝应用架构升级——反应式架构的探索与实践能达到这种效果? CONTENTS 01 架构升级的效果 02 架构升级的思考 03 架构升级的实践 架构升级的思考 现有架构的问题? 现有架构的问题 同步等待 • 现有同步模型,线程 多 load ⾼高 • 资源利利⽤用率 应⽤用本身的解决⽅方案? 并⾏行行度有限 • ⽆无法纯业务依赖并发 • 微服务化让问题更更凸 显 • RT 累积 RT 与 编程框架 • 中间件 • 业务 编程框架选型 Rx* (RxJava/RxJS/RxSwift) Project Reactor Akka Stream 特点 * 出现早(7年年前)、已发布 V2 * 在 Android ⼴广泛使⽤用,有⽤用户基础 * 全栈:客户端 + 服务端 + 前端 * 活跃度:RxJava Github Java 排名 No. 2 出现较晚(3年年) 接⼝口不不变、分段实施、不不返回 Flowable * 更更⾃自然的流式 ⽀支持业务直接返回 Flowable 3. 缓存(Cache) 4. 消息(Queue) * 天然异步 * 已有集成,或集成成本低 5. DB(JDBC)(Block) * ⽤用 Ali JVM协程 异步集成 * 或⽤用线程池异步集成0 码力 | 27 页 | 1.13 MB | 1 年前3
 数字货币交易系统架构 Python实现 黄毅TPS, 延迟10ms • 能睡个好觉(数据持久化,数据最终一致性,容错) • 设计简单,运维方便 交易系统架构设计-关键点 • 内存撮合服务的状态持久化和高可用 • 消息处理顺序的保证 • 异步服务之间消息传送的可靠性 • K线:实时的分组聚合操作 • 高效利用关系数据库 交易系统架构设计-架构图 撮合 资金清算 行情推送 K线计算 历史成交 订单状态 PG Redis 交易系统架构设计-撮合服务 • C++实现的Redis Module • 复用Redis本身的aof持久化和replication • 撮合结果直接输出到本地的redis stream(无需主动发送消息给其他服务) • 下游任务订阅redis stream $ redis-cli > ob.limit b{btc_usdt} * 10000 buy 1 10000 88181047656742912 交易系统架构设计-计算K线 1571408580000 “[9000,9000,9000,9000,1]” 交易系统架构设计-redis stream • Kafka-like • 一个订阅者的情况,消息有序 • Consumer group负载均衡(不保证消息顺序) • 可以批量处理消息 • 在同一个事务中存储处理结果和更新消费offset $ redis-cli > xread block 60 count 100000 streams0 码力 | 24 页 | 799.65 KB | 1 年前3 数字货币交易系统架构 Python实现 黄毅TPS, 延迟10ms • 能睡个好觉(数据持久化,数据最终一致性,容错) • 设计简单,运维方便 交易系统架构设计-关键点 • 内存撮合服务的状态持久化和高可用 • 消息处理顺序的保证 • 异步服务之间消息传送的可靠性 • K线:实时的分组聚合操作 • 高效利用关系数据库 交易系统架构设计-架构图 撮合 资金清算 行情推送 K线计算 历史成交 订单状态 PG Redis 交易系统架构设计-撮合服务 • C++实现的Redis Module • 复用Redis本身的aof持久化和replication • 撮合结果直接输出到本地的redis stream(无需主动发送消息给其他服务) • 下游任务订阅redis stream $ redis-cli > ob.limit b{btc_usdt} * 10000 buy 1 10000 88181047656742912 交易系统架构设计-计算K线 1571408580000 “[9000,9000,9000,9000,1]” 交易系统架构设计-redis stream • Kafka-like • 一个订阅者的情况,消息有序 • Consumer group负载均衡(不保证消息顺序) • 可以批量处理消息 • 在同一个事务中存储处理结果和更新消费offset $ redis-cli > xread block 60 count 100000 streams0 码力 | 24 页 | 799.65 KB | 1 年前3
共 31 条
- 1
- 2
- 3
- 4













