领域驱动设计&中台/可视化的遗留系统微服务改造事件放在事件下⽅方; 5. 如果发现了了业务中的问题点,⽤用红⾊色便便利利贴记 录为什什么是⼀一个问题; 6.以上步骤完成以后,再从最后⼀一个事件开始来 反向验证事件的完整性(即:⾛走查前后事件的关 联关系,防⽌止有些事件被遗漏漏)。 通过事件的⽅方式对过去发⽣生的事情进⾏行行溯源, 因为过去所发⽣生的对业务有意义的信息都会 通过某种形式保存下来。事件⻛风暴暴能够让领 域专家和⼯工作坊参与者⼀一起明确在业务上究 营⼈人员 产品运 营⼈人员 寻找聚合 事件⻛风暴暴 命令⻛风暴暴 寻找聚合 什什么是聚合? 如何寻找聚合? 聚合是⼀一组相关领域模型的集合 , 是⽤用来封装业务的不不变性。确保 关联关系紧密的领域模型能够内 聚在⼀一起。 1. 按照事件顺序依次通过提问来分析: • 这个事件会改变的领域模型是什什么?明确 领域模型(简单理理解就是事件中的涉及的 业务名词) • 这个领域模型是否可以独⽴立访问?如果是 再根据聚合的原则(下⼀一⻚页描述)来 检验上⾯面的划分结果是否匹配,如不不匹 配则基于划分原则并结合业务重新调整 聚合。 使⽤用聚合的⽬目的是封装业务的不不 变性,同时强迫⼤大家尽可能的简 化领域模型之间的关联关系。在 业务层⾯面进⾏行行⾼高内聚,低耦合的 设计。 为什什么⽤用聚合? 划分限界上下⽂文 聚合示例例 添加 商品 商品 已创建 商品已 编辑 编辑 商品 商品销售 价格已编辑0 码力 | 54 页 | 3.85 MB | 1 年前3
分布式异地多活架构实践之路讯飞输入法解决方案 • 实际应用效果 • 后续规划 技术挑战 几十毫秒的延迟; 跨机房性能较慢 机房天然延迟 专线费用高; 专线不稳定 跨机房专线问题 依赖小服务,有一 定改造成本; 依赖外部服务 服务依赖问题 减少对业务开发影响; 需要封装屏蔽细节 业务开发影响 如何精准调度; 如何合理调度 流量调度 存储系统自带同步 不成熟; 自研组件之间同步 数据同步 单点写,多点读) 非核心业务 老版本兼容服务、运营活动、配置、管 理平台、官网、论坛等 N/A 本地模式 (单点读写) 设计思路 核心业务异地多活 精准流量调度 数据同步 多元化 最终一致性 依赖关系优化 配套系统支撑 主 从 多 主 汇 聚 混 合 场景区分 封装屏蔽细节 容量合理规划 当前总体架构 合肥 北京 广州 HTTPDNS 智能DNS GSLB GSLB Servers 广州IDC 弱依赖,可控 SDK封装: 重点域名预解析 缓存域名解析结果(sp、 wifi名) 出错或快过期异步解析 合法IP动态下发 IP请求结果统计 多级兜底容错 解析IP合法,IP请求 解析IP不合法,固定IP请求 GSLB HTTPDNS 精准流量调度-用户 智能DNS 路由服务 路由服务 路由服务 北京 IDC 合肥 IDC 广州 IDC 用户与用户数据 机房对应关系, 注册后首次生成0 码力 | 36 页 | 1.66 MB | 1 年前3
领域驱动设计&中台/演进式架构的平台化落地故障 分析 定义架构 约束条件 微服务架构设计 服务地图 设计 API设计 部署架构设计 微服务⼯工程创建 开发 框架 架构 ⻛风格 资源 配置 … 架构演进 服务 关系 分析 代码 质量量 分析 数据 库分 析 领域 模型 分析 运⾏行行资 源管理理 PaaS、 容器云资 源管理理 公共 部分 产品、⼈人 员维护 定义通⽤用 约束条件 定义服务 代码⽣生成引擎服务 依赖 框架模 板 微服务 ⼯工程 码云 U D U D DevOps平台 微服务契约测试平台 Sonar U D D U U D U D U D U D U D U D U D U D U D U D U D U D U D U D 系统 31 •服务定义 •服务间及与外部 系统依赖关系 •DDD对象模型 •API定义 •服务与API关系 •多版本API管理理(API演进) 33 ⽣生成服务代码 •多框架⽀支持 •多架构⻛风格⽀支持(分层、DDD、 整洁等) •⾃自动⽣生成服务代码与配置 34 服务地图 数据库演进 与版本化管理理 •数据库引⼊入Flyway等 •⾃自动⽣生成初始脚本库 •⾃自动化变更更DB 35 契约 • 契约定义(依赖、集成关系) • 契约变更更评审0 码力 | 42 页 | 2.95 MB | 1 年前3
降级预案在同程艺龙的工程实践-王俊翔如何设计⾯面向容错的系统,如何提升系统的可⽤用性 强弱依赖 • 弱依赖 - 熔断限流,有损服务 • 强依赖 - 备选服务,降级实现 什什么是强弱依赖,如何确定强弱依赖 • ⽤用户是否强烈烈感知 • 核⼼心业务是否有损 service ⽤用户请求 serviceB serviceA serviceC serviceC- degrade 弱依赖 强依赖 强依赖 备选服务 熔断、限流 降级 • ⻩黄⾊色预警 - ⼤大规模⾮非核⼼心服务降级 • 红⾊色预警 - 所有⾮非核⼼心服务降级 • 预案编排 • 根据链路路关系、同等级优先级进⾏行行预案编排, 形成降级执⾏行行链路路 • 线上实时预案测试、演练,演练数据回溯 业务不不断迭代,持续引⼊入新依赖,系统是否稳定可靠? 预案是否依然持续有效? 如何才能持续保障系统的⾼高可⽤用性? 故障演练 • 对预案进⾏行行有效性、合理理性验证 & ASM vm.loadAgent(agent) 3. 加载Agent vm.attach(pid) Jetty ⼩小结 • 从⽤用户感知、核⼼心业务影响⽅方⾯面,判断系统链路路中的强弱依赖 • 通过对服务统⼀一管理理,从全局刻画系统链路路熔断降级点,结合策略略和预案,通过持续不不断的治 理理保障系统的可⽤用性 • 通过反复的故障演练,发现系统中的薄弱点,并进⾏行行有效的预防 •0 码力 | 26 页 | 18.67 MB | 1 年前3
领域驱动设计&中台/化繁为简--DDD驱动复杂业务软件架构的演进截面钢筋模型 上下文 土建计算上下 文 钢筋计算上下 文 土建计算设置 上下文 钢筋计算设置 上下文 做法上下文 登录与授权 上下文 指标定制上 下文 限界上下文协作关系 报表子域 模型转换子域 CAD翻模上下 文 三维模型转换 上下文 D D ACL/C ACL/C 建模子域 模型编辑上下 文 构件模型上下 文 D U U U 钢筋计算上下 文 计算子域 土建计算设置 上下文 钢筋计算设置 上下文 U U D D C S C S 土建计算上下 文 U D S C 模型检查上下 文 • 识别真实依赖关系 • 确定上下文物理边界 • 业务演化的趋势 限界上下文解耦-统一接口设计 统一 接口 模型检查 上下文 CAD翻模 上下文 钢筋计算 上下文 截面钢筋模 型上下文 Facade模式 基于业务对象的钢筋模型 • 不同构件归纳抽象 • 分析业务对象及其关系 • 识别聚合、实体、值对象 柱截面钢筋模型 压顶截面钢筋模型 人防截面钢筋模型 截面钢筋 截面多边形 点筋 截面钢筋 规格 端头 弯钩 规格 线筋 位置 位置 标高 标注 …... 重新定义边界后的截面钢筋模型 • 检视模型中聚合、实体、值对象的关系 • 检视模型边界 柱截面钢筋模型 压顶截面钢筋模型0 码力 | 33 页 | 1.25 MB | 1 年前3
大规模分布式系统架构下调测能力构建之道调测存在如下困难: 开发依赖重 联调成本高 变动把控困难 拆 应用拆分 数据拆分 团队拆分 分布式服务 API Gateway 分布式文件 分布式缓存 分布式消息 DB Cluster 连接 序列化 路由 负载均衡 … 问题示例 1. 我依赖一个远程服务,但在负责它的团队把它上线之前,我什 么也做不了 2. 我负责的功能依赖一堆的远程服务,为了本地调测,我必须从 4. 依赖的远程服务逻辑发生变化了,但负责它的团队没有通知到 我,结果上线后直接导致生产事故。 5. 我和其他团队共用一套分布式缓存服务,为了防止数据覆盖, 我只能和别人轮流排队上线调试,我等了一天,结果只能用一 个小时。 6. 我写了个消息Consumer,布到线上准备测测,结果,别人的消 息先到了,一下把我的预置数据全搞乱了… 7. 我的开发机性能还行,我想自己装一套依赖环境提高开发调测 效率,结果消息服务、缓存服务、服务框架装完一启动,80% 的系统资源就没有了,想想还有一堆的应用服务还没装,直接 泪崩… 8. 办公区断网,所有线上依赖环境都无法访问了,得,今天啥也 干不了了,回家洗洗睡吧…. … ….. ……… 1 2 3 解决之道:通过技术手段,降低系统对外部的依赖,而“MOCK”,是最 有效的手段。 分布式服务框架mock能力构建 应用 服务容器(Consumer) Filter0 码力 | 19 页 | 2.74 MB | 1 年前3
声明式自愈系统——高可用分布式系统的设计之道-王昕State跟 Realized State之间的差 距,维持最终一致性 Ø 定期处理集群中的事件 Ø 系统必须是幂等的 控制器的设计理念 控制逻辑应该只依赖于当前状态 假设任何错误的可能,并做容错处理 尽量避免复杂状态机,逻辑不要依赖无法监控的内部状 态 每个模块都可以在必要时优雅地降级服务 每个模块都可以在出错后自动恢复 假设任何命令都可能被任何调用对象拒绝,甚至返回错 误结果 心跳异常 缓存热点 缓存限流 数据库热点 数据库宕机 数据库延迟 CPU 抢占 内存抢占 内存错乱 上下文切换 磁盘满 磁盘坏 网络抖动 网卡慢 断网 DNS 故障 系统单点 异步阻塞 依赖超时 内存溢出 不可读写 目录 Ø 分布式系统面临的高可用问题 Ø 设计和验证高可用分布式系统的工具与方法 Ø 设计和验证高可用分布式系统的案例分享 Ø 高可用系统的最佳实践总结 一个分布式消息系统的概念模型 不要有隐藏的内部 API Ø API 操作复杂度与对象数量成正比 Ø API 对象状态不依赖于连接状态 Ø 针对全局状态设计自愈容错机制 最佳实践分享 有关系统设计和运营 Ø 分开设计理想状态和实际状态 Desired State Realized State Ø 利用队列解耦系统 Ø 尽量不要依赖 DNS 做高可用 Ø 监控负载不均的情况 Ø 避免Self DoS 最佳实践分享0 码力 | 44 页 | 2.47 MB | 1 年前3
唯品会调度系统的前世今生Saturn的“前世今生” 黄国钦 (Chembo) 唯品会高级开发工程 师 內容主题 为何而生 瓜熟蒂落 有女初长成 女大须嫁 https://github.com/vipshop/Saturn 婆媳关系 为何而生 传统调度系统的问题、产品的定 位与选型 需要解决的问题 1 6 4 3 2 … 异构/多语言难以支持 5 缺乏统一监控、统一管理 (进程假死、运行状态未知) 缺乏容错、容灾,高可 Core VIP Executor (Venus, VMS) Console Core Open Source VIP Central Maven Repo 推送独立开源版本 开源版本直接依赖 开源情况 2016年12月,我们己开源! https://github.com/vipshop/Saturn 90+ 400+ 310+ Star 安装 Issue 我们在Github上等你 Job维度 Dashboard – 告警维度 内部集成 – 认证与授权 内部集成 – 命名空间管理CMDB 内部集成 – 监控系统/调用链 内部集成 – 流程管理 内部集成 – 容器管理 婆媳关系 那些年我们踩过的坑 坑1-ZK事件丢失 Curator-client-A Client-B Add data change listener for PathA Set PathA=10 码力 | 58 页 | 5.40 MB | 1 年前3
数字货币交易系统架构 Python实现 黄毅• 设计简单,运维方便 交易系统架构设计-关键点 • 内存撮合服务的状态持久化和高可用 • 消息处理顺序的保证 • 异步服务之间消息传送的可靠性 • K线:实时的分组聚合操作 • 高效利用关系数据库 交易系统架构设计-架构图 撮合 资金清算 行情推送 K线计算 历史成交 订单状态 PG Redis 下单 交易系统架构设计-撮合服务 • C++实现的Redis Module results) pg.execute(‘update task_offset set offset=%s’, [offset]) 交易系统架构设计-关系数据库批量操作 insert into trades values (1, …) (2, …) … psycopg2.extras.execute_values( cur, ‘insert %s’, data ) stream = io.StringIO() # 往stream写csv格式的数据 cur.copy_from(stream, ‘trades’) 交易系统架构设计-关系数据库批量操作 with tmp(id, amount) as ( values (1, …), (2, …), (3, …)) update orders0 码力 | 24 页 | 799.65 KB | 1 年前3
微服务和Service Mesh 在多个行业落地实践开关 API 监控 认证 鉴权 治理 文档 报表 微服务框架 (服务治理) 服务 目录 注册 发现 限流 熔断 降级 容错 路由 负载 均衡 参数 分流 拓扑 依赖 配置 中心 服务 监控 服务 告警 认证 鉴权 统计 概览 知识 库 APM (应用运行期监控) 运行时 拓扑 性能 监控 服务 筛选 调用 链 调用 环境手动触发 持续集成 www.163yun.com 微服务框架 (服务治理) 服务 目录 注册 发现 限流 熔断 降级 容错 路由 负载 均衡 参数 分流 拓扑 依赖 配置 中心 服务 监控 服务 告警 认证 鉴权 统计 概览 知识 库 服务 告警 监控 大屏 账户 审计 注册,发现,调用都提供鉴权 认证鉴权 接口文档统一维护 API网关负责流量接入 www.163yun.com 微服务框架 (服务治理) 服务 目录 注册 发现 限流 熔断 降级 容错 路由 负载 均衡 参数 分流 拓扑 依赖 配置 中心 服务 监控 服务 告警 认证 鉴权 统计 概览 知识 库 服务 告警 监控 大屏 账户 审计 粒度更细:可指定服务版本,类,方法级别 配置灵活0 码力 | 39 页 | 3.06 MB | 1 年前3
共 25 条
- 1
- 2
- 3













