-
## 谈如何构建易于拆分的单体应用

郑渊
腾讯公司
高级工程师

微服务架构的困境与突破 微服务架构的困境与突破 01
建模:通过表象看本质 02
基于go-kit构建易拆分的单体应用 03
GopherChina 2021
目录
总结 04
## 第一部分 微服务架构的困境与突破
## 微服务架构的困境与突破
 Database
(4) Infrastructure
## 微服务架构的困境与突破
## 服务拆分难
- 模块职责不清晰,模块之间耦合严重,面向数据库交互,循环依赖等等,导致服务拆分困难:1.0版本,2.0版本,3.0版本……(初期缺乏设计)
## 服务维护成本高
看起来不复杂的功能搞了N个服务,花了几天的时间才把测试环境跑起来。为
0 码力 |
27 页 |
13.04 MB
| 2 年前 3
-
## PyTorch
## 拼接与拆分
主讲人:龙良曲
## Merge or split
Cat
- Stack
Split
Chunk
## cat
## ■ Statistics about scores
- [class1-4, students, scores]
- [class5-9, students, scores]
## ☐ ☐ ☐
1 In [99]: a=torch
0 码力 |
10 页 |
974.80 KB
| 2 年前 3
-
0 码力 |
14 页 |
795.42 KB
| 2 年前 3
-
九、配置中心的设计与实践
八、服务的熔断,降级,限流设计
一、微服务化的基石:持续集成
七、性能优化之消息队列与异步化设计
二、静态资源分离与接入层设计
三、应用层设计之无状态化与容器化
四、应用层设计之服务的拆分,发现与编排
五、性能优化之数据库设计与横向扩展
六、性能优化之缓存的设计与横向扩展
## 设计要点一:持续集成

## 设计要点四:服务拆分与服务发现
服务C Docker

十一、统一日志中心的设计与实践
二、静态资源分离与接入层设计
十、配置中心的设计与实践
三、应用层设计之无状态化与容器化
互联网高并发微服务化架构设计
九、服务的熔断,降级,限流设计
四、应用层设计之服务拆分与服务发现
八、性能优化之消息队列与异步化设计
七、性能优化之缓存的设计与横向扩展
五、应用层设计之服务编排的最佳实践
六、性能优化之数据库设计与横向扩展
## API网关负责流量接入
!
0 码力 |
39 页 |
3.06 MB
| 2 年前 3
-
0 码力 |
45 页 |
5.12 MB
| 1 年前 3
-
日期:20190920

## 目录
1. 微服务拆分工具
2. 契约管理工具
## 微服务架构的优势
|因素|单体架构|微服务架构|
|---|---|---|
|交付速度|较慢|较快|
|故障隔离范围|线程级|进程级|
|整体可用性|较低|更高| |对工具的依赖|较低|较高|
|运维复杂度|低|高|
## 微服务架构的第一大问题——如何拆分微服务?
·影响因素
>团队大小
>交付周期
>业务方向
>故障范围
>现有数据规模
>吞吐量
一致性
>.....
## 拆分不好,可能带来的问题
•拆分不好,可能带来的问题
>服务数量爆炸,运维复杂
>服务数量太少,不够灵活
>一个user story影响众多服务
>接口频繁变更
>大量关联查询
>系统架构复杂度提升
## 通过微服务拆分工具解放开发者
微服务化改造典型流程
支撑活动
应用上云 + IaaS
应用微服务改造 + PaaS
拆表
拆界面及业务逻辑

领域拆分

2
架构分层

## 限界上下文拆分
CAD翻模上下文
建模子域
模型编辑上下文
截面钢筋模型上下文
做法子域 ## 限界上下文解耦-发布订阅机制
发布-订阅机制
建模模型上下文
发布
调度中心
解决:
上游模型变化,下游模型联动
钢筋模型
上下文
平法模型上下文
## 架构演进
领域拆分
架构分层
构建领域模型
## 架构分层
模型转换
显示层
CAD/BIM UI
建模UI
通用UI组件
CAD图纸管理
图元绘制
应用层
CAD识别
模型编辑
BIM模型转换
0 码力 |
33 页 |
1.25 MB
| 2 年前 3
-
LeaseExecutor:负责定期与MDS通信,获取卷的元数据信息
● 元数据信息在打快照时会进行变化
● MetaCache:元数据缓存
● IOTracker:跟踪一个上层IO请求
● IOSplitor: IO转换拆分
● ChunkClient、CliClient:与Chunkserver进行通信
● 前者负责IO请求
● 后者负责获取复制组(copyset)的leader
● MDSClient:负责与MDS交互,挂卸载卷、获取元数据信息 CLIENT主要功能
● 提供接口
● 数据面: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 8M
,这给页面的加载性能带来很大的影响。为此,我们对代码进行分片,借助浏览器对多文件并行加载的特性,可以有效提升页面的加载性能。
具体实施步骤是:将 main.dart.js 在 Dart 侧拆分成多份纯文本文件,前端通过 XHR 的方式并行加载并按顺序拼接成 Javascript 代码置于