这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
什么是架构
架构的定义
架构是什么
对软件整体结构和组件的抽象描述。
软件开发中,一个模块可以有很多方式实现,而架构就是敲定其中一种。
架构的作用
- 整个系统的地基。
架构的演进思路
- 垂直拆分(增加机器):
- 系统面对越来越高的 QPS 时,需要增加机器来承载更大压力。
- 水平拆分(职责细分):
- 为了增加服务间独立性,更好容灾、单服务扩缩容,将大应用拆分成小的服务,部署在不同机器上。
架构的常见形态
单机架构
简介
所有的程序都在一个进程中运行,并只部署到一台服务器上。
示意图
优点
- 简单
缺点
- C10K problem
- 运维需要停机
单体架构: 分布式部署
简介
每个服务器都跑着程序,通过外部(负载均衡器 比如Nginx)分发请求到具体服务器进行处理。
示意图
优点
- 水平扩容。
- 运维不需要停机。
缺点
- 每个服务器职责过多
- 爆炸半径大
垂直应用架构
简介
将系统拆分成不同应用,不同应用运行到不同服务器上。
示意图
优点
- 职责明确
- 可以根据应用的QPS对单个应用进行横向扩缩容
缺点
SOA(Service-Oriented Architecture)(面向服务体系)架构
简介
将应用的不同功能单元抽象为服务。
定义服务间的通信协议。
微服务架构:SOA 的去中心演进方向。
示意图
微服务架构
简介
微服务架构图是 SOA 架构的去中心化演进方向。
微服务是一种通过多个小型服务组合来构建单个应用的架构风格
示意图
微服务架构需要解决的问题
- 数据一致性
- 装货台上有多个服务,每个服务都能生产蛋糕,如何统计总的生产蛋糕的数量。
- 高可用
- 这么多师傅,如何协作。
- 治理
- 烤箱坏了,如何容灾?
- 解耦 vs 过微
- 服务职责划分太细,部署到不同机器上,运维成本太高
企业级后端架构剖析
云计算
简介
通过互联网,按需提供计算资源。
基础
- 虚拟化技术
- 编排方案(类别划分)
类别
由下往上可视为:真实基础设施、IaaS 层、PaaS 层、SaaS 层、FaaS 层。
IaaS (Infrastructure as a Service)(基础设施即服务)
IaaS 指的是向云服务商(CSP) 租借单个服务来获取云基础架构资源(CPU、内存、磁盘、网络)的使用权。
Paas (Platform as a Service)(平台即服务)
Pass 指的是在 IaaS 的基础上,专注于提供应用和软件开发环境,通常包括:
- 云基础架构:数据中心、存储、网络设备和服务器
- 中间件软件:操作系统、框架、开发套件 (SDK)、库等
- 界面:图形界面 (GUI)、命令行界面 (CLI)、API 界面,而在某些情况下,这三种界面都包括在内。
使得用户只需要关注业务代码逻辑,其余部分由 Pass 提供。
SaaS (Software as a Service)(软件即服务)
SaaS 则是软件即服务,直接提供成品软件供客户使用,按照软件使用时间付费。客户只需与软件建立连接,就可以获取软件提供的服务。
FaaS (Function as a Service)(功能即服务)
FaaS (功能即服务) ,对比 Pass 还需要手动编写代码,需要运行多个服务器,FaaS 不持续启动任何服务器进程,直接提供某个功能作为服务,按照功能被调用时间收费。
愿景是让开发者只需要纯粹地关注业务,不需要考虑技术组件,后端的技术组件是现成的,可以直接取用,没有采购、版权和选型的烦恼;不需要考虑如何部署,部署过程完全是托管到云端的,工作由云端自动完成;不需要考虑算力,有整个数据中心支撑,算力可以认为是无限的;也不需要操心运维,维护系统持续平稳运行是云计算服务商的责任而不再是开发者的责任。
部署模型
有三种不同的云计算部署模型:公有云、私有云和混合云。
- 公有云由第三方云服务提供商运营。它们通过互联网提供计算、存储和网络资源,使企业能够根据其独特的要求和业务目标访问共享的按需资源。
- 私有云由单个组织构建、管理和拥有,并以非公开方式托管在自己的数据中心(通常称为“本地”)内。私有云可提供更强的数据控制、安全和管理功能,同时内部用户仍能够受益于共享的计算、存储和网络资源池。
- 混合云结合了公有云和私有云模型,使企业能够利用公有云服务,并仍可保持私有云架构中常见的安全和合规功能。
云原生
简介
云原生为在公有云、自由云、混合云的动态环境下,构建弹性可伸缩的应用提供支持。
弹性资源
简介
通过容器将基础设施资源进行虚拟化,再结合云计算的编排能力,将虚拟资源划分为不同类别进行调度,可以实现像划分数字一样获取资源。这些可以根据需求弹性扩缩容的基础设施资源就是弹性资源。
类别
- 弹性计算资源:
- 服务资源调用
- 微服务:存活时间短的服务。
- 大服务:存活时间长、需求资源多的服务。
- 计算资源调度:
- 在线:实时的处理数据。如获取热门榜单。
- 离线:异步的处理。如更新热门榜单。
- 消息队列:
- 在线:削峰、解耦。
- 离线:大数据分析。
- 服务资源调用
- 弹性存储资源:
- 经典
- 对象
- 大数据
- 关系型数据库
- 元数据
- 服务发现
- NoSQL
- KV
- 经典
DevOps
简介
贯穿下面的自动化测试流程,提供的开发工具。
微服务架构
通信标准
- HTTP (RESTful API)
- RPC (Thrift, gPRC)