架构初探 | 青训营笔记

111 阅读8分钟

架构初探 | 青训营笔记

这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天,主要记录相关的知识点。

本堂课重点内容

  • 架构
  • 企业级架构剖析
  • 企业级后端架构挑战

架构

什么是架构

架构,是软件整体系统与组件的抽象描述,可以指导软件系统各个方面的设计。

单机架构

单机架构将所有的功能都实现在一个相同的进程,部署在同一个机器中。

这样的结构的优点是其非常简单,但是也带来了相应的缺点:

  • 运维需要停服,用户体验受到影响
  • 承载能力有限。

单体架构

单体架构将实现了对应功能的进程部署到多个机器上,这样单体架构就具备了具备水平扩容的能力,同时也不需要像单机架构那样在运维的过程中需要停服。

对应的,单体架构也有相应的缺点:

  • 后端进程职责太多,会导致程序过于臃肿
  • 爆炸半径较大,进程中一个很小的模块出现问题,都可能导致整个进程崩溃

垂直应用架构

在单机架构基础上,将进程按照某种依据进行切分。由于对进程进行了切分,因此一定程度上减少了后端进程职责,避免了臃肿的情况,同时也会缩小可能的爆炸半径。

要实现良好的垂直应用架构,就需要有良好的切分策略。

可见,垂直应用架构并没有根本解决单体架构的问题

SOA (面向服务架构)

SOA 是以服务为基础的架构,通过将进程按照不同的功能单元进行抽象拆分,分为一个个服务。服务之间按照一定的标准 ESB 进行通信。

通过按照功能单元拆分,服务的职责更加清晰,并且粒度被精细到一个个服务层面,爆炸半径是可控的。

由于所有的服务都按照同一个标准进行通信,该标准就应该是一套完整的解决方案。

微服务

SOA 架构中,ESB 起到了至关重要的作用。但从架构拓扑来看,它更像是一个集中式的模块。有一个 SOA 分布式演进的分支,最终的形态便是微服务。在微服务中,服务之间彼此定义的自己通信规则。由此,微服务不但有 SOA 的所有优点,通信还更加灵活。

但是,由于服务被切分得更加细化,通信规则的制定等,带来了运维成本的提高。

小结

由此可见,架构演进主要有两种思路:垂直切分——分布式,水平切分——分层/模块化

企业级架构剖析

云计算

云计算,可以被看成是一个提供了各种计算资源的服务网络。

云计算的基础主要有两个:

  • 虚拟化技术,包括硬件层面,操作系统层面和网络层面
  • 编排方案,比如 VMContainer

云计算可以被分成四层架构:

  • IaaS
  • PaaS
  • SaaS
  • FaaS

可以从一个例子来理解这四层架构:现在,你想开一家蛋糕店,为了让蛋糕店顺利营业,你有四种选择:

  • 你可以租一个房子用作开店,但是房子里什么都没有(IaaS)
  • 你可以租一个房子,同时装饰好了店面(PaaS)
  • 你可以租一个房子,同时装饰好了店面,另外还雇用了一些蛋糕师傅来制作蛋糕(SaaS)
  • 你可以租一个房子,同时装饰好了店面,但是没有蛋糕师傅,而是送给你一堆自动制作蛋糕的机器(FaaS)

云部署

云部署分为三类:私有云,混合云和公有云。

  • 私有云:云端资源所有的服务不是供别人使用,而是供自己内部人员或分支机构使用。
  • 公有云:云端资源开放给社会公众使用。
  • 混合云:由两个或两个以上不同类型的云组成,它们各自独立,但用标准的或专有的技术将它们组合起来,而这些技术能实现云之间的数据和应用程序的平滑流转。

云原生

云原生是云原生(计算)的简称,是云计算发展到现在的一种形态。

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

  • 弹性资源:具有虚拟化容器、快速扩容的能力
  • 微服务架构:实现了业务的解耦,统一通信标准
  • DevOps:方便部署到云上后进行开发、测试
  • 服务网格:可以使得异构系统的治理统一化,业务与治理解构,具有复杂的治理能力
弹性资源

基于计算和存储,可以分为弹性计算资源和弹性存储资源两大类。

弹性计算资源:

  • 计算资源调度
    • 在线计算 - 互联网后端服务
    • 离线计算 - 大数据分析。
  • 消息队列
    • 在线队列 - 削峰、解耦
    • 离线队列 - 结合数据分析的一整套方案

弹性存储资源:

  • 经典存储
    • 对象存储 - 视频、图片等。结合 CDN 等技术,可以为应用提供丰富的多媒体能力
    • 大数据存储 - 应用日志、用户数据等。结合数据挖掘、机器学习等技术,提高应用的体验
  • 关系型数据库
  • 元数据
  • NoSQL
    • KV 存储 - Redis
    • 文档存储 - Mongo

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

DevOps

DevOps 是云原生环境下软件交付的利器,贯穿软件开发的整个周期。通过结合自动化流程,提高软件的开发交付效率。最终实现缩短软件开发生命周期并使用 持续交付 提供高质量的软件。

微服务

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

  • HTTP - H1/H2
  • RPC - Apache Thrift/gRPC

HTTP 和 RPC 的考虑:

  • 性能 - RPC 协议往往具备较好的压缩率,性能较高。
  • 服务治理 - RPC 中间件往往集成了丰富的服务治理能力。
  • 可解释性 - HTTP 通信的协议往往首选 JSON,可解释性、可调试性更好
服务网格

服务网格的主要介绍:

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

服务网格相比较于 RPC/HTTP 框架:

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

简单来说,服务网格是在原有的业务层面上增加了更强的通信能力,使得可以不需要依赖于业务代码就可以实现通信,实现了业务代码的解耦。

企业级后端架构挑战

对于用户侧来说,云资源可以被看成是无限的,但是对于企业来说,物理资源实际上是有限的,因此,对于企业而言,就需要解决无限的弹性资源与有限的物理资源之间的冲突问题。

换句话说,从企业侧,需要提高资源的利用率。

对于用户而言,存在许多挑战:使用了云原生微服务后,服务之间的通信开销较大,应该何种的方法解决该问题;并且微服务可能导致运维成本提升;软件实际的异构环境也不应该被用户所感知等。

离在线资源并池

对于物理资源与弹性资源的冲突,可以采用离在线资源并池的方案。

考虑到在线业务的潮汐性,物理资源的用量不是一成不变的。使用离在线资源并池,可以根据一定的规则需要自动扩缩容量:

image.png

扩容缩容的指标可以根据实际的业务场景来判断,比如 cpu的使用情况,内存的使用情况等。

微服务亲合性部署

微服务自身的通信成本可能较高,一种方案是这样构建微服务:

  • 在形态上是微服务架构
  • 在通信上是单体架构

亲合性部署,即通过将微服务调用形态与资源调度系统结合,将一些调用关系紧密、通信量大的服务部署在同一个机器上,并且使用 IPC 代替 RPC 的方式,降低网络通信带来的开销。

个人总结

本次课程主要学习了:

  • 什么是架构及架构的类别
  • 从企业的角度看待架构
  • 企业级后端架构面临的挑战及部分解决方案