这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
架构初探
什么是架构?
软件架构的定义:
- 有关于软件整体结构与组件的抽象描述
- 用于知道软件系统各方面的设计
架构的发展
什么是单机架构
把所有的功能都实现在一个进程里,并部署在一台机器上
-
优点:
- 简单
-
问题
- C10K问题
- 运维需要停服
在单机架构下,无法支撑较大的请求量,并且在需要更新或运维系统时需要停机。
单体架构|垂直切分
对于单机架构的缺陷,很容易想到的解决方式就是多部署几份,对应用做水平扩容,转变为单体架构。
- 单体应用1
用户 =>负载均衡 - 单体应用2
- 单体应用3
在这种情况下,每个单体应用还是用来完成同样的功能。
进一步地,可以对应用进行垂直切分,让每个应用完成不同的垂直功能。
-
优点
- 可以水平扩容
- 运维不需要停服
-
缺点
- 每个应用的职责太多
- 爆炸半径大(一旦某个部分出了问题,影响范围大)
SOA、微服务 | 水平切分
一些概念:
Service Oriented Architecture
- 将应用的不同功能单元抽象为服务
- 定义服务之间的通信标准
微服务:SOA架构去中心化的演进方向。
在SOA、微服务的架构下,面临的问题是:
-
数据一致性
-
高可用如何满足
-
服务治理
- 服务故障与容灾
-
解耦 过微
- 解耦提高了运维成本
总结
架构演进的初衷:
- 需求量越来越大
- 实现越来越复杂
架构演进思路:
- 垂直切分
- 水平切分
企业级后端架构剖析
云计算的基本概念
云计算:指通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模数据分析和存储的基石
云计算的基础:
- 虚拟化技术
- 编排方案
架构:
- IaaS 基础设施即服务
- PaaS 平台即服务
- SaaS 软件即服务
- FaaS 函数即服务
云原生的概念
-
弹性资源(计算资源&存储资源)
- 虚拟化容器
- 快速扩缩容
-
微服务架构(HTTP vs RPC,通信交给框架)
- 业务功能与单元解耦
- 统一通信标准
-
DevOps(结合自动化流程,提升软件开发、交付效率)
- 敏捷开发
- CI/CD
-
服务网格(数据平面与控制平面的划分)
- 业务与治理解构(服务与网络通信解耦)
- 异构系统的治理统一化(不同语言编写的业务使用同样的治理方案)
- 复杂治理能力(相比于业务进行服务发现,通过中心化的控制面进行调度具有全局化的事业)
企业级后端架构的挑战
挑战
-
基础设施层面
-
物理资源是有限的
- 机器资源
- 带宽资源
-
资源利用率受限于部署服务
-
-
用户层面
- 网络通信开销大
- 网络抖动导致运维成本提高
- 异构环境下不同实例的资源水位不均
如何解决?
-
如何降低资源成本,提高资源利用率?
-
离线资源并池
- 在线业务与离线业务的区别(IO密集 vs 计算密集 | 实时性 vs 非实时性)
- 例如在凌晨时段将在线业务的资源降低,提供给离线业务使用
-
-
如何降低业务成本?
-
自动扩缩容:利用在线业务的潮汐性自动扩缩容
-
扩缩容依据指标是什么呢?
- 可以利用CPU使用率统计分位数
- 可以考虑内存使用率
- 具体取决于服务的情况。(当前来说基于IO比较难以量化)
-
-
微服务亲和性部署是什么?
- 将满足亲和性条件的容器调度到同一台宿主机(减少网络通信)
- 微服务中间件与服务网格通过共享内存通信
- 服务网格控制面提供灵活动态的流量调度
-
如何提高容错性?
-
基于微服务中间件/ServiceMesh的流量治理
- 熔断、重试
- 单元化
- 复杂环境的流量调度
-