大规模分布式系统架构下调测能力构建之道问题示例 1. 我依赖一个远程服务,但在负责它的团队把它上线之前,我什 么也做不了 2. 我负责的功能依赖一堆的远程服务,为了本地调测,我必须从 头到尾梳理代码,再写一堆的mock语句把他们全mock掉了。 每当业务逻辑变化了,代码中要增减相应的mock语句;每当依 赖服务上线后,要把测试用例中对应的mock语句去掉。对测试 用例的修改工作贯穿于整个开发工作之中。 3. 我和某同事通过服务框架进行调用联调,结果另一同事也把同 的结果。 应用无感知 无需修改应用代码,单元测试代码中也无需添加任何的mock语句。 服务 调用 Invoker … Remote Call 负载均衡 策略 Runtime Mock数据文件 远程服务 Mock配置 开关/策略… 路由 策略 … Mock过滤器 启 动 加 载 服务 调用 脚本引擎 Mock数据规范 格式规范: 1.静态匹配 2.动态匹配 Memcached 采用普通的ConcurrentHashMap类进行 模拟即可。 redis 情况比较复杂,需要考虑不同的数据格式。 String Hash List Set Sorted Set 问题:数据时效性问题如何解决? 数据格式 模型 对应Java模型 Hash MapList Map 0 码力 | 19 页 | 2.74 MB | 1 年前3
领域驱动设计&中台/演进式架构的平台化落地component component component microservice container ⼤大泥泥球 ⼤大量量⼦子尺⼨寸的应⽤用阻碍频 繁增量量变更更,因为⾼高耦合 性需要⼀一次部署⼤大量量代码、 ⼤大量量的应⽤用。 单例例架构 ⾮非结构的单例例架构 user interface Class Class Class Class Class Class Class Class 持续交付流⽔水线平台 ⾃自动测试 平台 微服务系统设计,研发与运维管理理 微服务 /API设 计 代码 ⽣生成 契约 服务 架构 演进 微服务 运维治 理理 部署架 构 设计 统⼀一协作平台 研发⼯工具连 为某企业做的微服务平台规划 部署架构设计 服务 契约 定义 契约 代码 评审 开 发 服务运⾏行行治理理 服务 部署 运⾏行行架构治理理 故障 分析 定义架构 定义架构 约束条件 微服务架构设计 服务地图 设计 API设计 部署架构设计 微服务⼯工程创建 开发 框架 架构 ⻛风格 资源 配置 … 架构演进 服务 关系 分析 代码 质量量 分析 数据 库分 析 领域 模型 分析 运⾏行行资 源管理理 PaaS、 容器云资 源管理理 公共 部分 产品、⼈人 员维护 定义通⽤用 约束条件 定义服务 约束条件0 码力 | 42 页 | 2.95 MB | 1 年前3
领域驱动设计&中台/可视化的遗留系统微服务改造⼩小步改造系统 可视化的认识遗留留系统 C4模型、⽤用户画像、⽤用户旅程 C4模型系统架构可视化 国家级 省级 道路路级 市级 C4模型系统架构可视化 系统上 下⽂文图 容器器图 代码图 组件图 已可视化 ⽤用户画像和旅程系统功能⽤用户可视化 ⽤用户画像 ⽤用户旅程 已可视化 突出⽤用户信息,诉求和价值体现 还原业务场景 可视化的划分遗留留系统 领域驱动设计、事件⻛风暴暴⼯工作坊、服务画布 事件:领域专家关⼼心的,在业务上真实 发⽣生的事 例例1: 客户订单已提交 例例2: 对账已完成,每⽉月末夜间触发 1. 确定要进⾏行行事件⻛风暴暴的业务场景,场景需要单 ⼀一⽽而且清晰; 2. ⽤用“XXX已XXX”的格式在橙⾊色便便利利贴上写下事 件,⼯工作坊参与者需要对事件定义达成⼀一致; 3. 根据时间顺序把事件便便利利贴贴到⽩白板上; 4. 如果⼀一个事件有同步发⽣生的其它事件,把其它 事件放在事件下⽅方; 划分限界上下⽂文 什什么是限界上下⽂文? 如何探索限界上下⽂文? 业务的扩展会产⽣生越来越多的领域模 型,任何⼤大型项⽬目都会存在很多的领 域模型。当不不同领域模型对应的软件 代码被放在⼀一起后,软件就变得庞⼤大 且复杂,代码难于理理解、且容易易出现 bug,所以需要通过限界上下⽂文来明 确定义领域模型的范围和职责。 为什什么使⽤用限界上下⽂文? 限界上下⽂文可以分为限界和上下⽂文两个词 来理理解,限界:指⼀一个界限,具体的某⼀一0 码力 | 54 页 | 3.85 MB | 1 年前3
唯品会调度系统的前世今生TBSchedule Elatic-Job Java事实任务标准 关注点在定时任务而非数据, 缺少分布式并行调度的功能 阿里早期开源的分布式任务调度系 统,代码略陈旧 作业类型较单一,只能是获取/处理 数据一种模式 当当开源的分布式任务调度系统 代码较新,使用Quartz进行调度。提供 高可用和分布式功能 功能单一,只支持Java,不支持 Shell(PHP)和消息驱动的作业调度 对任务超时、任务执行情况、监控逻辑 通过异步消息实现业务编排* 多种作业类型 人工指定 运行节点 系统自动 平衡负载 资源利用 • 灵活的运维配置与部署 • 高效资源利用 • 简便的管理 人工指定 自动平衡 资源平衡调度算法 框架代码 与业务代 码隔离 集中化动 态增加与 删除作业 • 简化开发,避免冲突,业务无侵入 • 易于发布与维护 • 框架升级与业务脱离 框架与业务隔离 Shell作业 Java/消息作业 Saturn Binding 分片 1 * 镜像(程 序包) 1 * 作业实 现包 1 * 物理机 1 1 作业名 1 * 模型结合 开发/测试 生产 GIT Check-in代码 Jenkins Pull代码 Build Image Registr y QA Tag Production Saturn DC/OS 配置作 业及资 源占用 申请资源 绑定作业 Saturn0 码力 | 58 页 | 5.40 MB | 1 年前3
数字货币交易系统架构 Python实现 黄毅taker.amount, self.maker.amount) def side(self): return self.taker.side 交易系统功能-伪代码 @app.post('/limit_order') def limit_order(order: Order): # 冻结资金 lock_user_fund(order) execute_values( cur, ‘insert into trades values %s’, data ) stream = io.StringIO() # 往stream写csv格式的数据 cur.copy_from(stream, ‘trades’) 交易系统架构设计-关系数据库批量操作 with tmp(id, amount) as ( values (1, …),0 码力 | 24 页 | 799.65 KB | 1 年前3
降级预案在同程艺龙的工程实践-王俊翔断路路器器 降级操作 请求合并 请求缓存 实践过程中遇到的问题 • 业务改造成本⾼高,代码耦合,维护成本增⾼高 • 固化策略略,需线下修改代码,测试,发布,线上应急策略略响应不不 友好 • ⽆无法⽀支撑多系统的复合指标计算,业务降级⽀支持不不友好 • ⼤大量量应⽤用各⾃自实现降级熔断,代码散落在各应⽤用,没有统⼀一的管 理理和治理理。久⽽而久之,⽆无⼈人知道系统内有多少降级点,降级是如 指标明细(ES) 降级⽇日志(ES) ETL 指标计算(Flink) 脚本引擎 查 询 服 务 ⽇日志数据 指标(Redis) 业务异常数据快照(ES) 熔断降级通知 降级服务管理理 故障代码注⼊入 降级服务注册设计 serviceA serviceB serviceC etcd register service metadata degrade strategy center 策略略灵活调整,实时监控策略略运⾏行行状态 应⽤用 / 服务 降级代码管理理 • 线上代码开发、测试、发布 • 降级代码统⼀一管理理 • 脚本代码动态编译,对象管理理 业务保障平台应 SDK 线下开发 策略略配置 测试 发布 WEB IDE 线上开发 降级⽅方法使⽤用 Git 降级代码 线下代码管理理 脚本 降级服务如何⾃自动探测恢复 ⽅方法代理理 降级 正常流程0 码力 | 26 页 | 18.67 MB | 1 年前3
付钱拉金融云系统架构演进和最佳实践早于用户 发现问题 如何让开发人员 对自己的代码 更加有安全感 ? 这些困惑的体现是什么呢? 开发人员如何提高代码质量,减少频繁迭代产生的bug? 线上环境突发事故,第一时间如何决策减少事故影响范围? 开发人员排查问题速度过慢? 随着业务的增长,问题越来越多,第一优先级需要解决什么? 系统突然CPU、内存利用率暴增,如何定位代码? 数据库连接数被耗尽,怎么办? 各种OOM如何预防? 实时监控(傻瓜式、开发不用查日志) 可视化运营 网络监控 主机监控 服务监控 业务监控 中间件、接口探测、日志抓取 状态类(响应码、交易状态、退款状态、商户状态) 耗时类(交易总时长、分段时长、SQL耗时、代码耗时) 统计类(订单量异常预警、非法IP预警、交易额过大) 网络异常(单通道和多通道、不同的分布场景) 撒网与实时监控 REAL-TIME MONITORING 可视化运营 VISUAL 调用混乱 组装困难 协议单一 当前架构的 适用范围 微服务迁移 继续前行 MOVE ON 统一API网关 规范 SPECIFICATION 一 编程规范 1.业务代码中所有SQL耗时打印耗时 2.业务代码中关键方法打印耗时 3.和第三方接口交互,需要设置连接超时和读取超时时间,避免同步线程阻塞 4.和第三方接口交互,需要考虑是否需要通过代理出网 5.和第三方接口交互,需要考虑是否要相互添加白名单0 码力 | 35 页 | 6.05 MB | 1 年前3
苏宁易购小程序架构实践 苏宁 禹立彬围绕着小程序,各厂家也推出了一系列针对小程序的生态标准,联合 登录,授权获取用户信息,支付,通知消息,客服等等 • 对于这些生态功能来说,也需要一系列基础服务去支持 小程序的不足 • 组件化能力不足,代码复用能力弱 • API不统一,代码无法兼容 • 这些呼唤着快速解决方案 苏宁的小程序群 • 苏宁易购小程序,苏宁拼购,苏宁特卖,苏宁母婴。。。 • 苏宁优惠等 苏宁小程序平台 1 小程序基础服务 在一个小程序上实现购 物流程,只能每个小程序都具备。 • 同步器中包含了最新的购物流程文件包——订单,购物车,商品详情 ,个人中心等 • 同步器同步代码,启动新小程序时,在购物主流程上的情况下,同步 生成标准项目。 代码同步器 新的垂直的小程序,使用同步器生成项 目脚手架。 微信小程序插件 • 面向活动玩法类 • 小游戏 • 微信官方提供 • 降级到Webview 易购系APP转换器 • 将小程序代码转换为基于ReactNative框架的易购版小程序 • 降低易购APP大小 • 减少开发成本 • 使用ReactNative同步实现微信小程 序组件 • 100+ API • 30+ Components 同步组件 • data转换为state • 样式重新解析 • Element转换 Babel转换代码 异常监控0 码力 | 36 页 | 833.39 KB | 1 年前3
领域驱动设计&中台/如何让DDD落地���DDD�� 和坚 AGENDA 01 为什什么DDD落地难 02 从需求到代码 03 当需求发⽣生变化时 04 把⼤大象塞进冰箱 01 为什什么DDD难落地 从2003年年由Eric Evans提出DDD以后,在软件开发领域⼀一直 都是雷雷声⼤大,⾬雨点⼩小。这⼏几年年之所以开始⽕火起来,主要的功 劳也要给队友“微服务”,那么这是为什什么呢? DDD的⽬目标是什什么 软件设计的⻔门槛是什什么 是什什么样的? 魔⻤鬼隐藏在细节之中 今天既然是讲落地,那么就从⼀一个实际需求出发,我们看看 如何把需求拆解成⽤用户故事,然后如何把⽤用户故事转变成领 域故事,最后领域故事⼜又如何变成为代码。 02 从需求到代码 京⻄西商城的需求 ‣ 产品运营⼈人员可以添加新的商品,编辑产品库存,并发布到京⻄西商城,⽤用户 可以进⾏行行购买; ‣ 京⻄西商城的买家可以查看产品可购买的库存数量量,并⽣生成购买订单,买家可 CreateOrderApplication OrderRepositoryJPA API DB OrderRepositoryMybatis 订单聚合 仓库聚合 领域层 领域故事如何变成代码 创建订单服务收到命令后,会把创建订单命令转换成订单,然后调⽤用订单仓库进⾏行行保 存,保存成功后会让事件发布器器发布订单已创建事件 软件中最痛苦的就是需求经常发⽣生变化,这也是DDD想要解 决的问题之⼀一,0 码力 | 32 页 | 3.25 MB | 1 年前3
QCon北京2018-业务高速发展下的互联网金融系统架构演变-张现双+扩张阶段 业务和团队规模增长迅速,多元化发展,对效率和质量提出更高要求 没有一种� 架构能� 包打天下 DB Server PC WEB 容错性、稳定性差 技术债迅速积累 代码安全带来挑战 初始,� 效率优先 成长,移动后台旁路追赶 DB主 Server PC WEB AND/IOS/H5/Open 静态站 网贷服务 借款流程 Cache集群 安全加密 幂等、接口可重入 接口规范化(命名、类型、长度等) 分布式事务,补偿、撤销机制 接口缓存,热数据尽可能前置 DB跟随服务 代码、逻辑、结构等都要适时重构 最终架构[简版] 移动后台打散,界限趋于不明显 极大消除冗余,三级两层划分 底层服务有序汇总直面前端 流量统一出口 积分系统 优惠券 基金服务 机房 LB / NG.. 网关 Cache 服务 抓大不能放小[细节决定成败] 线程阻塞>300 中间件内存管理、线程状态,连接状况 db的io,慢sql,索引,join等 代码review,数据结构,日志 GC TCP连接 第四部分 关于监控 如果没有监控… 盲 人 骑 瞎 马 , 夜 半 临 深 池 监控体系 } zabbix,datagod0 码力 | 42 页 | 19.96 MB | 1 年前3
共 18 条
- 1
- 2













