这是我参与「第三届青训营 -后端场」笔记创作活动的的第6篇笔记
架构演进
单机部署
运维停机
单机性能瓶颈
C10K问题(单机1万个并发,已解决)
最初的服务器都是基于进程/线程模型的,新到来一个TCP连接,就需要分配1个进程(或者线程)。而进程又是操作系统最昂贵的资源,一台机器无法创建很多进程。
解决方案为I/O多路复用,多个socket给一个进程处理。
RR方法,带来阻塞问题。
select方法,用一个 fd_set 结构体来告诉内核同时监控多个文件句柄,当其中有文件句柄的状态发生指定变化(例如某句柄由不可用变为可用)或超时,则调用返回。之后应用可以使用 FD_ISSET 来逐个查看是哪个文件句柄的状态发生了变化。
poll通过一个 pollfd 数组向内核传递需要关注的事件消除文件句柄上限,同时使用不同字段分别标注关注事件和发生事件,来避免重复初始化
epoll调用返回的时候只给应用提供发生了状态变化(很可能是数据 ready)的文件句柄
(异步非阻塞)
select->poll->epoll
单体、垂直应用/垂直切分
职责太多
爆炸半径大
SOA架构、微服务|水平切分
SOA->微服务架构
应用的功能抽象为服务
定义服务之间的通信标准
SOA的问题
- 数据一致性 装货台交付多少蛋糕
- 高可用 如何合作
- 治理 功能损坏容灾
- 解耦 运维成本
企业级后端框架
云计算
- 虚拟化技术
- 编排方案 IaaS 屏蔽设备物理信息(平台) PaaS 物理设备维护管理 SaaS FaaS 使得企业更关注于业务思路,而非工具
云原生
- 虚拟化容器 快速扩容缩容
- 微服务架构 业务功能解耦
- DevOps 敏捷开发(开发运营)
- 服务网络 异构系统的治理统一化
云原生-弹性计算资源
- 服务资源调度 包括大对象小对象
- 计算资源调度 (热销榜单)
- 消息队列 削峰、解耦
云原生-弹性存储资源
- 经典 对象:宣传视频 大数据:消费记录
- 关系型数据库 收银记录
- 元数据 服务发现
- NoSQL 如KV型数据
云原生-devops
云原生-微服务架构
通信标准: http RPC
http 可解释性较好
RPC 通信压缩 性能好
RPC天生具备一些服务治理能力(Qos)
SDK?
云原生-服务网格
控制-数据分离
挑战
离线和在线资源并池
降低物理资源成本
在线业务 IO密集型 有潮汐性/实时性
离线业务 计算密集型 非实时性
扩缩容指标
通常CPU利用率 内存用的不多 IO扩缩容在研究
微服务亲和性部署
降低通信成本 通信高的部署到一起
CPU水位均衡
IaaS资源探针 动态负载均衡
后端架构方案实战
对于CPU水位均衡 静态权重->动/静态权重结合->自适应动态权重(多加了RPC指标,时序仓库)->微服务化、消息队列