什么是架构 | 青训营

123 阅读6分钟

1、架构基础

1.1、软件架构定义

软件架构是构建应用系统所需要的一组结构,包括软件元素、元素之间的关系以及两者的属性。其中如何分解软件元素以及这些元素之间的关系,变得非常重要。

一个好的软件架构具备两个特点:

  • 合理调配生产关系与生产力,让具备不同专业知识与技术栈的的人士都参与到软件系统开发中来, 高效地协同工作;
  • 能让各个软件元素有清晰的定义与职责,并有一套良好、高效的交互机制.

1.2、常见软件架构

  • 单机:所有功能都实现在一个进程里,进程部署在单台机器上,运维时需要停服。

    单机架构瓶颈:

    • 需要大量进程 / 线程作为处理单元,需要占用大量内存空间
    • 进程 / 线程切换,系统调度代价高

    解决方案: 采用协程(Routine),一个线程中,存在多个协程。如Go语言的轻量级线程Goroutine。协程由程序控制,在用户态中执行,在线程的基础上通过分时复用的方式运行多个协程。

  • 单体:分布式部署,进程部署在多台机器上,具备水平扩容能力(添加更多服务器),运维不需要停服

  • 垂直应用(分布式架构):单体架构基础上,将一个单体系统按业务垂直拆分为若干系统,系统之间通过网络交互来完成用户的业务处理,每个系统可分布式部署,

  • 面向服务型架构(SOA,Service Oriented Architecture):将应用的不同功能单元抽象为服务,将不同业务功能按服务进行拆分,通过定义服务间的通信标准建立联系。

  • 微服务架构: SOA的去中心化演进方向,每个服务都有自己的数据模型和数据库。基于SOA架构的思想,为了满足移动互联网对大型项目及多客户端的需求,对服务层进行细粒度的拆分,所拆分的每个服务只完成某个特定的业务功能,比如订单服务只实现订单相关的业务,用户服务实现用户管理相关的业务等等,服务的粒度很小,所以称为微服务架构。

1.3、架构演进方式:

业务需求量逐渐增大、系统逐渐复杂

  • 水平切分:分层 / 模块化
  • 垂直切分:分布式

2.企业级后端架构剖析

背景

兰师傅蛋糕店经过3年的蓬勃发展,积累了良好的口碑和用户基础,接下来,需要扩大规模:

  • 店面怎么盘?
  • 师傅怎么招?
  • 是否还要坚持纯手工制作?
  • 规模扩大了之后,工作重心应该是?

2.1企业级后端架构剖析-云计算

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

  • 虚拟化技术 - 整租 vs 合租
  • 编排方案 - 业主 vs 租赁平台

云计算架构:

云服务 IaaS - 云基础设施,对底层硬件资源池的抽象
PaaS - 基于资源池抽象,对上层提供的弹性资源平台
SaaS - 基于弹性资源平台构建的云服务
FaaS - 更轻量级的函数服务。好比 LeetCode 等 OJ,刷题时只需要实现函数,不需要关注输入输出流

云部署模式(拓展) 私有云 - 企业自用
公有云 - AWS/Azure/Google Cloud/Huawei
混合云

2.2企业级后端机构剖析-云原生

云原生技术为组织(公司)在公有云、自由云、混合云等新型的动态环境中,构建和运行可弹性拓展的应用提供了可能。它的代表技术有:弹性资源、微服务架构、DevOps、服务网格

2.2.1企业级后端架构剖析-云原生之弹性计算资源

弹性计算资源类型:

  • 服务资源调度
    • 微服务:和面、雕花
    • 大服务:烤箱
  • 计算资源调度
    • 在线:热销榜单,互联网后端服务
    • 离线:热销榜单更新,大数据分析
  • 消息队列
    • 在线队列:削峰、解耦
    • 离线队列:结合数据分析的一整套方案,如ELK

弹性存储资源类型:

  • 经典存储
    • 对象存储:宣传视频、图片等。结合 CDN 等技术,可以为应用提供丰富的多媒体能力
    • 大数据存储:应用日志、用户数据等。结合数据挖掘、机器学习等技术,提高应用的体验
  • 关系型数据库
    • 收银记录
  • 元数据
    • 服务发现:蛋糕店通讯录
  • NoSQL
    • KV存储:Redis,来个xx蛋糕
    • 文档存储:Mongo

在云原生的大背景下,不论是计算资源还是存储资源,他们都像是服务一样供用户使用。

2.2.2企业级后端架构剖析-云原生之DevOps

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

2.2.3企业后端剖析-云原生之微服务架构

通信标准:

微服务架构下,服务之间的通讯标准是基于协议而不是 ESB 的。

  • HTTP(RESTful API)
  • RPC(Thrift, gRPC)

微服务中间件 RPC vs HTTP:

  • 性能 - RPC 协议往往具备较好的压缩率,性能较高。如 Thrift, Protocol Buffers
  • 服务治理 - RPC 中间件往往集成了丰富的服务治理能力。如 熔断、降级、超时等
  • 可解释性 - HTTP 通信的协议往往首选 JSON,可解释性、可调试性更好

云原生场景下,微服务大可不必在业务逻辑中实现符合通信标准的交互逻辑,而是交给框架来做

2.2.3企业后端剖析-云原生之服务网格

什么是服务网格?

  • 微服务之间通讯的中间层
  • 一个高性能的4层网格代理
  • 将流量层面的逻辑与业务进行解耦

没有什么是加一层代理解决不了的问题,服务网格相比较于 RPC/HTTP 框架:
1.实现了异构系统治理体系的统一化 2.服务网格的数据平面代理与业务进程采取进程间通信的模式,使得流量相关的逻辑(包含治理)与业务进程解耦,生命周期也更容易管理