架构|青训营笔记

112 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第6篇笔记

架构演进

单机部署

运维停机
单机性能瓶颈

C10K问题(单机1万个并发,已解决)

最初的服务器都是基于进程/线程模型的,新到来一个TCP连接,就需要分配1个进程(或者线程)。而进程又是操作系统最昂贵的资源,一台机器无法创建很多进程。
解决方案为I/O多路复用,多个socket给一个进程处理。
RR方法,带来阻塞问题。

select方法,用一个 fd_set 结构体来告诉内核同时监控多个文件句柄,当其中有文件句柄的状态发生指定变化(例如某句柄由不可用变为可用)或超时,则调用返回。之后应用可以使用 FD_ISSET 来逐个查看是哪个文件句柄的状态发生了变化。
poll通过一个 pollfd 数组向内核传递需要关注的事件消除文件句柄上限,同时使用不同字段分别标注关注事件和发生事件,来避免重复初始化
epoll调用返回的时候只给应用提供发生了状态变化(很可能是数据 ready)的文件句柄 (异步非阻塞) select->poll->epoll

单体、垂直应用/垂直切分

image.png 职责太多 爆炸半径大

SOA架构、微服务|水平切分

SOA->微服务架构 应用的功能抽象为服务 定义服务之间的通信标准 image.png

SOA的问题

  1. 数据一致性 装货台交付多少蛋糕
  2. 高可用 如何合作
  3. 治理 功能损坏容灾
  4. 解耦 运维成本

企业级后端框架

云计算

  1. 虚拟化技术
  2. 编排方案 IaaS 屏蔽设备物理信息(平台) PaaS 物理设备维护管理 SaaS FaaS 使得企业更关注于业务思路,而非工具

云原生

  1. 虚拟化容器 快速扩容缩容
  2. 微服务架构 业务功能解耦
  3. DevOps 敏捷开发(开发运营)
  4. 服务网络 异构系统的治理统一化 image.png

云原生-弹性计算资源

  1. 服务资源调度 包括大对象小对象
  2. 计算资源调度 (热销榜单)
  3. 消息队列 削峰、解耦

云原生-弹性存储资源

  1. 经典 对象:宣传视频 大数据:消费记录
  2. 关系型数据库 收银记录
  3. 元数据 服务发现
  4. NoSQL 如KV型数据

云原生-devops

image.png

云原生-微服务架构

通信标准: http RPC http 可解释性较好 RPC 通信压缩 性能好 RPC天生具备一些服务治理能力(Qos) SDK? image.png

云原生-服务网格

控制-数据分离 image.png

挑战

离线和在线资源并池

降低物理资源成本 在线业务 IO密集型 有潮汐性/实时性 离线业务 计算密集型 非实时性 image.png

扩缩容指标

通常CPU利用率 内存用的不多 IO扩缩容在研究

微服务亲和性部署

降低通信成本 通信高的部署到一起

CPU水位均衡

IaaS资源探针 动态负载均衡

后端架构方案实战

对于CPU水位均衡 静态权重->动/静态权重结合->自适应动态权重(多加了RPC指标,时序仓库)->微服务化、消息队列

image.png