架构设计| 青训营笔记

69 阅读3分钟

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

架构概念

定义:架构,又称软件架构:

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

重要性

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

单机架构

All in one,所有的东西都在一个进程里,部署在一个机器上。

优点:

  • 简单

缺点:

  • 运维需要停服,用户体验较差

  • 承载能力有限。[服务端经典的C10k问题(译) - 知乎 (zhihu.com)]

image.png


单体架构

**单体架构:**在单机架构的基础上,将进程部署到多个机器上。进行分布式部署

优点:

  • 具备水平扩容能力
  • 运维不需要停服

缺点:

  • 后端进程职责太多,越来越臃肿
  • 进程中一个很小的模块出现问题,都可能导致整个进程崩溃

image.png

垂直用用架构:按应用进行垂直切分部署在不同机器

即使垂直应用架构,每个实例的职责还是多,没有根本解决单体架构的问题,每个实例还需要进行相关的一系列操作,比如都需要进行搬水,打蛋等常用操作。

为了提高效率,因此要让每个实例只做某一个任务,比如单独一个师傅进行搬水操作,分工明确

SOA架构

SOA 架构中,将进程按照不同的功能单元进行抽象,拆分为『服务』。有了服务之后,SOA 定义了服务之间的通信标准,保证各个服务之间通讯的一致性。

优点:

  • 各服务的职责更清晰
  • 运维粒度减小到服务,爆炸半径可控

缺点:

  • ESB (企业服务总线) 往往需要一整套解决方案

ESB的工作就是提供和调用集成系统的服务。使用了ESB,在大多情况下,每个系统和ESB之间,只需要定义一个访问方法,一个接口。

image.png

image.png

这里发现,所有的服务都需要有相同的沟通技巧,也就是大家都需要有相同的通信标准

微服务架构

微服务架构就是SOA架构的去中心化演进。在 SOA 架构中,ESB 起到了至关重要的作用。但从架构拓扑来看,它更像是一个集中式的模块。微服务则是对其进行分布式改变,微服务服务变得更多,另加零散,同时增加了运维成本

image.png

优点:

  • 兼具 SOA 解决的问题
  • 服务间的通信更敏捷、灵活

缺点:

  • 运维成本

拆分成服务之后就需要解决一些问题:

  • 数据一致性问题:每台机器的数据同步
  • 高可用问题:某个服务挂了,能否继续提供服务
  • 治理:某个服务挂了,如何容灾
  • 判断是否服务拆分的过于细致而导致激增的运营成本

架构演变思路

  • 垂直切分(一台机器变多台机器)
  • 水平切分(按服务进行切分)

如何做架构设计

  1. 先从需求出发。要满足什么样的需求?预期规模有多大?
  2. 做足够的业界调研。业界对于类似的需求是怎么做的?有无成熟的方案可以借鉴?直接拿来用有什么问题?
  3. 技术选型。内部/社区都有那些解决方案可以参考
  4. 异常情况。任何时候,都不能做『输入合法』的假设。容灾能力一定要有