架构初探 | 青训营笔记

45 阅读6分钟

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

重点概览

  • 什么是架构
  • 企业级后端架构剖析
  • 企业级后端架构的挑战

详细介绍

架构介绍

架构, 又称软件架构

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

通俗理解: 实现一个软件有多种方法, 架构在方法选择上起至关重要的指导作用

单机

就是把所有功能都实现在一个进程里, 并部署在一台机器上

  • 优点:简单
  • 问题:例如:C10K problem

单体, 垂直应用

单体架构: 分布式部署 垂直应用架构: 按应用垂直划分的单体

  • 优点:

    • 水平扩容
    • 运维不需要停服
  • 问题:

    • 职责太多, 开发效率不高
    • 爆炸半径大

SOA, 微服务

SOA(Service-Oriented Architecture)

  1. 将应用的不同功能单元抽象为服务
  2. 定义服务之间的通信标准

微服务架构: SOA的去中心化演进方向

  • 问题: 数据一致性 高可用 (如何各服务合作) 治理 (如何容灾) 解耦 vs 过微 (运营成本提高是否值得)

❤重点理解

实例:卖蛋糕

兰师傅的蛋糕店仅靠兰师傅自己卖蛋糕,相当于一个单体服务,就算再怎么磨练手速,每天能卖出去的量也是有上限的。 而运维需要停服。任何运维操作都需要停服,因为只有一个单体服务,有用户使用的时间点没有办法运维。比如兰师傅去上厕所了。 单机服务的模式,除了简单之外设有任何优点。当今互联网时代,单机服务的形态一般只适合出现在预研或初包创阶段,但凡业务有发展和迭代的诉求,就应该快速做架构迭代。

image-20230212140328725.png

演进:如何卖更多的蛋糕?多雇几个师傅

按照这个思路: 我们把进程部署在多个机器上,并引入负载均衡层,经过这样的垂直切分,就来到了单体架构。多个机器就好比把蛋糕切成几大块,负载均衡层负责引导用户去事先切好的几块蛋糕处 在单体架构基础上,进一步地,再把不同应用的代码从之前一个大的进程中拆分出来,就来到了垂直应用架构。按应用拆分进程,就好比慕斯、戚风等蛋糕在不同的点发配

image-20230212140347345.png

随着业务场景越来越复杂,服务的职责也越来越多。学过面向对象程序设计的同学都知道单一职责的重要性,在软件架构里也是一样的。开发者不仅要关心Wb后端业务逻辑,还要关心缓存、持久化存储,甚至跟机器打交道。长此以往,RD(后端工程师)很难分出精力专注于业务能力的开发业务发展需要上线、变更,将会影响所有其他不涉及的场景。一旦出问题,影响面不可估量

既然可以根据应用把架构做垂直拆分,那是否可以根据模块/职责对架构进行水平拆分呢?

演进:如何提高做蛋糕的效率?分工协作

按照这个思路:

我们把原本包含了众多复杂逻辑的进程按照功能单元抽象成多个服务,以服务为一等公民,并为它们之间的通信定义标准,便得到了SOA架构。 这里有两个相对比较重要的概念:

  1. 服务,是根据功能抽象出来的概念。比如说,处理用户登录信息的Passport服务,负责持久化存储的数据库服 务,以及为了加快查询速度的缓存服务等
  2. 通信标准,是服务之间通信的基石。没有实现定义好的通信标准,就好比多个做蛋糕的师傅语言不通,难以协作

为了服务之间更好的通信,有两个大的发展方向:中心化和去中心化。中心化的方案形态较重,拓展性不佳,普及性不佳,而去中心化的方向,最终的形态就是微服务架构

优点:

  1. 不同模块的RD可以专心于自己的业务逻辑了,开发迭代效率得到显著提高
  2. 各个服务独立运维,变更操作的影响面可控,应用整体的稳定性得到了提高

image-20230212140413737.png

企业级后端架构剖析

云计算

云计算: 通过软件自动化管理, 提供计算资源的服务网络, 是现代互联网大规模熟悉分析和存储的基石 基础:

  • 虚拟化技术
  • 编排方案 架构: IaaS (Infrastructure as a Service) PaaS (Platform as a Service) SaaS (Software as a Service) FaaS (Function as a Service)

云原生

Cloud Native

云原生技术为组织(公司)在公有云, 自由云, 混合云等新型的动态环境中, 构建和运行可弹性拓展的应用提供了可能 弹性资源:

  • 虚拟化容器
  • 快速扩缩容

微服务架构:

  • 业务功能单元解耦
  • 统一的通信标准

DevOps:

  • 敏捷开发 CI/CD (CI: continuous integration持续集成, CD: continuous delivery/deployment代码持续交付/部署)

服务网格:

  • 业务与治理解构
  • 异构系统的治理统一化 复杂治理能力

弹性资源

弹性计算资源类型: 服务资源调度 微服务 大服务 计算资源调度 在线: 如热销榜单 离线: 如热销榜单更新 消息队列 在线: 削峰, 解耦 离线: 大数据分析

弹性存储资源类型: 经典 对象: 如宣传视频 大数据: 如用户消费记录 关系型数据库 如收银记录 元数据 服务发现: 如蛋糕店通讯录 NoSQL KV (key-value) 总结: 将存储资源当成服务

DevOps

DevOps是云原生时代软件交付的利器, 贯穿整个软件开发周期 结合自动化流程, 提高软件开发, 交付效率

微服务架构

通信标准 HTTP(RESTful API) RPC(Thrift, gRPC) 微服务中间件RPC vs HTTP 性能 服务治理 协议可解释性 云原生场景下, 微服务大可不必在业务逻辑中实现符合通信标准的交互逻辑, 而是交给框架来做

服务网格

服务网格(Service Mesh) 微服务之间通讯的中间层 高性能网格代理 业务代码与治理解耦 相比较RPC/HTTP框架 异构系统治理统一化 与业务进程解耦, 生命周期易管理