架构初探 | 青训营笔记

120 阅读6分钟

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

一、架构

软件架构:有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计
方法选择的指导,地基

单机

把所有功能都实现在一个进程里,部署在一台机器上
优点:简单
缺点:
流量大时慢,服务能力有瓶颈 C10K problem
运维需要停服

1-1.png

单体 垂直应用 | 垂直切分

单体架构:分布式部署,不分应用的全栈
垂直应用架构:按应用垂直切分的单体,按类划分
优点:
水平扩容
运维不需停服
缺点:
职责太多,开发效率不高
爆炸半径大

1-2.png

SOA 微服务 | 水平切分

SOA:将应用的不同功能单元抽象为服务,定义服务之间的通信标准
微服务架构:SOA的去中心化演进
问题:
数据一致性
高可用:如何合作
治理:其中有步骤坏了如何容灾
解耦vs过微:运维成本较高

1-3.png

演进

需求量越来越大:增加人手
越做越复杂:分工合作
蛋糕越来越大,需要垂直(增加人手,保证稳定)和水平(增加层级,独立性增强)切分

二、企业级后端架构剖析

云计算

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

基础

虚拟化技术:整租vs合租,虚拟化机器可以共同使用
编排方案:业主vs租赁平台

架构

IaaS:买房子vs租赁平台,忽略物理层面的区别,只从逻辑层面看
PaaS:清包vs全包,云计算服务,增强统一管理,无需自己手动
SaaS:从零培训vs雇佣有经验的,降低用户学习成本,交给云计算平台
FaaS:手工vs机器,增强效率,很多服务无需自己配置
把精力放在业务层面,而非底层细节
2-5.png

云原生

公有云、自由云、混合云
2-4.png

弹性资源

虚拟化容器,快速扩缩容

计算资源类型

服务资源调度:微服务,大服务
计算资源调度:在线,数据显示;离线,数据计算
消息队列:在线,削峰,解耦(用户操作简单,服务细节对其透明);离线大数据分析

存储资源类型

经典:对象,大数据(消费记录)
关系型数据库:强关系属性的记录
元数据:服务发现,数据量不大,但是用处多
NoSQL:KV存储(键值对)
将存储资源当成服务

微服务架构

业务功能单元解耦,统一通信标准
通信标准:HTTP、RPC
微服务中间件提供HTTP/RPC功能:比较性能、服务治理、协议可解释性这些能力来选择
不用在业务逻辑中实现符合通信标准的交互逻辑,交给框架
2-1.png

DevOps

敏捷开发,CI/CD
是云原生时代软件交付的利器,贯穿整个软件开发周期
结合自动化流程,提高软件开发与交付的效率

2-3.png

服务网格

业务与治理解构,异构系统的治理统一化,复杂治理能力
服务网格:微服务之间通讯的中间层,高性能网络代理,业务代码与治理解耦
相比于RPC/HTTP框架:
异构系统治理统一化;与业务进程解耦,生命周期易管理
2-2.png

三、企业级后端架构挑战

问题

基础设施层面
物理资源有限:机器、带宽
资源利用率受制于部署服务
用户层面
网络通信开销大
网络抖动导致运维成本提高
异构环境下,不同实例资源水位不均(不同的用户、机器资源利用率可能不一样)
3-1.png

离在线资源并池

核心收益:降低物理资源成本
解决思路:
提供更多的弹性资源,增加收入
在线业务:IO密集型,潮汐性,实时性
离线业务:计算密集型,非实时性
同一个机器做离在线隔离:可以用容器虚拟化,Cgroup

自动扩缩容

核心收益:降低业务成本
解决思路:
利用在线业务潮汐性
指标:CPU的使用量
3-2.png

微服务亲和性部署

核心收益:降低业务成本,提高服务可用性
解决思路:
将满足亲和性条件的容器调度到一台宿主机,受网络的影响变小
微服务中间件与服务网格通过共享内存通信
服务网格控制面实施灵活、动态的流量调度
3-3.png

流量治理

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

CPU水位负载均衡

核心收益:打平异构环境算力差异,为自动扩缩容提供正向输入
解决思路:
IaaS:提供资源探针
服务网格:动态负载均衡
3-4.png

四、后端架构实战

问题

输入:
服务网格数据面(在容器中,与控制面相连):支持带权重的负载均衡策略
注册中心(与服务网格相连)存储了所有容器的权重信息
宿主机能提供:容器的资源使用情况与物理资源信息(如cpu型号)
关键点:
紧急回滚能力
大规模:稳定性,计算瓶颈
极端场景
4-1.png

自适应静态权重

方案:
采集宿主机物理资源信息
调整容器注册的权重
优势:
复杂度低
完全分布式,可用性高
微服务中间件无适配成本
缺点:
无紧急回滚能力

缺乏自适应能力


4-2.png

自适应动态权重 Alpha

方案:
容器动态权重自适应调整,统一到动态权重决策中心
服务网格的服务发现&流量调度能力
缺点:
过度流量倾斜可能异常,权重100/1的时候如果100的服务挂了,大部分流量失效 4-3.png

Beta

方案:
服务网格上报RPC指标,到不同主机容器延迟多少,统一计算
缺点:
时序数据库压力大,存储的数据太多,每几秒都记录
动态权重决策中心职责多,迭代->变更->风险
4-4.png

Release

优化动态权重决策中心:模仿垂直水平划分
微服务化
引入消息队列削峰、解耦
离在线链路切分
梳理强弱依赖
4-5.png