管理设计
2023-05-05 10:06:59 0 举报
AI智能生成
学习笔记
作者其他创作
大纲/内容
注册中心
基本职责
服务注册
服务维护
服务发现
其他
负载均衡
流量管控
元数据管理
业务分组
...
可用性与可靠性
分布式存储
ZooKeeper、Etcd 等
基础设施
Kubernetes 的 SkyDNS、CoreDNS
框架和工具
Eureka(AP)
高可用
缓存与兜底
Consul(CP)
节点间一致
大规模服务同步
配置中心
区分配置
静态配置
动态配置
按运行环境分
按依赖分
按层次分
配置中心模型
数据结构
配置分层
操作系统和平台
业务应用
外部依赖
版本管理
模板配置
整体架构
变更通知组件
变更控制器
环境变量配置
模块化配置
标准化配置
框架或 SDK
运维脚本
综合方案
设计重点
统一管理
控制 - 逻辑分离
事务处理
配置更新控制器
服务调用
进程间通信(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
不适合高性能传输
不利于事务支持
没有传输可靠支持
难以处理部分或批量资源
分布式锁
应用实例
数据库
乐观锁与 CAS
存在问题
不可重入:已获得锁的进程也需要重新获得锁
不可超时:解锁失败则无法再获得锁
不可阻塞:只能失败重试
Redis
SET NX 指令
实现原理
value 生成
超时释放
RedLock 算法
存在问题
ZooKeeper
节点类型
永久节点
临时节点
有序节点
具体实现
实现步骤
会话超时
设计重点
核心问题
过期自动解锁
共同持有锁
确定是否需要分布式锁
设计细节
可重入性
非阻塞
高可用和持久化
锁释放方式
网关模式
功能设计
请求路由
服务注册
负载均衡
弹力设计
安全访问
灰度发布
API 聚合
API 编排
BFF 网关
其他实现方式
Sidecar
Service Mesh
Gateway
设计重点
高性能
高可用
高扩展
整体架构
安全性
边车模式
逻辑 - 控制分离
SDK/ Lib/ Framework
SideCar
整体架构
工作模式
部署方式
设计重点
控制 - 逻辑分离
进程间通讯
服务协议
上下文传递
适用场景
老旧系统改造扩展
多语言服务
多供应商服务
控制 - 逻辑分离
不适用场景
架构不复杂
服务间协议不标准且无法转换
服务网格
Service Mesh
基本功能
演化路径
相关组件
lstio
设计重点
高可用
独立部署
部署策略
停机部署(Big Bang / Recreate)
蓝绿部署(Blue/Green /Stage)
滚动部署(Rolling Update / Ramped)
灰度部署(Canary)
A/B 测试(A/B Testing)
优雅启动与关闭
启动预热
延迟暴露
0 条评论
下一页