架构初探-谁动了我的蛋糕 | 青训营笔记

52 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天

通过今天的学习,让我对后端架构有了一个新的认识:

  • 没有最好的架构,只有最合适的架构
  • 做架构设计
    1. 先从需求出发。要满足什么样的需求?预期规模有多大?
    2. 做足够的业界调研。业界对于类似的需求是怎么做的?有无成熟的方案可以借鉴?直接拿来用有什么问题?
    3. 技术选型。涉及的技术组件是自研,还是使用开源的?
    4. 异常情况。任何时候,都不能做『输入合法』的假设。容灾能力一定要有
  • 学好架构,是工程师成长的一个重要标志

1、什么是架构

架构,又称软件架构,是有关软件整体结构与组件的抽象描述,用于指导软件系统各方面的设计

架构的重要性:

拿盖房子来做举例子。

我们都知道,地基对于一栋楼房的主要性,架构对于一个软件的重要性也是类似的:

  • 架构没设计好,软件容易崩,用户体验上不去。最终要么重构,要么放弃
  • 架构设计好了,软件的稳定性上去了,用户体验高了,口碑一点点就打造出来了
  • 良好的架构基础,也为软件的未来发展提供了更多的可能。为用户赋能,实现自身价值

常见软件架构:

  • 单机: All in one,所有的东西都在一个进程里,部署在一个机器上。
  • 单体: 在单机架构的基础上,将进程部署到多个机器上。
  • 垂直应用: 在单机架构基础上,将进程按照某种依据切分开。比如,A 软件和 B 软件的后端原先采用单机架构部署,那就是一个进程部署在多个机器上;如果用垂直应用架构,可以将 A 和 B 的后端拆分为 A、B 两个进程,然后再按照单体模式的思路,部署在多个机器上。
  • SOA (Service Oriented Architecture): SOA 架构中,服务为一等公民,将进程按照不同的功能单元进行抽象,拆分为『服务』。有了服务之后,SOA 还为服务之间的通信定义了标准,保证各个服务之间通讯体验的一致性。
  • 微服务 (Microservice): 在 SOA 架构中,ESB 起到了至关重要的作用。但从架构拓扑来看,它更像是一个集中式的模块。有一个 SOA 分布式演进的分支,最终的形态便是微服务。

2、企业后端架构剖析

  • 云计算
    • 基础
      • 虚拟化
      • 编排
    • 架构
      • IaaS: 云基础设施,对底层硬件资源池的抽象
      • SaaS: 基于资源池抽象,对上层提供的弹性资源平台
      • PaaS: 基于弹性资源平台构建的云服务
      • FaaS: 更轻量级的函数服务。好比 LeetCode 等 OJ,刷题时只需要实现函数,不需要关注输入输出流
  • 云原生: 云原生,实际是云原生(计算)的简称,它是云计算发展到现在的一种形态。
    • 弹性资源
      • 计算资源
      • 存储资源
    • 微服务架构: 微服务架构下,服务之间的通讯标准是基于协议而不是 ESB 的。
      • 通信协议
      • 中间件
    • DevOps
      • 软件生命周期
    • 服务网格
      • 微服务之间通讯的中间层
      • 一个高性能的 4 层网络代理
      • 将流量层面的逻辑与业务进程解耦

没有什么是加一层代理解决不了的问题,服务网格相比较于 RPC/HTTP 框架:

  • 实现了异构系统治理体验的统一化
  • 服务网格的数据平面代理与业务进程采取进程间通信的模式,使得流量相关的逻辑(包含治理)与业务进程解耦,生命周期也更容易管理

3、企业后端架构的挑战

  • 离线任务
  • 在线任务
  • IO 密集型
  • CPU 密集型
  • 服务治理
  • IPC (Inter-Process Communication)
  • RPC (Remote Procedure Call)