第五届字节跳动青训营Class7笔记 | 青训营笔记

83 阅读5分钟

这是我参与「第五届青训营 」笔记创作活动的第7天

本节课程主要讲解了架构相关的内容。

1.什么是架构

架构又称为软件架构,是有关软件整体结构和组件的抽象描述,用于指导软件系统各个方面的设计。

单机架构

单机架构将所有功能实现在一个进程里,并部署在一台机器上。

image.png

单体架构

单体架构即对单机架构进行分布式部署,以便于进行水平扩容,并且在运维时不需要停服。

image.png

垂直应用架构

垂直应用架构按照应用垂直切分成单体,不同应用相互之间并不影响。 image.png

SOA(Service-Oriented Architecture)

将应用的不同功能单元抽象为服务,定义服务之间的通信标准。

微服务架构是SOA的去中心化演进方向

image.png

image.png

2.企业级后端架构剖析

云计算

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

基础:

  • 虚拟化技术:整租/合租
  • 编排方案:业主/租赁平台

架构:

  • Iaas(Infrastructure as a Service)
  • Paas(Platform as a Service)
  • Saas(Software as a Service)
  • Faas(Function as a Service)

Iaas即为云计算提供的服务器设备,Paas即为配置好的服务器平台服务,Saas即为平台提供的软件服务,Faas即为软件提供的计算服务。

云原生

云原生对云部署四个方面的作用:

弹性资源

  • 弹性计算资源
  • 服务资源调度:微服务、大服务

  • 计算资源调度:在线(如热销榜单) 、离线(如热销榜单更新)

  • 消息队列:在线(削峰、解耦)、离线(热销榜单更新)

  • 弹性存储资源
  • 经典:对象(宣传视频)、大数据(用户消费记录)

  • 关系型数据库:收银记录

  • 元数据:服务发现(通讯录,可以理解为对某一结构体的索引)

  • NoSQL:非关系型数据库

DevOps(Development Operations)

image.png

快速进行软件开发的工作流。

微服务架构

通信标准:

  • HTTP(RESTful API)
  • RPC(Thrift, gRPC)

image.png

实际上在当前云原生场景下,微服务不需要在业务逻辑中实现符合通信标准的交互逻辑,而是交给框架来做。

服务网格

服务网格(Service Mesh):

  • 微服务之间通讯的中间层
  • 高性能网络代理
  • 业务代码与治理解耦

服务网格是一组处理服务间通信的网络代理。 image.png

由于服务网格的治理都体现在数据面上,因此可以将异构系统治理统一化,代替Http/RPC等框架进行业务管理。

3.企业级后端架构面临的挑战

挑战

  • 基础设施层面:物理资源有限(机器、带宽),资源利用率受制于部署服务
  • 用户层面:网络通信开销大,网络抖动,异构时资源分配不均

解决方案

离在线资源分池

  • 在线业务的特点:IO密集型为主、具有潮汐性、实时性
  • 离线业务的特点:计算密集型占大多数、非实时性

image.png

自动扩缩容

自动扩缩容是实现离在线资源分配的一种手段,根据当前各个服务的资源占用程度,对资源池进行扩缩容。

微服务亲合性部署

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

流量治理

  • 熔断、重试
  • 单元化
  • 复杂环境(功能、预览)的流量调度

CPU水位负载均衡

  • Iaas:提供资源探针
  • 服务网格:动态负载均衡

4.后端架构实战

设计CPU水位负载均衡

输入:

  • 服务网格数据面:支持带权重的负载均衡策略
  • 注册中心存储了所有容器的权重信息
  • 宿主机能提供容器的资源使用情况、物理资源信息(如CPU型号)

关键点:

  • 紧急回滚能力
  • 大规模
  • 极端场景

image.png

方案1:单机部署调权代理

  • 采集宿主机物理资源信息
  • 调整容器注册的权重

优点:复杂度低,完全分布式; 缺点:无紧急回滚能力,对业务无感知

graph TD
X(容器X的数据面)
A(宿主机A)
B(宿主机B)
C(调权代理)
D(调权代理)
E(注册中心)
X --> A
X --> B
A --> C
B --> D
C --> E
D --> E

方案2: 集群部署动态决策中心

  • 容器动态权重自适应调整
  • 服务网格的服务发现&流量调度能力
graph TD
X(容器X的数据面)
A(宿主机A)
B(宿主机B)
C(动态权重决策中心)
E(注册中心)
X --> A
X --> B
A --> C
B --> C
C --> E

缺点:过度流量倾斜可能会导致极端情况

方案3:RPC指标上报决策中心

  • 服务网格上报RPC指标(从数据面上报到动态权重决策中心)
graph TD
X(容器X的数据面)
A(宿主机A)
B(宿主机B)
C(动态权重决策中心)
E(注册中心)
F(时序数据库)
X --> A
X --> B
A --> C
B --> C
C --> E
X --> C
C --> F
F --> C

由于数据面上报的RPC指标是时序化的,决策中心作出决策需要使用某一个时间段内的数据,因此需要时序数据库对RPC指标进行存储,这对数据库会带来一定的压力。

同时随着决策中心任务的增加,也使得决策中心的安全隐患增加。

方案4:动态决策中心微服务化

  • 微服务化
  • 引入消息队列削峰、解耦(即连接双方不需要接受到对方的响应,异步执行
  • 离在线链路切分
  • 梳理强弱依赖

image.png

总结

本节课程主要围绕着后端架构出发,讲解了与架构有关的几个概念,并且结合企业级实战所遇到的各种问题,讨论了相关的解决方案,展望了未来架构发展的方向。