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