这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
架构
架构在方法选择上起至关重要的作用
单机 问题:
- C10K 问题The C10K problem
- 运维需要停服
垂直划分
- 单体架构:分布式部署
- 垂直应用架构:按应用垂直分的单体
水平划分
- SOA 架构:
- 微服务架构
二者区别在于服务间的通信方式
问题:
- 数据一致性
- 高可用
- 治理(容灾)
- 解耦 vs 过微
云计算
Iaas、Paas、SaaS、FaaS(Function)
云原生是在云计算环境中构建、部署和管理现代应用程序的软件方法
将存储资源当成服务一样
云原生之微服务架构
- HTTP
- RPC
架构面临的问题
一些解决问题的方法如下:
离在线资源并池
降低物理资源成本,提供更多弹性资源 在线业务特点:
- IO 密集
- 潮汐型、实时性 离线服务特点:
- 计算密集
- 非实时
问题:同一个机器怎么做离在线资源隔离 cpu 核心隔离,或者 cgroup
自动扩缩容
问题:扩缩容依据什么指标 cpu 统计分位数,比如 cpu p50(数据集按升序排列,第 50 分位置大的数据(即升序排列后排在 50%位置的数据) 内存利用率 注意:IO 比较难量化,扩缩容根据 IO 难度较大
微服务亲和性部署
收益:降低业务成本(正反序列化的成本)、提高服务可用性
将满足亲和性条件的容器调度到一台宿主机 微服务中间件与服务网格通过共享内存通信
流量治理
解决思路:基于微服务中间件 & 服务网格的流量治理
- 熔断、重试
- 单元化
- 复杂环境的流量调度
CPU 水位负载均衡
收益:为自动扩缩容提供正向输入、打平不同宿主机异构环境的算力差异
解决思路:
- IaaS:提供资源探针
- 服务网格:动态负载均衡
输入:
- 服务网格数据面:支持带权重的负载均衡策略
- 注册中心存储了所有容器的权重信息
- 宿主机提供:
- 容器的资源使用情况
- 物理资源信息(cpu 型号)
关键点:
- 紧急回滚能力
- 大规模
- 极端场景
权重:可理解为需要多少流量
自适应静态权重
简单、中间件无适配成本
问题:
- 无紧急回滚能力
- 缺乏运行时自适应能力
自适应动态权重 Alpha
方案:
- 容器动态权重的自适应调整
- 服务网格的服务发现 & 流量调度能力
缺点:
- 过度流量倾斜会带来异常
自适应动态权重 Beta
方案:
- 服务网格上报 RPC 指标
缺点:
- 时许数据库压力大
- 动态权重决策中心职责越来越大
自适应动态权重 Release
演进方向:
- 微服务化
- 引入消息队列削峰、解耦
- 离在线链路切分
- 梳理强弱依赖