这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记
什么是架构
软件整体结构与组件的抽象描述 指导软件系统各个方面的设计
1.1什么是架构-问题
开蛋糕房须解决如下问题:
- 如何做蛋糕
- 独家秘方,还是亲自做比较好
- 如何卖蛋糕
- 刚开始客流量不大,边做边卖 开张!
1.2 什么是架构-单机
软件系统需要具备对外提供服务,单机,就是把所有功能都实现在一个进程里,并部署在一台机器上
优点:简单
问题:C10K problem(在单机上服务能力瓶颈)、运维需要停服 演进:如何麦更多的蛋糕? 雇用更多师傅
1.3 什么是架构-单体、垂直应用|垂直切分
单体架构:分布式部署 垂直应用架构: 按应用垂直切分的单体
优点:水平扩容、运维不需要停服
问题:职责太多,开发效率不搞、爆炸半径大 演进:提高做蛋糕效率? 分工协作
1.4 什么是架构-SOA、微服务|水平切分
SOA(Service-Oriented Architecture)
- 将应用的不同功能单元抽象为服务(垂直切了后再水平切,进一步细分服务)
- 定义服务之间的通信标准
**微服务架构:SOA **的去中心化演进方向
耦合性更低
问题:
- 数据一致性
- 装货台交付了多少蛋糕?
- 高可用
- 这么多服务,如何合作?
- 治理
- 烤箱坏了,这么容灾?
- 解耦 vs 过微
- 运维成本高了,值当吗?
小结
**架构的演进初衷:好比做蛋糕。
- 需求量越来越大,终归要增加人手
- 越做越复杂,终归要分工合作 架构的演进思路:就像切蛋糕。蛋糕越来越大,一口吃不下终归要切分
- 垂直切分
- 水平切分(独立性强,降低耦合性)
企业级后端架构剖析
背景: 蛋糕店需要扩大规模
- 店面怎么盘:
- 买
- 租
- 师傅怎么招:
- 全家出马
- 科班出身
- 是否继续坚持纯手工制作?
- 规模大了之后,工作重心应该是?
- 精进蛋糕制作收益
- 蛋糕店重点方向梳理 & 未来规划
2.1 云计算
**云计算:**是指通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模数据分析和存储的基石。
基础:
- 虚拟化技术(整租 vs 合租)
- 编排方案 (业主 vs 租赁平台)
右边类似用云计算实现,左边为自己来使用云计算能让我们更加关注生产细节,而不是杂事
构架:
- laaS(infrastructure as a Service)
- 买房子 vs 房屋租赁平台
- PaaS(Platform as a Service)
- 清包 vs 全包
- SaaS(Software as a Service)
- 从零培训 vs 雇佣培训过的师傅
- FaaS(Function as a Service)
- 纯手工 vs 机器批量生产
2.2 云原生
为工作组织在公有云、自由云、混合云等信动态环境中,构建和运行弹性拓展的应用提供可能
2.2.1 弹性计算资源
类型:
- 服务资源调度
- 微服务
- 大服务
- 计算资源调度
- 在线:热销榜单
- 离线:热销榜单更新
- 消息队列
- 在线:削峰、解耦
- 离线:大数据分析
2.2.2 弹性存储资源
弹性存储源类型:
- 经典
- 对象:宣传视频
- 大数据:用户记录
- 关系型数据库
- 收银记录
- 元数据
- 服务发现:蛋糕店通讯录
- Nosql
- KV 总结:将存储资源当成服务一样
2.2.3 DevOps
DevOps 是云原生时代软件交付的利器,贯穿整个软件开发周期。
结合自动化流程,提高软件开发、交付效率
2.2.4 微服务架构
通信标准:
- HTTP (RESTful API)
- RPC (thrift,gRPC)远程过程调用
微服务中间件 R PC vs HTTP:
- 性能
- 服务治理
- 协议可解释性
云原生场景下,微服务大可不必在业务逻辑中实现符合通信标准的交互逻辑,而是交给框架来做
2.2.5 服务网格
企业级后端架构的挑战
问题 挑战:
- 基础设施层面
- 物理资源是有限的
- 机器
- 带宽
- 资源利用率受制于部署服务
- 物理资源是有限的
- 用户层面
- 网络通信开销较大
- 网络抖动导致运维成本过高
- 异构环境下,不同实例资源水位不均(不同cpu)
3.1 离在线资源并池
问题:同一个机器怎么做在线隔离?
容器化,对cpu的核心作隔离
离线的资源对应离线的进程,在线的资源对应在线的进程,比如一个机器有96个核心,可以用类似于容器化的方式,将在线资源和离线资源用CGROUP或虚拟化的方式,对cpu做隔离,不同的任务去使用不同的cpusize。
3.2 自动扩缩容
核心收益:
- 降低业务成本 解决思路: 自动扩缩容
- 利用在线业务潮汐性自动扩缩容 问题:扩缩容依据什么指标? CPU的P50 作为指标
内存作为指标
CPU+内存利用率
3.3 微服务亲合性部署
核心收益:
- 降低业务成本
- 提高服务可用性
解决思路:微服务亲合性部署
- 将满足亲合性条件的容器调度到一台宿主机
- 微服务中间件与服务网络通过共享内存通信
- 服务网格控制面实施灵活、动态的流量调度
3.4 流量治理
核心收益:
- 提高微服务调用容错性
- 容灾
- 进一步提高开发效率,DevOps 解决思路:基于微服务中间件 & 服务网格的流量治理
- 熔断、重试
- 单元化
- 复杂环境(功能、预览)的流量调度