这是我参与「第五届青训营」伴学笔记创作活动的第 8 天
一、本堂课重点内容
本节课程主要分为四个方面:
- 架构的定义和演进
- 企业级后端架构的形态
- 后端架构面临的挑战
- 后端架构实战
二、详细知识点介绍
1. 架构的定义和演进
- 定义:架构是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。
- 架构的类型
-
单机:把所有功能都实现在一个进程里,并部署在一台服务器上。
- 优点:实现简单。
- 问题:并发性不足,存在性能瓶颈;运维时需要停服。
-
垂直切分
- 单体架构:把进程部署在多个机器上,并引入负载均衡层。
- 垂直应用架构:把不同应用的代码从之前一个大的进程中拆分出来。
- 优点:解决了单机服务的水平扩容、运维停服问题。
- 问题:职责太多,开发效率不高。
-
水平切分
- SOA架构:将应用的不同功能单元抽象为服务,并定义服务之间的通信标准。
- 微服务架构:SOA的去中心化演进。
- 优点:不同模块可以专心于自己的业务逻辑,提高了开发迭代效率;各个服务独立运维,提高了应用整体的稳定性。
- 问题:数据一致性、高可用、治理、运维成本提高。
-
2. 企业级后端架构刨析
- 云计算
- 概念:云计算指通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模数据分析和存储的基石。
- 基础
- 虚拟化技术:如 Hyper-V,可以简单理解为虚拟机服务。
- 编排方案:如 Kubernetes,即将不同的虚拟机或容器以某种方式组合在一起,动态使用。
- 架构
- IaaS(Infrastructure as a Service,基础设施即服务,如腾讯云等)
- PaaS(Platform as a Service,平台即服务,如Heroku等)
- SaaS(Software as a Service,软件即服务)
- FaaS(Function as a Service,功能即服务)
- 云原生
- 概念:云原生即云原生计算的简称,它是云计算发展到现在的一种形态。它主要涉及弹性资源、微服务架构、DevOps、服务网格四个大方面。
- 弹性资源
- 弹性计算资源:服务资源调度、计算资源调度、消息队列等。
- 弹性存储资源:数据库、元数据等,将存储资源当做服务。
- DevOps
- DevOps是云原生时代软件交付的利器,贯穿整个软件开发周期。结合自动化流程,提高软件开发、交付效率。
- 常见的 DevOps:敏捷开发、CI/CD等。
- 微服务架构
- 通信标准:HTTP、RPC。
- 微服务中间件的选择:性能、服务治理、协议可解释性。
- 云原生场景下微服务不必在业务逻辑中实现符合通信标准的交互逻辑,而是交给框架来解决。
- 服务网格
- 服务网格是微服务之间通讯的中间层,它是高性能的网络代理,可以实现业务代码与治理的解耦。
- 服务网格用于组织容器之间的沟通。
3. 企业级后端架构的挑战
- 基础设施层面
- 物理资源是有限的:机器、带宽等。
- 资源利用率受制于部署服务。
- 用户层面
- 网络通信开销较大。
- 网络通信和网络抖动导致成本提高。
- 异构环境下,不同实例资源水位不均。
- 解决方案
- 离在线资源并池:降低物理资源成本,提供更多的弹性资源。
- 自动扩缩容:利用在线业务潮汐降低业务成本。
- 微服务亲合性部署:降低业务成本,提高服务可用性。
- 流量治理:提高微服务调用容错性,进一步提高开发效率。
- CPU 水位负载均衡:打平异构环境算力差异,为自动扩缩容提供正向输入。