💌 这是我参与「第五届青训营」伴学笔记创作活动的第 7 天。
🧡 本堂课重点内容
- 什么是架构
- 企业级后端架构剖析
- 企业级后端架构的挑战
🧡 知识点介绍
架构定义
💌 架构又称软件架构,是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。实现一个软件有很多种方法,架构在方法选择上起着至关重要的指导作用。
重要性
- 地基没打好,大厦容易倒。
- 地基坚实了,大厦才能盖得高。
- 站在巨人肩膀上,才能看得远。
常见结构
- 单机:软件系统需要对外提供服务,单机就是把所有功能都实现在一个进程里,并部署在一台机器上。
优点简单。
缺点运维需要停服,请求排队。 - 单体:分布式部署服务。
- 垂直应用:按应用垂直切分单体。
优点水平扩容,运维不需要停服。
缺点开发效率不高,爆炸半径大。 - SOA (Service-Oriented Architecture):水平切分,将应用的不同功能单元抽象为服务,定义服务之间的通信标准。
- 微服务:SOA 去中心化的演进方向。
问题
- 数据一致性:装货台共交付了多少蛋糕?
- 高可用:这么多师傅,如何合作?
- 治理:烤箱坏了,怎么容灾?
- 解耦 vs 过微:运维成本高了,值当么?
后端架构剖析
💌 参考本人 CSDN 文章: 云计算与边缘计算大白话(●一●)_Jodie大白话的博客-CSDN博客_云计算与边缘智能 DevOps:开发&运维全流程_Jodie大白话的博客-CSDN博客_devops开发流程
弹性计算资源
- 服务资源调度:微服务,单体服务。
- 计算资源调度
在线计算:热销榜单。
离线计算:热销榜单更新,大数据分析。 - 消息队列
在线队列:削峰、解耦。
离线队列:结合数据分析的一整套方案,如 ELK。
弹性存储资源
- 经典存储
对象存储:视频、图片等。结合 CDN 等技术,可以为应用提供丰富的多媒体能力。
大数据存储:应用日志、用户数据等。结合数据挖掘、机器学习等技术,提高应用体验。 - 关系型数据库:具有强关系属性的数据。
- 元数据:服务发现。
- NoSQL:KV 存储,如 Redis。
通信标准
💌 微服务架构下,服务之间的通讯标准是基于协议的,不必在业务逻辑中实现交互逻辑,交给框架来做。
- HTTP:RESTful API
- RPC:Apache Thrift,gRPC
💌 如何在 HTTP 和 RPC 之间选择?
- 性能:RPC 协议往往具备较好的压缩率,性能较高,如 Thrift,Protocol Buffers。
- 服务治理:RPC 中间件往往集成了丰富的服务治理能力,如熔断、降级、超时等。
- 可解释性:HTTP 通信的协议往往首选 JSON,可解释性、可调试性更好。
服务网络
- 微服务之间通讯的中间层。
- 一个高性能的 4 层网络代理。
- 将流量层面的逻辑与业务进程解耦。
- 实现了异构系统治理体验的统一化。
- 服务网格的数据平面代理与业务进程采取进程间通信的模式,使得流量相关的逻辑(包含治理)与业务进程解耦,生命周期也更容易管理。
后端架构挑战
基础设施层面
- 物理资源是有限的:机器,带宽。
- 资源利用率受制于部署服务。
用户层面
- 网络通信开销较大。
- 网络抖动导致运维成本提高。
- 异构环境下,不同实例资源水位不均。
解决思路
- 提供更多弹性资源:离在线资源并池。
在线业务:IO 密集型为主,实时性。
离线业务:计算密集型为主,非实时性。 - 自动扩缩容:依据 CPU 或内存利用率。
- 亲和性部署:将微服务调用形态与资源调度系统结合,将一些调用关系紧密、通信量大的服务部署在同一个机器上,并且使用 IPC 代替 RPC 的方式,微服务中间件与服务网格通过共享内存通信,服务网格控制面实施灵活、动态的流量调度,降低网络通信带来的开销。
- 基于微服务中间件 & 服务网络的流量治理:容灾、熔断、重试。
- CPU 水位负载均衡:IaaS 提供资源探针,服务网络实现动态负载均衡。
🧡 课后总结
💌 本节课学了架构和云计算相关的知识,讲解如何解决资源分配问题对我目前做的科研也有很大的帮助,云计算是我的梦中情岗,希望今年找工作顺利~~