架构初探 | 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天,主要记录相关的知识点。
本堂课重点内容
- 架构
- 企业级架构剖析
- 企业级后端架构挑战
架构
什么是架构
架构,是软件整体系统与组件的抽象描述,可以指导软件系统各个方面的设计。
单机架构
单机架构将所有的功能都实现在一个相同的进程,部署在同一个机器中。
这样的结构的优点是其非常简单,但是也带来了相应的缺点:
- 运维需要停服,用户体验受到影响
- 承载能力有限。
单体架构
单体架构将实现了对应功能的进程部署到多个机器上,这样单体架构就具备了具备水平扩容的能力,同时也不需要像单机架构那样在运维的过程中需要停服。
对应的,单体架构也有相应的缺点:
- 后端进程职责太多,会导致程序过于臃肿
- 爆炸半径较大,进程中一个很小的模块出现问题,都可能导致整个进程崩溃
垂直应用架构
在单机架构基础上,将进程按照某种依据进行切分。由于对进程进行了切分,因此一定程度上减少了后端进程职责,避免了臃肿的情况,同时也会缩小可能的爆炸半径。
要实现良好的垂直应用架构,就需要有良好的切分策略。
可见,垂直应用架构并没有根本解决单体架构的问题。
SOA (面向服务架构)
SOA 是以服务为基础的架构,通过将进程按照不同的功能单元进行抽象拆分,分为一个个服务。服务之间按照一定的标准 ESB 进行通信。
通过按照功能单元拆分,服务的职责更加清晰,并且粒度被精细到一个个服务层面,爆炸半径是可控的。
由于所有的服务都按照同一个标准进行通信,该标准就应该是一套完整的解决方案。
微服务
在 SOA 架构中,ESB 起到了至关重要的作用。但从架构拓扑来看,它更像是一个集中式的模块。有一个 SOA 分布式演进的分支,最终的形态便是微服务。在微服务中,服务之间彼此定义的自己通信规则。由此,微服务不但有 SOA 的所有优点,通信还更加灵活。
但是,由于服务被切分得更加细化,通信规则的制定等,带来了运维成本的提高。
小结
由此可见,架构演进主要有两种思路:垂直切分——分布式,水平切分——分层/模块化
企业级架构剖析
云计算
云计算,可以被看成是一个提供了各种计算资源的服务网络。
云计算的基础主要有两个:
- 虚拟化技术,包括硬件层面,操作系统层面和网络层面
- 编排方案,比如
VM和Container
云计算可以被分成四层架构:
- 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 框架:
- 实现了异构系统治理体验的统一化
- 服务网格的数据平面代理与业务进程采取进程间通信的模式,使得流量相关的逻辑(包含治理)与业务进程解耦,生命周期也更容易管理
简单来说,服务网格是在原有的业务层面上增加了更强的通信能力,使得可以不需要依赖于业务代码就可以实现通信,实现了业务代码的解耦。
企业级后端架构挑战
对于用户侧来说,云资源可以被看成是无限的,但是对于企业来说,物理资源实际上是有限的,因此,对于企业而言,就需要解决无限的弹性资源与有限的物理资源之间的冲突问题。
换句话说,从企业侧,需要提高资源的利用率。
对于用户而言,存在许多挑战:使用了云原生微服务后,服务之间的通信开销较大,应该何种的方法解决该问题;并且微服务可能导致运维成本提升;软件实际的异构环境也不应该被用户所感知等。
离在线资源并池
对于物理资源与弹性资源的冲突,可以采用离在线资源并池的方案。
考虑到在线业务的潮汐性,物理资源的用量不是一成不变的。使用离在线资源并池,可以根据一定的规则需要自动扩缩容量:
扩容缩容的指标可以根据实际的业务场景来判断,比如 cpu的使用情况,内存的使用情况等。
微服务亲合性部署
微服务自身的通信成本可能较高,一种方案是这样构建微服务:
- 在形态上是微服务架构
- 在通信上是单体架构
亲合性部署,即通过将微服务调用形态与资源调度系统结合,将一些调用关系紧密、通信量大的服务部署在同一个机器上,并且使用 IPC 代替 RPC 的方式,降低网络通信带来的开销。
个人总结
本次课程主要学习了:
- 什么是架构及架构的类别
- 从企业的角度看待架构
- 企业级后端架构面临的挑战及部分解决方案