声明式自愈系统——高可用分布式系统的设计之道-王昕依据声明式自愈的理念设计系统 有一个统一的状 态持久化接口, 所有有状态模块 通过统一的接口 对应统一的对象 模型 配置模块对象只 需要包括 Desired State 每个领域的控 制器模块的逻 辑保证自己领 域独立自愈的 能力 改变状态的操作 必须是幂等的声 明式操作,没有 新声明时各模块 按照之前的声明 继续工作 控制器模块对象 包括Desired State 和 Realized 定期处理集群中的事件 Ø 系统必须是幂等的 控制器的设计理念 控制逻辑应该只依赖于当前状态 假设任何错误的可能,并做容错处理 尽量避免复杂状态机,逻辑不要依赖无法监控的内部状 态 每个模块都可以在必要时优雅地降级服务 每个模块都可以在出错后自动恢复 假设任何命令都可能被任何调用对象拒绝,甚至返回错 误结果 声明式自愈系统的现有框架——Kubernetes 声明式自愈系统设计理念的回顾 统一接口 Storage Networking Data 启动异常 进程被杀 服务器假死 断电 启动异常 超卖 进程死锁 负载均衡失效 业务线程池满 监控错误 流控不合理 心跳异常 缓存热点 缓存限流 数据库热点 数据库宕机 数据库延迟 CPU 抢占 内存抢占 内存错乱 上下文切换 磁盘满 磁盘坏 网络抖动 网卡慢 断网 DNS 故障 系统单点 异步阻塞 依赖超时 内存溢出0 码力 | 44 页 | 2.47 MB | 1 年前3
海量用户推送后台系统架构实践-曾振波01 06 03 07 05 04 08 模块化 异步化 并行化 缓存化 程序及系统优化 基础组件服务化 链接管理 系统安全 09 新技术的应用——K8S部署业务 模块化 • 模块业务逻辑All In导致相互影响,更新升级难度大 • 功能按照业务拆分解耦 • 数据和业务分离 • 快速迭代 • 模块间通过MQ/RPC交互 极光推送后台系统架构 01 Segment 消息化请求 • MQ - RabbitMQ, RocketMQ • 模块间解耦 • IDC数据同步 • 异步RPC • ICE - 负载均衡,AMI,AMD,多线程 极光推送后台系统架构 02 并行化 • 横向扩展处理能力 • 数据分片存储 • 多节点+分片+多副本架构 • 数据读写动态路由 • 请求并行处理 • 模块级别并行 • 代码级别并行 极光推送后台系统架构 03 OnlineMsg Data0-0 Data0-1 Data1-0 Data1-1 Data2-0 Data2-1 Mng0 Mng2 Mng3 缓存化 • 热点数据全部缓存 • 加快数据访问,减少请求处理时间 • 多级缓存 • 本地缓存 • Redis, Couchbase, LevelDB(PIKA), 定制化 极光推送后台系统架构 04 程序及系统优化 • 内存 • 静态分配0 码力 | 23 页 | 1.26 MB | 1 年前3
领域驱动设计&中台/可视化的遗留系统微服务改造business. ⾯面对巨⼤大复杂的遗留留系统, 我们该如何开始拆解? 代码依赖模式 我们推荐以模块(java包)为基本单位,从代码依赖的⻆角度看,有三种模式: package A class X { public void foo(){ Y.bar(); } } 依赖其他模块 package B class Y { public void bar(){} } X { public void foo(){} } package B class Y { public void bar(){ X.foo(); } } 被其他模块依赖 package A class X { public void foo(){} } 独⽴立存在 Structure101代码依赖分析 可视化代码地图 ⾃自动分析每⼀一层级 与Intellij或Eclipse相 结合,实时查看依赖, 指导拆解过程 已可视化 数据库依赖模式 模块A Data Mapper /ORM 相关联但不不属于 模块A的表 模块A Data Mapper /ORM 属于模块A的表 以模块(java包)为基本单位,从数据库依赖的⻆角度看,有两种模式: 属于模块A 的表 扫描数据库依赖 UserMapper.java UserMapper0 码力 | 54 页 | 3.85 MB | 1 年前3
降级预案在同程艺龙的工程实践-王俊翔强依赖 强依赖 备选服务 熔断、限流 降级 业界解决⽅方案 - HYSTRIX Netflix开源的一款容错框架,支持多种降级熔断技术 资源隔离 断路路器器 降级操作 请求合并 请求缓存 实践过程中遇到的问题 • 业务改造成本⾼高,代码耦合,维护成本增⾼高 • 固化策略略,需线下修改代码,测试,发布,线上应急策略略响应不不 友好 • ⽆无法⽀支撑多系统的复合指标计算,业务降级⽀支持不不友好 延时模型、超时模型、异常模型、⾃自定义代码模型 • 基于模型实现应⽤用故障、中间件故障模拟,实时对应⽤用程序进⾏行行 字节码插桩、拆桩 简洁易易操作后台 • 可视化UI,参数、配置下发,快速实现故障注⼊入 • 丰富的故障模块管理理功能 Exception Model Timeout Model Latency Model Agent Listener 故障注⼊入流程 故障演练 管理理后台 应⽤用程序 Agent Listener Agent Redis MySQL ⼆二⽅方服务 1. 发送Agent启动指令 2. Attach⽬目标JVM进程 Core.jar 核⼼心模块初始化 4. 参数下发、故障注⼊入、控制指令 Http通信 5. ⽬目标⽅方法字节码增强 6. MySQL延时模拟 6. Redis超时模拟 6. 服务异常模拟 Instrumentation0 码力 | 26 页 | 18.67 MB | 1 年前3
领域驱动设计&中台/架构分层模型适配灵活易易使⽤用的API 技术点: 性能,事务,分布式,安全等⾮非功能性需求 API服务 ⼯工作内容: • 接收外部请求并响应: 如HTTP请求, 消息处理理 • 事务管理理 • 认证 • 缓存 • ⽇日志 • 异常处理理 • 配置 • Session 技术⼈人员关注的层 腐化案例例: ⼤大量量业务逻辑堆积 模型: • View Object • Resource Model ⼲干系⼈人: 业务领域专家,业务领导 诉求: 表现业务概念和实现业务价值 要点: 业务建模和复杂性管理理 ⼯工作内容: • 建⽴立业务模型,并体现在代码上 • 管理理模型复杂度,适度拆分模块 • 实现业务逻辑 业务⼈人员关注的层 业务领域 腐化案例例: 亏空 ⼤大量量技术术语业务⼈人员完全看不不懂 模型: • 应⽤用服务 — 跨Bond Context DTO0 码力 | 39 页 | 2.54 MB | 1 年前3
付钱拉金融云系统架构演进和最佳实践BUSINESS 2.0 PAIN POINTS 业务野蛮发展 交易量高速增加 并发请求增加 交易响应速度过慢 数据库单表 数据量剧增 模块耦合度高 开发效率低下 … 思考 THINKING 解耦 异步化 扩容 排队 队列 缓存 冷热数据隔离 读写分离 分库分表 容灾 限制 池化 ACK ... 变化 VARIETY adapter oltp db0 码力 | 35 页 | 6.05 MB | 1 年前3
QCon北京2018-业务高速发展下的互联网金融系统架构演变-张现双+理 系 统 活动 DB主 DB从 版本管理 产品 ... 同步 …... 网站、基础服务 移动后台 业务和团队规模迅速扩张 粗粒度服务化,基础设施完善 CDN/页面缓存/静态站/缓存集群 移动后台旁路 流程double,冗余开始出现 移动后台单体 继续成长,瓶颈明显 后台日益庞大,业务冗余严重 N多业务排队上线,瓶颈明显 热点场景频发,影响单体稳定 热点场景频发,影响单体稳定 2pizza团队,系统单体制约 商城 核心服务 业务 网贷 保险 基金 商城 财富圈 健康财富 加密 验签 拦截 校验 安全 性能 并发 幂等 交易 缓存 基础服务 消息 监控 配置 报警 MIS OpenAPI 微信 财富圈 移动后台 商城MIS WAP … … Android/ios/h5/php/openApi 积分系统 合冗余 移动后台打散 轻业务上浮 重业务下沉 API接入 指标监控 配置管理 业务前置配置 日志 配置系统 安全控制 拦截、校验 接口签名 加解密 防刷 攻击类 接口缓存 接口重写 热点活动支持 热点功能前置 接口版本控制 业务前置控制 Ng+ LUA 流量调度 降级 限流 灰度 接口分发 ??� FNS Fund 宜睿 P2P BASE0 码力 | 42 页 | 19.96 MB | 1 年前3
大规模分布式系统架构下调测能力构建之道大规模分布式系统架构下调测能力构建之道 李鑫 大纲 分布式环境下开发的调测效率问题 应对之道 远程应用服务 契约测试 分布式消息服务 分布式缓存 分布式服务的“租户”隔离策略 总体调测框架实践 分布式环境下调测方法论 单体应用 服务化 微服务 小中型规模应用+小型团队 中大型规模应用+多团队协同 Cache DB NFS Load Balancer ,在此背景下进行功能/接口 调测存在如下困难: 开发依赖重 联调成本高 变动把控困难 拆 应用拆分 数据拆分 团队拆分 分布式服务 API Gateway 分布式文件 分布式缓存 分布式消息 DB Cluster 连接 序列化 路由 负载均衡 … 问题示例 1. 我依赖一个远程服务,但在负责它的团队把它上线之前,我什 么也做不了 2. 我负责的功能依赖一堆的远程服务,为了本地调测,我必须从 我,结果上线后直接导致生产事故。 5. 我和其他团队共用一套分布式缓存服务,为了防止数据覆盖, 我只能和别人轮流排队上线调试,我等了一天,结果只能用一 个小时。 6. 我写了个消息Consumer,布到线上准备测测,结果,别人的消 息先到了,一下把我的预置数据全搞乱了… 7. 我的开发机性能还行,我想自己装一套依赖环境提高开发调测 效率,结果消息服务、缓存服务、服务框架装完一启动,80% 的系统资源就没有了,想想还有一堆的应用服务还没装,直接0 码力 | 19 页 | 2.74 MB | 1 年前3
高性能高可用机票实时搜索系统所有的报价都实时计算,填充好 • ⼀一个巨⼤大的哈希表 • 响应所有渠道价格变动进⾏行行计算 • 快 • 0 变价 设计思路路 CAP BASE 理理论 按需计算 消息驱动 异步 分布式 分级缓存 ⽆无状态 搜索框架 PriceMerger 报价引擎 供应商直连 旗舰店 CacheManager 抓取 App WWW Touch 分销 Cache Redis MQ MQ 航班数据 运价数据 应⽤用层 聚合层 报价源 基础数据 搜索框架 遇到问题 解决⽅方案 • 报价数量量多,内存问题 • 报价源多,不不稳定 • 响应时间要求苛刻 • 搜索条件有热点 • 缓存报价不不准 • 尽量量⽤用原⽣生数据类型,编码 • 回数⽐比例例,异步搜索更更新 • 分批回数 • ⼀一致性哈希,负载均衡 • 供应商粒度,主动更更新 报价引擎 供应商规则 航司运价 SearchDB 航班数据 运价数据 cache cache cache cache PriceMerger <出发、到达、⽇日期、供应商列列表> 报价引擎 — 负载均衡 • ⼀一致性哈希 • 缓存命中率 • 热点航线均衡 • 系统⾼高可⽤用 Router PEK-SHA2017-10-10 Search PEK-SHA 0 码力 | 26 页 | 1.94 MB | 1 年前3
微服务和Service Mesh 在多个行业落地实践163yun.com 设计要点亓:数据库横向扩展 www.163yun.com 设计要点六:缓存的设计 APP缓存 CDN 接入层 静态资源 动态资源静态化 应用本地缓存 分布式缓存 数据库为中心 缓存为中心 www.163yun.com 设计要点七:消息队列与异步化 www.163yun.com0 码力 | 39 页 | 3.06 MB | 1 年前3
共 23 条
- 1
- 2
- 3













