架构初探-谁动了我的蛋糕|青训营笔记

200 阅读5分钟

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

什么是架构

软件整体结构与组件的抽象描述 指导软件系统各个方面的设计

1.1什么是架构-问题

开蛋糕房须解决如下问题:

  • 如何做蛋糕
    • 独家秘方,还是亲自做比较好
  • 如何卖蛋糕
    • 刚开始客流量不大,边做边卖 开张!

1.2 什么是架构-单机

软件系统需要具备对外提供服务,单机,就是把所有功能都实现在一个进程里,并部署在一台机器上

image.png

优点:简单

问题:C10K problem(在单机上服务能力瓶颈)、运维需要停服 演进:如何麦更多的蛋糕? 雇用更多师傅

1.3 什么是架构-单体、垂直应用|垂直切分

单体架构:分布式部署 垂直应用架构: 按应用垂直切分的单体

image.png 优点:水平扩容、运维不需要停服

问题:职责太多,开发效率不搞、爆炸半径大 演进:提高做蛋糕效率? 分工协作

1.4 什么是架构-SOA、微服务|水平切分

SOA(Service-Oriented Architecture)

  • 将应用的不同功能单元抽象为服务(垂直切了后再水平切,进一步细分服务)
  • 定义服务之间的通信标准

image.png **微服务架构:SOA **的去中心化演进方向

image.png 耦合性更低

问题:

  • 数据一致性
    • 装货台交付了多少蛋糕?
  • 高可用
    • 这么多服务,如何合作?
  • 治理
    • 烤箱坏了,这么容灾?
  • 解耦 vs 过微
    • 运维成本高了,值当吗?

小结

**架构的演进初衷:好比做蛋糕。

  • 需求量越来越大,终归要增加人手
  • 越做越复杂,终归要分工合作 架构的演进思路:就像切蛋糕。蛋糕越来越大,一口吃不下终归要切分
  • 垂直切分
  • 水平切分(独立性强,降低耦合性)

企业级后端架构剖析

背景: 蛋糕店需要扩大规模

  • 店面怎么盘:
  • 师傅怎么招:
    • 全家出马
    • 科班出身
  • 是否继续坚持纯手工制作?
  • 规模大了之后,工作重心应该是?
    • 精进蛋糕制作收益
    • 蛋糕店重点方向梳理 & 未来规划

2.1 云计算

**云计算:**是指通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模数据分析和存储的基石。

基础:

  • 虚拟化技术(整租 vs 合租)
  • 编排方案 (业主 vs 租赁平台)

image.png 右边类似用云计算实现,左边为自己来使用云计算能让我们更加关注生产细节,而不是杂事 构架:

  • laaS(infrastructure as a Service)
    • 买房子 vs 房屋租赁平台
  • PaaS(Platform as a Service)
    • 清包 vs 全包
  • SaaS(Software as a Service)
    • 从零培训 vs 雇佣培训过的师傅
  • FaaS(Function as a Service)
    • 纯手工 vs 机器批量生产

2.2 云原生

为工作组织在公有云、自由云、混合云等信动态环境中,构建和运行弹性拓展的应用提供可能 image.png

2.2.1 弹性计算资源

类型:

  • 服务资源调度
    • 微服务
    • 大服务
  • 计算资源调度
    • 在线:热销榜单
    • 离线:热销榜单更新
  • 消息队列
    • 在线:削峰、解耦
    • 离线:大数据分析

2.2.2 弹性存储资源

弹性存储源类型:

  • 经典
    • 对象:宣传视频
    • 大数据:用户记录
  • 关系型数据库
    • 收银记录
  • 元数据
    • 服务发现:蛋糕店通讯录
  • Nosql
    • KV 总结:将存储资源当成服务一样

2.2.3 DevOps

DevOps 是云原生时代软件交付的利器,贯穿整个软件开发周期。

结合自动化流程,提高软件开发、交付效率 image.png

2.2.4 微服务架构

image.png 通信标准:

  • HTTP (RESTful API)
  • RPC (thrift,gRPC)远程过程调用

微服务中间件 R PC vs HTTP:

  • 性能
  • 服务治理
  • 协议可解释性

云原生场景下,微服务大可不必在业务逻辑中实现符合通信标准的交互逻辑,而是交给框架来做

2.2.5 服务网格

image.png

企业级后端架构的挑战

问题 挑战:

  • 基础设施层面
    • 物理资源是有限的
      • 机器
      • 带宽
    • 资源利用率受制于部署服务
  • 用户层面
    • 网络通信开销较大
    • 网络抖动导致运维成本过高
    • 异构环境下,不同实例资源水位不均(不同cpu)

3.1 离在线资源并池

image.png 问题:同一个机器怎么做在线隔离? 容器化,对cpu的核心作隔离 离线的资源对应离线的进程,在线的资源对应在线的进程,比如一个机器有96个核心,可以用类似于容器化的方式,将在线资源和离线资源用CGROUP或虚拟化的方式,对cpu做隔离,不同的任务去使用不同的cpusize。

3.2 自动扩缩容

image.png 核心收益:

  • 降低业务成本 解决思路: 自动扩缩容
  • 利用在线业务潮汐性自动扩缩容 问题:扩缩容依据什么指标? CPU的P50 作为指标

内存作为指标

CPU+内存利用率

3.3 微服务亲合性部署

核心收益:

  • 降低业务成本
  • 提高服务可用性

解决思路:微服务亲合性部署

  • 将满足亲合性条件的容器调度到一台宿主机
  • 微服务中间件与服务网络通过共享内存通信
  • 服务网格控制面实施灵活、动态的流量调度

image.png

3.4 流量治理

核心收益:

  • 提高微服务调用容错性
  • 容灾
  • 进一步提高开发效率,DevOps 解决思路:基于微服务中间件 & 服务网格的流量治理
  • 熔断、重试
  • 单元化
  • 复杂环境(功能、预览)的流量调度

3.5 CPU 水位负载均衡

image.png