-
谈如何构建易于拆分的单体应⽤ 郑渊 腾讯公司 ⾼级⼯程师 ⽬ 录 微服务架构的困境与突破 01 建模:通过表象看本质 02 基于go-kit构建易拆分的单体应⽤ 03 总结 04 微服务架构的困境与突破 第⼀部分 微服务架构的困境与突破 01 Monolith to Microservices To move from Monolithic to Microservices Interface (3) Database (1) User Interface (4) Infrastructure 微服务架构的困境与突破 ➢ 服务拆分难 • 模块职责不清晰,模块之间耦合严重,⾯向数据库交 互,循环依赖等等,导致服务拆分困难:1.0版本, 2.0版本,3.0版本...... (初期缺乏设计) ➢ 服务维护成本⾼ • 看起来不复杂的功能搞了N个服务,花了⼏天的时间 才把 微服务架构的困境与突破 ➢ 构建合理的业务模型(Monolith or Microservice) 1. 建模⽅法不只有领取驱动设计-DDD,还有⽤例驱动 设计-UDD等; 2. 并不是开始进⾏微服务拆分的时候才⽤到对应的建 模⽅法,在设计单体架构下同样也需要; ➢ 合适的时机选择合适的架构,⼤多数情况下单体先⾏, 尤其是对于创业公司或者⼤公司内部的创业项⽬ or ⼩项 ⽬ ➢ 选择基础设施相对完善的云平台和合适的业务框架
0 码力 |
27 页 |
13.04 MB
| 1 年前 3
-
庖丁解牛:华为云微服务工具解放开发者 部门:应用平台服务 作者:王启军 日期:20190920 Security Level: 目录 1. 微服务拆分工具 2. 契约管理工具 Huawei Confidential 3 微服务架构的优势 因素 单体架构 微服务架构 交付速度 较慢 较快 故障隔离范围 线程级 进程级 整体可用性 较低 更高 架构持续演进 困难 简单 沟通效率 运维复杂度 低 高 Huawei Confidential 4 微服务架构的第一大问题——如何拆分微服务? •影响因素 >团队大小 >交付周期 >业务方向 >故障范围 >现有数据规模 >吞吐量 >一致性 >…… Huawei Confidential 5 拆分不好,可能带来的问题 •拆分不好,可能带来的问题 >服务数量爆炸,运维复杂 >服务数量太少,不够灵活 >一个user story影响众多服务 story影响众多服务 >接口频繁变更 >大量关联查询 >系统架构复杂度提升 Huawei Confidential 6 通过微服务拆分工具解放开发者 支撑活动 方法论 • ThoughtWorks五步十一阶 • DDD聚合 • 事件源Event Sourcing • 命令查询责任分离CQRS 现有做法 业务改造 投入大 + 应用上云 + IaaS 应用微服务改造 + PaaS 业务创新
0 码力 |
14 页 |
1.54 MB
| 1 年前 3
-
应对复杂业务挑战的策略 领域驱动设计 1 2 3 领域拆分 架构分层 构建领域模型 CONTENTS CONTENT 产品介绍 业务挑战及架构目标 架构演进 总结展望 架构演进 1 2 3 领域拆分 架构分层 构建领域模型 业务分析 2 1 3 4 分析业务流程 提炼业务规则 分析业务用例 识别业务对象 子域拆分 • 业务流程 • 专业知识 建模子域 计算子域 计算子域 登录与 授权子域 报表子域 指标子域 做法子域 限界上下文拆分 • 业务用例 • 功能\语义相关性 • 技术应用 • 团队规模 建模子域 构件模型上下 文 模型编辑上下 文 计算子域 报表子域 模型转换子域 做法子域 通用子域 汇总上下文 指标管理上 下文 三维模型转换 上下文 CAD翻模上下 文 模型检查上下 文 平法模型上下 文 截面钢筋模型 限界上下文解耦-发布订阅机制 钢筋模型 上下文 建模模型 上下文 调度中心 平法模型 上下文 发布 解决: 上游模型变化,下游模型联动 发布-订阅机制 架构演进 1 2 3 领域拆分 架构分层 构建领域模型 架构分层 持久化层 领域层 CAD图纸管理 建模UI 通用UI组件 几何算法 通用框架机制 通用算法 CAD/BIM UI 图元绘制 显示层 应用层
0 码力 |
33 页 |
1.25 MB
| 1 年前 3
-
LeaseExecutor:负责定期与MDS通信,获取卷的元数据信息
元数据信息在打快照时会进行变化
MetaCache:元数据缓存
IOTracker:跟踪一个上层IO请求
IOSplitor:IO转换拆分
ChunkClient、CliClient:与Chunkserver进行通信
前者负责IO请求
后者负责获取复制组(copyset)的leader
MDSClient:负责与MDS交互,挂卸载卷、获取元数据信息 主要功能
提供接口
数据面:AioWrite/AioRead、Write/Read
控制面:Create/Delete、Open/Close、Rename等
IO处理:转换、拆分、合并
元数据获取及缓存
逻辑chunk与物理chunk映射关系
物理chunk所属的复制组(copyset)
复制组所在的chunkserver列表
复制组的leader信息
ChunkServer:通过raft维护复制组内的主-从关系CLIENT IO流程
用户下发一个写请求
off: 8M
len: 16M
请求落在两个逻辑chunk上,所以
请求会被拆分成两个子请求:
ChunkIdx 1, off: 8M len 8M
ChunkIdx 2, off: 0
len 8MCLIENT IO流程
子请求由哪个chunkserver处理,依赖以
0 码力 |
27 页 |
1.57 MB
| 5 月前 3
-
性能优化所做的事项还比较少,编译输出的页面存在较 24 > 2021年美团技术年货 大的性能问题,主要体现在以下两方面: ● 首屏渲染时间长。即使使用了 FutureBuilder 把业务代码拆分成 xxx.part.js 之后,main.dart.js 体积依然维持在 1.1M。单一文件加载、解析时间过长, 且静态资源缺少 CDN 化的支持,势必会影响首屏的渲染时间。 ● 滚动性能较差。 400K ),这给页面的加载性能带来很大的影响。为此,我们对代码进行分片,借 助浏览器对多文件并行加载的特性,可以有效提升页面的加载性能。 具体实施步骤是:将 main.dart.js 在 Dart 侧拆分成多份纯文本文件,前端通过 XHR 的方式并行加载并按顺序拼接成 Javascript 代码置于