这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
什么是架构
定义
架构,又称软件架构。是有关软件整体结构与组件的抽象描述;用于指导软件系统各个方面的设计
单机架构
将所有功能都实现在一个进程里,并部署在一台机器上。
优点:
- 简单
缺点
- 运维需要停服
单体架构
在单机架构的基础上,将进程部署在多个机器上。
优点:
- 具备水平扩容能力
- 运维不需要停服
缺点:
- 职责太多,开发效率不高
- 爆炸半径大,进程中一个很小的模块出现问题,都可能导致整个进程崩溃
垂直应用架构
在单体架构基础上,进一步地,将不同的应用从之前的大进程中拆分出来。
优点:
- 一定程度上减少了后端进程的职责
- 一定程度上缩小了爆炸半径
缺点:
- 没有根本解决单体架构的问题
SOA(面向服务架构)
将原本包含了众多复杂逻辑的进程按照功能单元抽象成多个服务,以服务为一等公民,并为他们之间的通信定义标准,便得到了SOA架构。
优点:
- 各服务的职责更清晰
- 运维粒度减小到服务,爆炸半径可控
缺点:
- ESB(企业服务总线)往往需要一整套解决方案
微服务
SOA的去中心化演进方向。
优点:
- 兼具SOA解决的问题
- 服务间的通信更敏捷、灵活
缺点: -运维成本
云计算
通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模 熟悉分析和存储的基石。
云计算基础
虚拟化技术:
- 硬件(虚拟机)
- 操作系统(容器)
- 网络
编排方案:
- 虚拟机编排方案(OpenStack)
- 容器编排方案(Kubernetes)
云计算架构
-
IaaS - 云基础设施,对底层硬件资源池的抽象
-
PaaS - 基于资源池抽象,对上层提供的弹性资源平台
-
SaaS - 基于弹性资源平台构建的云服务
-
FaaS - 更轻量级的函数服务。好比 LeetCode 等 OJ,刷题时只需要实现函数,不需要关注输入输出流
云原生
云原生技术为组织(公司)在公有云、自由云、混合云等新型的动态环境中,构建和运行可弹性拓展的应用提供了可能。 它的代表技术:
- 弹性资源
- 微服务架构
- DevOps
- 服务网格
弹性资源
基于虚拟化容器以及灵活的编排调度机制,可以为云服务提供快速扩缩容能力,而且极大地提高了物理资源的利用率。可以分为弹性计算资源和弹性存储资源两个方面。
弹性计算资源
- 计算资源调度
- 在线:热销榜单
- 离线:热销榜单更新
- 消息队列
- 在线:削峰、解耦
- 离线:大数据分析
弹性存储资源
- 经典
- 对象:宣传视频
- 大数据:用户消费记录
- 关系型数据库
- 收银记录
- 元数据
- 服务发现
- NoSQL
- KV存储
DevOps
DevOps是云原生时代软件交付的利器,贯穿整个软件开发周期。结合自动化流程,提高软件开发、交付效率。
微服务架构
通信标准:
- HTTP (RESTful API)
- RPC (Thrift, gRPC)
微服务中间件 RPC vs HTTP:
- 性能
- 服务治理
- 协议可解释性
服务网格
- 微服务之间通讯的中间层
- 高性能网络代理
- 业务代码与治理解耦
相较于 RPC/HTTP 框架:
- 异构系统治理统一化
- 与业务进程解耦,生命周期易管理
企业级后端架构的挑战
挑战
基础设施层面:
- 物理资源是有限的
- 机器
- 带宽
- 资源利用率受制于部署服务
用户层面:
- 网络通信开销较大
- 网络抖动导致运维成本提高
- 异构环境下,不同实例资源水位不均
离在线资源并池
核心收益:
- 降低物理资源成本
- 提供更多的弹性资源,增加收入
解决思路:离在线资源并池
在线业务的特点:
- IO密集型为主
- 潮汐性、实时性
离线业务的特点:
- 计算密集型占多数
- 非实时性
自动扩缩容
核心收益:
- 降低业务成本
解决思路:自动扩缩容
- 利用在线业务潮汐性自动扩缩容
微服务亲合性部署
核心收益:
- 降低业务成本
- 提高服务可用性
解决思路:微服务亲合性部署
- 将满足亲合性条件的容器调度到一台宿主机
- 微服务中间件与服务网格通过共享内存通信
- 服务网格控制面实施灵活、动态的流量调度
流量治理
核心收益:
- 提高微服务调用容错性
- 容灾
- 进一步提高开发效率,DevOps发挥到极致
解决思路:基于微服务中间件 & 服务网格的流量治理
- 熔断、重试
- 单元化
- 复杂环境(功能、预览)的流量调度
CPU 水位负载均衡
核心收益:
- 打平异构环境算力差异
- 为自动扩缩容提供正向输入
解决思路:CPU水位负载均衡
- IaaS
- 提供资源探针
- 服务网格
- 动态负载均衡