架构师训练营
2023-07-05 16:47:43 9 举报
架构师训练营
作者其他创作
大纲/内容
架构分类
按业务划分
业务架构图
颜色标注业务状态
分组管理业务功能
按领域划分
客户端
按模块划分
客户端架构
后端
按模块划分
系统/后端架构
按应用划分
应用架构
按组件划分
部署架构
前端
按模块划分
前端架构
4+1视图
分类
场景视图
逻辑视图
处理视图
开发视图
部署视图
问题
架构定义
4R架构定义
Rank
架构是分层的
Role
系统包含的角色
Relation
角色之间的关系
Rule
角色的运作规则
关联概念
系统
关联的个体
按照规则运作
系统能力超越个体能力
子系统
更大系统的一部分
模块
按照逻辑拆分
职责隔离
组件
按照物理拆分
单元复用
框架
组件规范
软件产品
架构复杂度设计
方法论
本质
降低系统复杂度
思路
针对复杂的地方进行架构设计
模式
高性能 高可用 可扩展 安全 成本
套路
分库分表 缓存 集群 分片微服务 DDD 异地多活
其他架构方法论
面向模式
核心思想:应用成熟的架构模式
问题1:不知道什么时候用哪个模式
问题2:太庞大,前后风格不一致
面向风险
核心思想:根据系统风险大小来进行架构设计
问题:风险是一种预判,不好把握
领域驱动
核心思想:通过领域建模来完成架构设计和代码
设计
设计
问题1:只关注业务,不关注存储和计算
问题2:容易混淆战略设计和战术设计
架构设计三原则
合适原则
宣言
合适优于业界领先
原因
资源约束
时间积累
业务背景
简单原则
宣言
简单优于复杂
原因
越复杂越不可靠
越复杂越难扩展
越复杂越难处理问题
演进原则
宣言
演化优于一步到位
原因
软件可变性
环境可变性
可扩展架构设计
拆分
拆分形态
服务
模块
插件
包
拆分粒度
内部复杂度
外部复杂度
理念
鸡蛋篮子理论第三法则
原则
平衡
先少后多
封装
预测变化
预测2年内
3次法则
封装变化
微内核
规则引擎
抽象层
设计模式
分层
架构可扩展
应用可扩展
代码可扩展
高性能架构设计
集群高性能
任务分配
设计核心
运行形态
SDK
服务器
配置获取
配置文件
配置中心
分配算法
随机 轮询 权重
hash 负载
任务分解
任务拆分
任务分类
读写分离
任务分段
数据库分表
运行形态
SDK
服务器
配置获取
配置中心
配置文件
算法
随机 轮询 权重
hash 负载
路由/sharding
单机高性能
计算高性能
进程模型
多进程
多线程
网络模型
TPC、PPC
Reactor
缓存模型
本地缓存
独立缓存
存储高性能
存储模型
B Tree
LSM
高可用架构
存储高可用
数据复制
复制格式
复制命令
简单 数据量小
数据可能不一致
复制数据
简单 复制数据量大
数据一致
复制文件
实现复杂 复制数据量大
数据一致
复制方式
同步复制
一致性强 可用性低 实现简单 性能低
异步复制
一致性弱 可用性高 实现简单 性能高
半同步复制
同步复制和异步复制的折中方案
多数复制
一致性强 可用性高 实现复杂 性能低
状态决策
独裁式
决策简单
决策者本身的高可用复杂
协商式
架构简单 决策简单
双主问题 用双通道解决
民主式
架构复杂 决策复杂
脑裂问题 用quorun机制
可用性高
计算高可用
任务分配
状态检测
运行形态
配置获取
分配算法
任务拆分
任务分解
核心理论
鸡蛋篮子理论第三法则:冗余法则
架构质量
可测试
架构可测试
全链路压测
手动触发系统行为
手动切换主备 触发选举
应用可测试
变量可修改
状态可见
行为可触发
可维护
架构可维护
全链路跟踪
提供各种维护操作
降级
下线
切换
应用可维护
变量可修改
MySQL SET
状态可见
MySQL SHOW
行为可触发
管理后台 停用某个定时任务
可观测
信息输出
日志
API
命令行
信息展现
运维平台
管理平台
成本
本质
约束架构
安全
架构安全
网络隔离
防火墙
流量清洗
运营商服务
机房切换
多机房
业务安全
业务漏洞
保底限制
每个用户最多买 X件 每天最多补贴100万
安全漏洞
安全框架
OWASP
内鬼破坏
权限控制
Shiro Spring Security
架构师职责
主要职责
架构设计前期
任务
澄清不确定性
识别负责性
方式
与业务方交流
与利益干系人交流
输出
业务架构图
核心场景流程
架构设计中期
任务
设计备选方案
选择备选方案
方式
架构小组讨论
写文档
汇报备选方案
输出
备选方案
方案评估
方案汇报
架构设计后期
任务
细化架构
完善架构
方式
写文档
架构宣讲
输出
最终架构文档
架构小组
虚拟团队
精英团队
外科手术团队
团队讨论 主架构师拍板
核心能力
判断
确定性思维
拆解
创造性思维
取舍
系统性思维
架构师是业务和技术之间的桥梁
高性能数据库存储
分库分表
分库
小表冗余
代码join
字段冗余
分表
垂直拆分
提升单机处理性能
水平拆分
提升集群处理性能
中间件应对join orderby count等操作
数据库分布式事务
2pc
参与者可能一直等待
需要人工介入
3pc
更复杂
脑裂
读写分离
原理
主机复制读写 从机负责读操作
复杂度
复制延迟
读写绑定
二次读取
业务分级
任务分解
代码封装
中间件封装
复制架构
备份架构
分类
主备复制
主从复制
优缺点
实现简单
RTO高
切换架构
分类
主备切换
主从切换
优缺点
实现复杂
RTO低
高可用
目的
可用
可恢复
指标
RTO
恢复时间目标
RPO
恢复点目标
WRT
工作恢复时间
MTD
最大可容忍宕机时间
选举架构
优缺点
实现最复杂
可用性最高
RTO低
算法
Bully
Raft
ZAB
Paxos
分片&分区
分区架构
本质
冗余IDC避免城市级的灾难 并提供就近访问
理由
DNS
GSLB
备份
集中式
独立式
互备式
分片架构
本质
叠加服务器提升写性能和存储性能
设计核心
核心原则
数据均匀分布
分片规则
分片数据
主键
时间
分片规则
hash
范围
路由规则
静态路由
配置文件
动态路由
配置中心
路由转发
高可用
独立备份
互相 备份
存储架构设计
设计步骤
估算性能需求
用户量预估
规划
推算
对比
用户行为建模
行为
数量
频率
性能需求计算
数据量
请求量
预留量
选择存储系统
方法
技术本质
技术储备
综合考虑
逻辑
单机是否能够存储
单机是否能够支撑写性能
单机是否能够支撑读性能
是否要自动切换
是否需要分区部署
设计存储方案
设计数据结构
验证 读写场景
评估 读写性能
常见存储系统
HBase
技术本质
no-relational
multidimensional sorted map
on top of Hadoop and HDFS
部署架构
分片集群
应用场景
Big Data 存储
数据模型
Table、Row、Column Family、Column、
Timestamp、Cell
Timestamp、Cell
性能量级
四台32核主机每秒插入70000条,读取大约是
25000条,扫描100条以内记录,每秒15000条
25000条,扫描100条以内记录,每秒15000条
HDFS
技术本质
file system
distributed
low-cost hardware
部署架构
分片集群
应用场景
大数据存储
数据模型
traditional hierarchical file organization
性能量级
带宽瓶颈
Clickhouse
技术本质
column-oriented
DBMS
OLAP
部署架构
分片集群
应用场景
OLAP
数据模型
SQL
性能量级
Redis
技术本质
in-memory
data structure store
部署架构
Master-slave
Sentinel
Sharding
应用场景
database
cache
message broker
数据模型
String
List
HashTable
Set
Sorted Set
性能量级
单机TPS 5~10万
多级缓存架构
多级缓存
本地缓存
App缓存
HTTP缓存
CDN
就近访问
边缘服务器
功能强大
贵
web服务器
静态资源
配合HTTP
应用缓存
进程内
进程外
本地SSD磁盘
分布式缓存
Redis
Memcached
概念
缓存
本质
空间换时间
分类
高性能计算架构
缓冲
暂存需要传输的数据的结构
缓存设计
缓存内容
缓存时间
缓存系统
更新机制
过期更新
定期更新
主动更新
不更新
分布式缓存架构
缓存问题
缓存穿透
空值缓存
当前数据缓存
缓存预热
随机失效
缓存雪崩
更新锁
后台更新
缓存热点
缓存副本
动态决策
分类
数据缓存
场景:实时性要求高 读多写少
核心:数据一致性
容忍不一致
本地消息表事务
消息队列异步删除缓存
结果缓存
场景:计算量大实时性要求不高
核心:缓存有效期于记过新鲜度的平衡
负载均衡架构
GSLB
应用:超大规模业务、多地部署
优点:功能强大
缺点:实现复杂
方案
基于DNS
基于 HTTP redirect)
基于IP欺骗
F5
功能强大,性能强悍
硬件实现
成本高
L4层负载均衡
LVS
功能简单,性能较强
Linux内核实现
成本一般
L4层负载均衡
Nginx
功能简单,性能一般
NGINX程序实现
成本低
L7HTTP负载均衡
级联负载均衡
分级
一级:DNS
二级:F5/LVS
三级:Nginx
四级:服务路由
设计核心
性能
可维护性
DNS
应用:地理位置和机房级别负载均衡
优点:标准协议
缺点
能力有限 不够灵活
DNS劫持
DNS缓存
HTTP-DNS
应用:App 客户端
优点:灵活可定制
缺点:非标协议 不太适合web业务
负载均衡技巧
业务负载均衡技巧
Cookie
自定义HTTP header
url query string
通用算法
轮询
实现简单
不会判断服务器状态
加权轮询
实现复杂
可以根据服务器性能来分配请求
不会判断服务器状态
随机
实现简单
不会判断服务器状态
负载优先
实现复杂 需要管理或者获取服务器状态
可以根据服务器状态进行负载均衡
性能优先
实现复杂 需要统计请求处理时间 需要耗费一定的CPU运算
可以根据性能进行负载均衡
hash
实现简单
不会判断服务器状态 除非服务器连接丢失
适合有状态 任务分片的场景
接口高可用
限流
分类
请求端限流
接入端限流
服务限流
算法
固定时间窗
滑动时间窗
漏桶算法
总量控制
令牌桶算法
速率控制
排队
本质
请求缓存
同步改异步
子主题
分类
应对请求太多
限流
排队
应对接口故障
降级
熔断
降级
停用接口和服务
降级非核心业务
框架或SDK实现
熔断
一段时间内不再访问故障的接口
框架或者SDK实现
微服务
4大挑战
分布式事务
本地事务表
消息队列事务消息
TCC
全局幂等
全局唯一ID
状态机
接口兼容
多版本接口
接口循环调用
6大陷阱
拆分粒度太细
服务关系复杂
团队效率下降
问题定位困难
系统性能下降
基础设施不完整
无法快速交付
服务管理混乱
微服务基础设施选项
微服务框架
嵌入式SDK
优点
架构简单 天然支持高可用
维护简单 无需维护单独的Proxy节点
缺点
应用侵入
多语言重复开发SDK
适应场景
单语言技术栈
代表
Dubbo
Spring Cloud
反向代理式
优点
应用无侵入
支持多语言
缺点
service proxy 需要集群来做高可用高性能
维护复杂 需要维护service proxy集群
适用场景
多语言技术栈 微服务规模小
代表
APISIX
网络代理式
优点
应用无侵入
支持多语言
架构是高性能高可用
缺点
维护复杂 需要维护每台机器
适应场景
多语言技术栈 大规模微服务
代表
istio
基础设施架构
服务接入层
服务网关
服务流控
服务降级
服务安全
服务运行层
服务发现
服务路由
服务容错
服务注册
技术支撑层
接口框架
分布式服务
自动化测试
容器编排
自动化部署
灰度发布
服务监控
服务跟踪
基础设施层
配置中心
日志中心
分布式锁
消息队列
微服务拆分
按业务拆分
DDD不适合落地
业务边界划分
业务专家
粗分然后演进
参考已有实现
服务拆分
三个火枪手
领域1对1
领域 多对1
领域 1对多
按质量拆分
按性能分
按业务重要程度分
按可用性分
按稳定性分
整体思路
拆分方式
按业务拆分
按质量拆分
基础设施要求
构建完善的基础设施
构建核心的基础设施
落地方式
一步到位
逐步迭代
高可用三大核心原理
CAP
定义
分布式数据存储系统不可能同时满足一致性 可用性和分区容忍性
三大约束
分布式
存储系统
同时满足
不可能三角
一致
可用
分区容错
BASE
定义
基本可用
软状态
最终一致性
FLP
定义
异步通信场景中,即使只允许一个节点失败,也没有任
何确定性算法能够保证非失败进程达到一致性
何确定性算法能够保证非失败进程达到一致性
三大约束
确定性协议
异步通信
所有存活节点
不可能三角
Fault Tolerance
Safety
Liveness
网络模型
Reactor
单Reactor 单进程/线程
优点
实现简单 无进程通信 无线程互斥和通信
无上下文切换 某些场景下性能可以做到很高
缺点
只有一个进程 无法发挥多核CPU的性能;只能采取部署多个系统来利用多核CPU但这样带来运维复杂度
Handler在处理某个连接上的业务时 整个进程无法处理其他连接的事情 可能导致性能瓶颈
单Reactor多线程
优点
充分利用了多核CPU的优势 性能高
缺点
多线程数据共享和访问比较复杂
Reactor承担所有时间的监听和响应 只在主线程中运行 瞬时高并发时会成为性能瓶颈
多Reactor多进程/线程
优点
利用多核CPU 性能高
实现简单 父子进程交互简单 subReactor子进程间无互斥或通信
缺点
实用技巧
多Reactor多线程 是目前比较接近完美的技术方案
集群架构设计
MongoDB Replication
基本实现
异步复制 复制的是oplog
3.2.0开始基于Raft算法选举
新节点加入集群
寻找同步源
init sync
增量复制
read reference
Arbiter
Arbiter只投票 不复制数据
Arbiter永远是Arbiter 相当于仲裁者
Redis Sentinel
基本实现
Sentinel本身基于Raft算法选举
Sentinel监控和选举
架构模式
双节点
只能应对Redis节点故障 不能应对服务器故障
实际应用中不推荐
三节点
可以应对Master节点和服务区故障
可能出现双主 可以通过参数来控制
分离部署
可以应对Master节点和服务区故障
可能出现双主 可以通过参数来控制
分片架构设计
MongoDB sharding
分为shard、mongos、config server三类角色
分片内部通过replica set保证高可用
当Config Server挂掉的时候,cluster进入read
only
only
HDFS
分为NameNode、DataNode、JournalNode三
类角色
类角色
依赖ZooKeeper做高可用
JournalNode至少3个,达到多数日志复制写入才
算成功
算成功
ElasticSearch
节点可以配置为不同角色,通过选举Master管理
集群
集群
数据是按照索引分片的,而不是按照节点分片
每个分片可以有多个副本来保证高可用
7.0以前是类Bully选举算法,7.0以后是类Raft选
举算法
举算法
Redis Cluster
Cluster分为多个分片,不同分片保存不通数据
每个分片内部通过主备复制来保证可用性
每个分片内部通过主备复制来保证可用性
分片内部自动实现Master选举,但不依赖
Sentinel,Cluster本身具备分片选举的能力
分片内部自动实现Master选举,但不依赖
Sentinel,Cluster本身具备分片选举的能力
节点之间通过gossip交换信息,节点变化的时候
会自动更新集群信息
会自动更新集群信息
常见集群算法
Bully
存活的最(大/小)节点获胜
实现简单
Raft
技术本质
分布式协调
Replicated state machine
特点
容易理解
算法明确划分为选举、复制、安全三个子问题
读写leader,follower不接受请求
选举期间不能服务
一致性保证弱于Paxos
Gossip
定义
又叫Epidemic Protocol
也叫"流言算法"、"疫情传播算法"等
分布式网络,无集中管理节点
节点间点对点传播信息
应用场景
分布式网络,无集中管理节点
节点间点对点传播信息
优点
扩展性:网络节点可任意增加和修改;
容错性:无中心节点,任意节点宕机不影响协议
去中心化:任意节点都可以发送消息;
缺点
需要花费一定时间达到最终一致性
不适合超大规模集群(超过1000)
恶意节点传播垃圾信息
消息冗余
模式
社交网络
节点数量不多,实现最终一致性
节点经常变化的集群
架构重构
技巧
合纵连横
以数据说话
以案例说话
换位思考
合作双赢
先局部优化后架构重构
有的放矢
明确目的
明确时间
明确结果
运筹帷幄
问题分类
问题排序
逐一攻破
定义
通过调整系统结构(4R)来修复系统质量问题而不影响整体系统能力
目的
修复质量问题(性能、可用性、可扩展……)
关键点
1)修复质量问题,提升架构质量
2)不影响整体系统功能
3)架构本质没有发生变化
手段
增删改拆合
Role Relation Rule
架构演进
业务驱动
主动演进
预判
布局
被动演进
快速响应
拿来主义
技术驱动
新瓶旧酒原则
增效
降成本
提质量
价值原则
价值原则:新技术要带来典型的价值才考虑演进
技巧
谈钱,别谈感情(适合成熟技术)
谈竞争对手(适合全新技术)
谈大环境(适合法律政治相关)
定义
通过设计新的系统架构(4R)来应对业务和技术的发展变化
目的
应对业务和技术的发展变化带来新的复杂度
关键点
新架构
新的复杂度
IM 业务
十万用户
存储架构
计算架构
负载均衡
缓存架构
可扩展架构
高可用架构
同城数据灾备
百万用户
存储架构
计算架构
负载均衡
缓存架构
高可用架构
同城双中心
可扩展架构
微服务拆分
大数据架构
千万用户
分级架构
基础技术
计算架构
高可用架构
同城双活
异地双活
核心复杂度
架构师成长
架构师级别
工程师
高级工程师
技术专家
初级架构师
中级架构师
高级架构师
架构思维
判断
取舍
创新
架构师能力模型
技术
业务
管理
架构师成长原则
复杂度
10000小时理论
0 条评论
下一页