凤凰架构
2023-05-05 10:06:28 0 举报
AI智能生成
学习笔记。
作者其他创作
大纲/内容
架构安全
认证(Authentication)
认证标准
认证方式
通信信道:SSL/TLS 认证
通信协议:HTTP 认证
通信内容:Web 内容认证
HTTP 认证
Basic(明文 Base64 编码)
Digest(加盐、以哈希算法取摘要)
Bearer(基于 OAuth2 规范)
HOBA(基于自签名证书)
CA
OBC
Web 认证
WebAuthn
认证实现
Java 认证与授权服务(JAAS)
Java EE Security
私有安全框架
Apache Shiro
Spring Security
授权(Authorization)
权限控制列表(ACL)
自主访问控制(DAC)
强制访问控制(MAC)
基于属性的访问控制(ABAC)
基于角色的访问控制(RBAC)
管理对象
用户(User)
角色(Role)
许可(Permission)
资源(Resource)
基本目的
垂直权限:功能
水平权限:数据
OAuth2
基本流程
实现模式
授权码模式
隐式授权模式
密码模式
客户端模式
微服务架构
凭证(Credential)
Cookie-Session
Cookie
Session
安全保证
存在问题
CAP 不可兼得
多方系统 Session 难以共享
客户端 Cookie 无法跨域
JWT(JSON Web Token)
基本使用
包含信息
HMAC 哈希算法
优点
无需服务节点保留状态信息
可携带少量信息
缺点
令牌难以主动失效
相对更容易遭受重放攻击
只能携带相当有限的数据
必须考虑令牌在客户端如何存储
无状态服务的问题
保密(Confidentiality)
保密强度
使用摘要代替明文
使用加盐哈希
使用动态盐值哈希
使用动态令牌
使用 HTTPS
...
客户端加密
中间人攻击
密码存储和验证
存储
验证
传输(Transport Security)
摘要(Signature)
哈希算法
加密
对称加密
非对称加密
签名
数字证书
公开密钥基础设施(CA)
证书(Certificate)
传输安全层
验证(Verification)
流量治理
服务容错
容错策略
故障转移(Failover)
应用场景
快速失败(Failfast)
应用场景
安全失败(Failsafe)
应用场景
沉默失败(Failsilent)
故障恢复(Failback)
并行调用(Forking)
广播调用(Broadcast)
容错设计
断路器模式:快速失败/安全失败
状态机
CLOSED
OPEN
HALF OPEN
断开条件
一段时间内请求数达到阈值
一段时间内请求故障率达到阈值
熔断与降级
使用场景
舱壁隔离模式:静默失败
线程池隔离
信号量
宏观设计
重试模式:故障转移/故障恢复
前提条件
仅在关键服务上重试
仅对瞬时故障导致的失败重试
仅对具备幂等性的服务重试
明确的终止条件
请求超时
限定次数
避免流量放大
流量控制
流量统计指标
每秒事务数(TPS)
每秒请求数(HPS)
每秒查询数(QPS)
其他:请求/响应报文大小、单位时间通过的流量、登录用户数等
限流设计
否决式限流
流量计数器
滑动时间窗
阻塞式限流
漏桶
令牌桶
分布式限流
集中式缓存
货币化改造(额度)
服务管理
服务发现
基本职责
服务注册
服务维护
服务发现
其它:负载均衡、流量管控、键值存储、元数据管理、业务分组等。
可用性与可靠性
分布式存储
ZooKeeper、Etcd 等
基础设施
Kubernetes 的 SkyDNS、CoreDNS
服务发现框架和工具
Eureka(AP)
Consul(CP)
网关路由
考量因素
网络协议层次
性能与可用性
性能分析
可用性分析
网络 I/O 模型
异步 I/O
同步 I/O
阻塞 I/O
非阻塞 I/O
I/O 多路复用
信号驱动 I/O
BFF 网关
客户端负载均衡
传统网络调用过程
服务发现
网关路由
负载均衡
服务容错
客户端负载均衡器
优点
进程内调用
简化流程
避免单点
灵活配置
缺点
难实现技术异构
影响稳定性
安全性弱
注册中心压力大
代理负载均衡器
地域与区域
访问远程服务
远程服务调用
进程间通信(IPC)
少量数据传递
管道(Pipe)或 具名管道(Named Pipe)
信号(Signal)
信号量(Semaphore)
大量数据传递
消息队列(Message Queue
共享内存(Shared Memory)
网络数据传递
套接字(Socket)
远程服务调用(RPC)
解决问题
如何表示数据
面向对象
如何传递数据
高性能传输
如何确定方法
简化协议
架构设计
通信协议
协议头
协议体
序列化
序列化类型
JDK 原生
JSON
Hessian
Protobuf
Protostuff
Message pack、Kyro 等
使用须知
避免构造复杂对象
避免使用不支持的类作为入参类
网络模型
I/O 多路复用
select
poll
epoll
水平触发
边缘触发
零拷贝(Zero Copy)
实现方式
mmap+write:利用虚拟内存映射到用户空间
sendfile:直接从磁盘读取到内核、发送到网卡
无需关心 Socket 缓冲区大小
利用 Page Cache
无法对数据进行预处理
传输大文件效率低
Netty 的做法
用户态
内核态与用户态
动态代理
JDK 动态代理
其他实现
gRPC
应用实例
发送原理
接收原理
REST 设计风格
基本概念
统一接口
超文本驱动
自描述信息
RESTful 系统
服务端与客户端分离(Client-Server)
无状态(Stateless)
可缓存(Cacheability)
分层系统(Layered System)
统一接口(Uniform Interface)
按需代码(Code-On-Demand)
RMM 成熟度
第 0 级:完全不 REST
第 1 级:引入资源概念
第 2 级:引入统一接口映射到协议方法上
第 3 级:超媒体控制
不足与争议
只适合做 CRUD
不适合高性能传输
不利于事务支持
没有传输可靠支持
难以处理部分或批量资源
服务架构演进史
原始分布式架构
构想
缺陷
单体架构
拆分与扩展
缺陷
SOA 架构
系统拆分方案
烟囱式架构(Information Silo Architecture)
微内核架构(Microkernel Architecture)
事件驱动架构(Event-Driven Architecture)
SOA 设计
缺陷
微服务架构
围绕业务能力构建
分散治理
通过服务实现组件
产品化思维
数据去中心化
强终端弱管道
容错性设计
演进式设计
基础设施自动化
云原生架构
虚拟化与容器化
服务网格
无服务架构
优势
缺陷
技术方法论
目的:微服务的驱动力
前提:微服务需要的条件
边界:微服务的粒度
治理:理解系统复杂性
虚拟化与容器化
虚拟化容器
容器的崛起
以容器构建系统
以应用为中心的封装
容器间网络
Linux 网络虚拟化
网络通信模型
干预网络通信
虚拟化网络设备
荣期间通信
容器网络与生态
CNM 与 CNI
CNM 到 CNI
网络插件生态
持久化存储
Kubernetes 存储设计
容器存储与生态
资源与调度
资源模型
服务质量与优先级
驱逐机制
默认调度器
服务网格
透明通信
服务网格生态
可观测性
事件日志
日志输出
收集与缓冲
加工与聚合
存储与查询
链路追踪
追踪与跨度
数据收集
追踪规范化
聚合度量
指标收集
存储查询
监控预警
可靠通信
零信任网络
零信任安全模型特征
兼有在边界上的保护设施:防火墙等
身份只来源于服务
服务之间无固有信任关系
集中共享的安全策略实施点
受信的机器运行来源已知的代码
自动化、标准化的变更管理
强隔离性的工作负载
Google 实践探索
服务安全
建立信任
单向 TLS 认证
双向 TLS 认证
认证
服务认证
用户认证
授权
分布式共识算法
Paxos
算法设计
算法流程
工作实例
Multi Paxos
Raft
Gossip
分流系统
客户端缓存
状态缓存
强制缓存
HTTP Header
Expires
Cache-Control
协商缓存
HTTP Header
Last-Modified 和 If-Modified-Since
Etag 和 If-None-Match
内容协商
域名解析
DNS 解析流程
还原标准域名
检查本地缓存
递归查询
迭代查询
DNS 预取
HTTPDNS
传输链路
连接数优化
前端优化
连接复用(Keep-Alive,1.1)
队首阻塞
HTTP 管道
多路复用(2)
Header 压缩
传输压缩
即时压缩
分块传输编码
快速 UDP 网络连接(QUIC,3)
内容分发网络
路由解析
CDN 处理流程
内容分发
主动分发
被动回源
CDN 应用
加速静态资源
安全防御(流量清洗,如 DDoS)
协议升级(IPv6、HTTP/3、HTTPS 等)
状态缓存(301/302 等状态码)
修改资源(CORS、内容协商、缓存等)
访问控制(黑白名单、QoS、防盗链等)
注入功能
负载均衡
数据链路层:转发
原理
特点
性能高(不经上层解析、无转发开销)
无法感知上传协议
只用于子网内(二层可达)
网络层:转发
IP 隧道(IP Tunnel)
原理
特点
打包拆包引入开销
可跨越 VLAN
要求支持 IP 隧道协议、人工配置
网络地址转换(NAT)
原理
特点
性能损失较大
运维简单
SNAT 无法获取服务端 IP
应用层:代理
原理
特点
代表服务端与客户端通信
性能相对差(多一轮 TCP 握手、带宽约束、解析层次高)
可定制多种多级功能
高级功能
类似 CDN
静态资源缓存
协议升级
安全防护
访问控制
智能路由
根据 Session 路由实现亲和性集群
根据 URL 路由实现专职化服务
根据用户身份路由实现对特殊服务
报文过滤
SQL 注入
SYN Flood 攻击
链路治理
降级、限流、熔断
异常注入
均衡策略
轮询/加权轮询
随机/加权随机
一致性哈希
响应速度/最少连接数
基本实现
软件实现:LVS、Nginx、HAProxy、KeepAlived
硬件实现:F5、A10
服务端缓存
缓存属性
吞吐量
影响因素
尽可能避免数据竞争的数据结构
存在竞争风险时处理同步的策略(悲观,乐观)
如何避免伪共享现象(False Sharing)
处理方式
同步处理
异步处理
环形缓冲
Caffeine
命中率
淘汰策略
FIFO(First In First Out)
LRU(Least Recent Used)
LFU(Least Frequently Used)
TinyLFU(Tiny Least Frequently Used)
W-TinyLFU(Windows-TinyLFU)
ARC(Adaptive Replacement Cache)
LIRS(Low Inter-Reference Recency Set)
扩展功能
加载器:主动加载指定 Key 值的数据,也是自动刷新的基础前提。
淘汰策略:支持用户选择不同的淘汰策略。
失效策略:要求缓存在一定时间后自动失效或者自动刷新。
事件通知:提供事件监听器在数据状态变动(失效刷新移除)时进行额外操作。还可监视缓存数据(Watch 功能)。
并发级别:对于通过分段加锁来实现的缓存提供并发级别的设置。
容量控制:缓存通常都支持指定初始容量(减少扩容频率)和最大容量(自动清理)。
引用方式:将数据设置为软引用或者弱引用,便于垃圾回收。
统计信息:提供诸如缓存命中率、平均加载时间、自动回收计数等统计。
持久化:将缓存内容存储到数据库或者磁盘中(对于分布式缓存意义较大)。
分布式缓存
复制式缓存
集中式缓存
多级缓存
二级缓存
存在问题
代码侵入性大、不便于开发和管理
数据更新容易出现不一致
更新方式
存在问题
开发:提高系统复杂度(需考虑失效、更新、一致性等问题)。
运维:掩盖系统缺陷,让问题在更久后、距离发生现场更远的位置上出现。
安全:可能导致保密数据泄漏,也是容易受到攻击的薄弱点。
缓存风险
缓存穿透
缓存击穿
缓存雪崩
缓存污染
Cache Aside
Read/Write Through
Write Back
事务处理
本地事务
ACID
原子性(Atomic):同一项业务处理过程中多个数据修改必须同时成功或撤销
隔离性(Isolation):不同业务处理过程中各自读、写数据不会相互影响
持久性(Durability):被成功提交的数据修改都能够正确地被持久化
一致性(Consistency):数据正确不会产生矛盾
原子性和持久性
崩溃处理
FORCE 与 STEAL
提交日志(Commit Logging)
存在问题
预写日志(Write-Ahead Logging)
影子分页
隔离性
锁
排他锁(X-Lock)
共享锁(S-Lock)
范围锁(Range Lock)
隔离级别
可串行化(Serializable)
可重复读(Repeatable Read):幻读(Phantom Reads)
只读事务
读写事务
读已提交(Read Committed):不可重复读(Non-Repeatable Reads)
读未提交(Read Uncommitted):脏读(Dirty Reads)
无隔离(None):脏写(Dirty Writes)
多版本并发控制(MVCC)
插入
删除
修改
查询
可重复读
读已提交
全局事务
两阶段提交(2PC)
准备阶段
提交阶段
一致性前提
提交阶段网络可靠
节点失联最终都能恢复
存在问题
单体故障
性能差
一致性风险
三阶段提交(3PC)
优化措施
存在问题
性能差
一致性风险
共享事务
压力方向相反
分布式事务
CAP
CP 系统
AP 系统
最终一致性
可靠事件队列
执行流程
最大努力一次提交
特点
足够简单
不保证隔离性
TCC 事务(回滚)
执行流程
特点
高性能
强隔离性
可定制
侵入性强
SAGA 事务(补偿)
事务定义
处理方法
正向恢复(Forward Recovery)
反向恢复(Backward Recovery)
特点
补偿容易实现
需要考虑崩溃恢复机制
AT 事务(补偿)
基本原理
特点
支持全局锁
可能产生脏读
高吞吐量
弱隔离性,不保证原子性
0 条评论
下一页