凤凰架构
2024-01-19 00:41:23 0 举报
AI智能生成
凤凰架构的思维导图整理
作者其他创作
大纲/内容
第七章 从类库到服务
服务发现
服务的组册
服务的维护
服务的发现
网关
职责
路由
过滤
网络I/O模型
同步
阻塞
非阻塞
多路复用
信号驱动
异步
客户端负载均衡
客户端负载
同一进程
代理负载
不同进程,同一pod
第八章 流量治理
服务容错
容错策略
故障转移
失败后将请求转发到其他副本服务
优点:系统自动处理,调用者对失败的信息不可见
缺点:增加调用时间,额外的资源开销
场景:调用幂等服务;对调用时间不敏感的场景
快速失败
直接返回失败
优点:调用者对失败有完全控制权;不依赖服务幂等
缺点:需要处理失败,否则可能雪崩
场景:非幂等服务;超时阈值较低的场景
安全失败
旁路不影响主流程
优点:不影响主路逻辑
缺点:只能用在旁路
场景:调用链中的旁路
沉默失败
将错误隔离,不再调用
优点:控制错误不影响全局
缺点:出错的地方一段时间内不可用
场景:频繁超时的服务
故障恢复
失败后尝试重新执行
并行调用
对多个服务副本发起调用,任一返回成功则算成功
广播调用
对多个服务副本发起调用,全部成功才算成功
容错设计模式
断路器
达到阈值后由断路器介入,直接失败
快速失败
舱壁隔离
隔离失败影响范围
沉默失败
重试模式
主路进行同步重试
401等错误不应该重试
只对幂等服务重试
重试必须有明确终止条件
流量控制
问题
依据什么限流
之前运行状况的指标
如何限流
限流模式
超额流量怎么处理
否决(熔断,降级)
阻塞(排队)
统计指标
每秒事务数 TPS
每秒请求数 HPS
客户端发起请求的数量
每秒查询数 QPS
服务器响应次数
限流设计模式
流量计数
只针对离散统计
滑动时间窗
适用于否决式
漏桶
实现缓冲区,先进先出FIFO
令牌桶
生成控量令牌,能够获取到令牌才能访问
分布式限流
集中式缓存
基于额度的限流
第九章 可靠通信
零信任网络
不等同于放弃边界保护
身份来源于服务
服务之间没有固有信任关系
集中、共享的安全策略实施点
受信机器运行来源已知的代码
自动化、标准化变更管理
强隔离性工作负载
服务安全
建立信任
单向TLS认证
双向TLS认证
第十章 可观测性
事件日志
避免打印敏感信息
避免引用慢操作
专门计算日志打印数据
避免打印追踪诊断信息
输入输出结果、执行时长等,应该交给追踪系统
避免误导他人
处理请求的TraceID
记录运行中的关键事件
启动时输出非敏感配置信息
链路追踪
追踪 trace
跨度 span
挑战
低性能损耗
对应用透明
随应用扩张
持续的监控
数据收集
基于日志
基于服务
基于边车代理
聚合度量
计数
瞬态
吞吐率
直方图
采样点分位图
第十一章 虚拟化容器
容器
隔离文件:chroot
隔离访问:namespace
隔离资源:cgroups
封装系统: LXC
封装应用:Docker
封装集群: Kubernetes
第十六章 向微服务迈进
目的
当意识到没有什么技术能够包打天下
当个人能力因素成为系统发展的明显制约
当遇到来自外部商业层面对内部技术层面提出的要求
变化发展特别快的创新业务系统往往会自主地向微服务架构靠近
条件
决策者与执行者都能意识到康威定律在软件设计中的关键作用
组织中具备一些对微服务有充分理解、有一定实践经验的技术专家
系统应具有以自治为目标的自动化与监控度量能力
环境预置
基础监控
快速部署
复杂性已经成为制约生产力的主要矛盾
边界
下界
独立——能够独立发布、独立部署、独立运行与独立测试
内聚——强相关的功能与数据在同一个服务中处理
完备——一个服务包含至少一项业务实体与对应的完整操作
上界
2 Pizza Team 能够在一个研发周期内完成的全部需求范围
第一章 架构演进
单体
分体
特征
自治
隔离
技术异构
SOA
演变
烟囱模式(孤岛)
系统完全独立
微内核
依赖公共核心
事件驱动
独立的事件队列管道,可以自主处理或发布事件
组成
SOAP 远程调用协议
ESB 服务总线
SDO 服务数据对象
SCA 服务组件架构
微服务
特征
围绕业务能力构建
康威定律
组织设计的产品/设计等价于这个组织的沟通结构
时间再多一件事情也不可能做的完美,但总有时间做完一件事情
线型系统和线型组织架构间有潜在的异质同态特性
大的系统组织总是比小系统更倾向于分解
分散治理
服务对应开发团队直接对服务运行质量负责任
通过服务来实现独立自治的组件
使用进程间通信
产品化思维
开发者应将自己的服务作为一个产品,为用户(消费服务)提供支持
数据去中心化
数据应该按领域分散管理、更新、维护、存储。同一实体在不同领域有不同的抽象
强终端弱管道
SOAP与ESB会有不同的协议及不同的编码加工及业务规则转换,而微服务提倡简单通信,适合RESTful
容错性设计
不再幻想系统永远稳定、接受服务可能出错、应该设计自动机制,对可能发生的错误进行检测、隔离、重联,防止雪崩
演进式设计
承认服务会被淘汰,当系统中出现不可更改不可替代的服务,反而是设计上的脆弱
基础设施自动化
大量的服务需要通过CICD减少构建、发布、运维工作复杂度,微服务对基础设施的自动化要求更高
无服务
将数据、消息、日志、存储等运行与云端,开发者不需要烦劳部署及技术取舍
第二章 远程服务调用 RPC
进程间通信 IPC
少量通信
管道 如:ps -ef | grep java
信号 如:kill -9 pid
信号量
大量通信
消息队列
共享内存
本地套接字接口
三个问题
如何表示数据
序列化协议 如JSON、Web Service的XML
序列化与反序列化
如何传递数据
TCP、UDP
Wire Protocol :HTTP、SOAP等
序列化数据、异常、超时、安全、认证、授权事物等
如何表示方法
接口描述语言 IDL
REST
理解
资源
文章
表征
文章的HTML
状态
当前文章
转移
当前文章变为下一篇文章
风格
客户端与服务端分离
无状态
提高可见性、可靠性、可伸缩性,牺牲网络性
可缓存
减少每次请求带有的额外冗余信息
分层系统
不需要知道是否是最终服务
统一接口
GET、HEAD、POST、PUT、DELETE、TRACE、OPTIONS
用资源及统一接口表示,而不是对象及动作表示
按需代码
网络分布式八宗罪
网络可靠
延迟不存在
网络是安全的
拓扑一成不变
总有管理员
没有运输成本
网络都是同质化的
第三章 事务处理
特性
一致性 C
原子性 A
隔离性 I
持久性 D
本地事务
实现原子性与持久性
提交日志 commit logging
NO-FORCE 可以不立即写入
NO-STEAL 不能提前写入
提前写入 write ahead
NO-FORCE 可以不立即写入
STEAL 可以提前写入,出错后进行回滚
实现隔离性
锁
写锁 W
读锁 R
范围锁
隔离级别
串行化
加上所有类型锁,按顺序执行,性能最低
可重复读 WR
幻读 插入删除
读已提交 W 查询完成释放读锁R
不可重复读 修改
读未提交 W
脏读 读到未提交数据
全局事务
单个服务用多个数据源
二阶段提交 2PC
准备阶段
确认是否所有事务都准备好提交
提交阶段
提交全部事务
问题
单点问题
参与者不知道协调者状态
性能问题
多次调用和持久化
一致性风险
网络问题
三阶段提交 3PC
增加询问阶段
解决问题
单点问题
参与者未收到提交则超时处理
性能问题
对需要回滚的场景,能提前处理
共享事务
多个服务共用一个数据源
与生产相悖,数据库压力大
分布式事务
CAP
一致性 C
可用性 A
分区容忍性 P
事务
可靠消息队列
最终一致性
隔离性差,容易出现超卖
TCC
try
进行可执行性检查,预留业务资源
confirm
执行
cancel
取消
业务侵入强
SAGA
将一个大事务拆分为若干个小事务,每个小事务都有对应的补偿动作
正向恢复
失败后一直重试直到成功
反向恢复
失败后一直取消
第四章 透明多级分流系统
客户端缓存
强制缓存
expires
http 1.0
cache-control
http 1.1
协商缓存
last modified
如果资源没有修改过,可以直接返回304
etag
通过资源唯一标识判断资源是否被修改过
请求header
accept-*
响应header
content-*
域名解析
传输链路
连接数优
http 2.0 多路复用
传输压缩
快速UDP网络连接
http 3.0
内容分发网络
主动分发
活动预热
被动回源
CDN
加速静态资源分发
安全防御
协议升级
状态缓存
修改资源
访问控制
注入功能
负载均衡
策略
轮询
权重轮询
随机
权重随机
一致性哈希
响应速度
最少连接数
服务端缓存
缓存问题
提高业务复杂度
掩盖缺陷,延迟问题暴露时间
泄漏数据
分类
计算缓存
缓存计算结果,缓解CPU计算压力
I/O缓存
提高访问速度
维度
吞吐量
ops 每秒操作数
命中率
从缓存返回与总请求的比例
缓存淘汰策略
FIFO 先进先出
LRU 淘汰最久未被访问的数据
LFU 淘汰最不经常访问的数据
扩展功能
分布式缓存
复制式缓存
将分布式缓存中的数据复制到进程缓存内
适合少更新,读取频繁
集中式缓存
与服务独立
风险
穿透
查询的数据不存在
缓存空值
通过布隆过滤器判断是否存在
击穿
缓存失效瞬间,收到大量请求
查询真实数据加锁
设计热点数据预热
雪崩
大量缓存同时失效
多级缓存
失效事件增加随机量
污染
缓存与真实数据不一致
读数据,先读缓存,没有读数据源,读取完数据更新到缓存再返回
写数据先写数据源,然后失效掉(不是覆盖,可能被其他请求再次更新)缓存
第五章 架构安全性
认证
http认证
通过 http header 内 authorization 认证
web认证
实现
认证功能
安全上下文
授权功能
密码的存储与验证
授权
RBAC
用户
角色
权限
资源
OAuth2
问题
密码泄漏
访问范围
授权回收
模式
授权码
先获取授权码,再换取访问令牌
隐式授权
直接返回访问令牌
密码
客户端
凭证
cookie-session
JWT
保密
传输
验证
第六章 分布式共识
0 条评论
下一页