引言
架构一个系统在其所处环境中所具备的各种基本概念和属性,具体体现为其所包含的各个元素、他们之间的关系以及架构的设计和演进原则之中。
什么是架构
架构,又称软件架构,
- 是有关软件整体结构与组件的抽象描述
- 用于指导软件系统各个方面的设计
将系统架构定义为:
-
架构是系统组织结构 + 组件及联系(组件间以及组件和环境之间) + 原则的组合。通过图形化的形式表述该架构定义如下图所示,这是一个非常简洁、概念清晰的定义,其言简意赅的表达了架构的几个核心要素:
-
系统的组织:表达系统的宏观结构
-
组件及联系:组件化的思维,同时突出了环境要素。组件表达了系统的模块化,组件相互之间及组件与环境之间的关联表达元素间的相互作用。
-
原则:用于指导设计和系统演进的原则
-
单机
软件系统需要具备对外提供服务,单机,就是把所有功能都实现在一个进程里,并部署在一台机器上。
- 优点:
- 简单
- 缺点:
- C10K problem
- 运维需要停服
单体、垂直应用|垂直切分
单体架构:分布式部部署
垂直应用架构:按应用垂直切分
- 优点:
- 水平扩容
- 运维不需要停服
- 缺点:
- 职责太多,开发效率不高
- 爆炸半径大
SOA、微服务|水平切分
SOA(
Service-OrientedArchitecture)
1.将应用的不同功能单元抽象为服务
2.定义服务之间的通信标准
微服务架构: SOA 的去中心化演进方向
企业级后端架构剖析
1.云计算
云计算:是指通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模熟悉分析和存储的基石。
虚拟化技术 是一种将物理资源转化为虚拟形式的技术。通过虚拟化,我们可以将一台物理服务器划分为多个虚拟服务器,每个虚拟服务器可以独立运行不同的操作系统和应用程序,从而更好地利用硬件资源。
编排方案 是指将不同的组件和服务进行组合和配置,以实现特定的业务需求。编排方案可以确保各个组件的协调工作,并提供具体的部署和管理指令。
在云计算架构中,有几个常见的服务模式:
- IaaS(基础设施即服务) 是云计算的基本层级,它提供了虚拟化的服务器、存储和网络资源给用户。用户可以根据自己的需要创建和管理虚拟机、存储空间和网络设置,而不需要关心底层的硬件细节。
- PaaS(平台即服务) 是在IaaS基础上提供的更高层级的服务。PaaS提供了开发、测试和部署应用程序所需的基础设施和工具,例如开发语言、数据库和中间件。用户可以使用PaaS来简化应用程序开发和部署的过程,而无需关注底层的操作系统和硬件。
- SaaS(软件即服务) 是一种通过互联网提供软件应用程序的模式。在SaaS模式下,用户通过订阅的方式使用云端的软件服务,而不需要购买和安装软件本身。SaaS可以帮助用户快速获取和使用各种软件,无需担心软件的安装和更新。
- FaaS(函数即服务) 是一种以事件驱动的方式执行代码逻辑的服务。在FaaS中,开发者可以将特定的函数上传到云端,并在特定的事件触发时执行这些函数。FaaS可以帮助实现敏捷的开发和部署,使开发者能够将精力集中在编写核心业务逻辑上,而不需要关注底层的基础设施和资源管理。
2.云原生
云原生技术为组织(公司)在公有公、自由云、混动云等新型的动态环境中,构建和运行可弹性拓展的应用提供了可能。
1)弹性计算资源
弹性计算资源类型:
-
服务资源调度:这是指根据不同的需求对服务进行调度和管理的方式。
- 微服务:这是一种将应用程序拆分为小而独立的服务单元的架构方式。每个微服务都可以独立开发、部署和扩展,从而实现更灵活和高效的服务管理。
- 大服务:这是指传统的单体应用程序,它将所有功能都集中在一起。大服务可能更适合简单的应用,不需要过多的拆分和扩展。
-
计算资源调度:这是指根据工作负载的性质和特点来调度和管理计算资源的方式。
- 在线计算:这是一种实时处理请求的方式,适用于需要快速响应和即时处理的任务。在线计算通常对延迟非常敏感,需要高性能和低延迟的计算资源。
- 离线计算:这是一种对批量数据进行处理的方式,适用于大规模数据分析和处理。离线计算通常不需要实时响应,但需要处理大量的数据,因此需要高吞吐量和大容量的计算资源。
-
消息队列:这是一种用于在不同的组件和服务之间传递消息的方式。
- 在线消息队列:它用于在实时处理中缓冲和平衡负载,可以削平峰值的请求流量,并解耦不同的服务。通过在线消息队列,可以实现更高的可伸缩性和可靠性。
- 离线消息队列:它用于大数据分析和处理任务,通过将数据进行缓冲和排序,以实现更高效的数据处理。离线消息队列可以处理大规模的数据,在数据处理中起到关键的作用。
2)弹性存储资源
弹性存储资源类型:
-
经典存储:
- 对象存储:这是一种将数据以对象的形式存储的方式。对象存储适用于存储大量的非结构化数据,例如图片、视频和文档等。它提供了高可靠性和可扩展性,并且可以通过简单的API进行访问和管理。
- 大数据存储:这是一种专门用于存储和处理大规模数据的存储方式。大数据存储通常具有高吞吐量和高容量的特点,可以支持大规模数据的存储和分析。
-
关系型数据库:这是一种以表格形式组织数据的存储方式。关系型数据库适用于结构化数据的存储和管理,例如用户信息、订单和交易记录等。它提供了强大的数据一致性和查询功能,可以支持复杂的数据操作和分析。
-
元数据存储:这是一种用于存储和管理数据描述信息的存储方式。元数据存储通常用于记录数据的属性、结构和关系等信息,以便于数据的管理和查询。它可以帮助用户更好地理解和利用存储的数据。
-
NoSQL存储:
- 键值存储:这是一种将数据以键值对的形式存储的方式。键值存储适用于存储简单的数据结构,例如缓存数据和用户会话信息等。它提供了高性能和低延迟的数据访问,并且可以支持快速的数据插入和查询操作。
总结:将存储资源当成服务一样!
3)DevOps
DevOps是云原生时代软件交付的利器,贯穿整个软件开发周期
结合自动化流程,提高软件开发、交付效率。
4)微服务架构
通信标准是指在不同系统或服务之间进行通信和交流时所采用的规范和协议。
-
HTTP(RESTful API):这是一种用于互联网通信的标准协议。HTTP通过发送请求和接收响应的方式来进行通信,它广泛用于Web应用程序的开发和数据传输。RESTful API是一种基于HTTP的设计风格,通过使用不同的HTTP方法(如GET、POST、PUT、DELETE)来实现对资源的操作和访问。
-
RPC(Thrift,gRPC):RPC是一种远程过程调用的通信模式,它可以使不同的系统或服务之间像调用本地函数一样进行通信。Thrift和gRPC是两种常见的RPC框架,它们提供了用于定义服务接口和进行远程调用的工具和协议。
在微服务架构中,RPC vs HTTP:
-
性能:RPC通常比HTTP具有更高的性能,因为它采用更紧凑和高效的二进制协议,并且支持更高级的序列化和反序列化技术。这使得RPC在处理大量请求和高并发场景下更有效率。
-
服务治理:RPC具有更丰富和灵活的服务治理功能。它支持更细粒度的服务注册、发现和配置管理,可以实现更精细的负载均衡、故障转移和服务监控。相比之下,HTTP在服务治理方面的支持相对较弱。
-
协议可解释性:HTTP采用了通用的文本格式和标准的状态码,使得它的协议内容更易于理解和调试。相比之下,RPC使用定制的二进制协议,协议内容相对较难理解和分析。
综上所述,RPC通常在性能要求高、服务治理要求复杂的场景下更为适用,而HTTP在协议可解释性和简化开发调试方面更有优势。
云原生场景下,微服务大可不必在业务逻辑中实现符合通信标准的交互逻辑,而是交给框架来做
5)网络服务
服务网格(Service Mesh) 是一种在微服务架构中用于帮助微服务之间通信的中间层技术。
服务网格使用高性能的网络代理来管理和控制微服务之间的通信。这些网络代理部署在每个微服务之间,它们负责处理请求的转发、负载均衡和安全控制等任务。通过使用服务网格,开发人员可以将这些通信任务从业务代码中解耦出来,使得业务代码更专注于实现具体的业务逻辑,而不需要关心网络通信的细节。
相比于传统的RPC/HTTP框架,服务网格有几个优势:
- 异构系统治理统一化:服务网格提供了一致的管理和治理机制,使得不同微服务使用不同技术栈或编程语言的情况下也可以统一管理和控制。这使得开发团队可以更轻松地管理和维护大规模复杂的微服务架构。
- 与业务进程解耦,生命周期易管理:通过服务网格,通信任务独立于业务进程运行,可以独立部署和扩展。这意味着开发人员可以更方便地管理和扩展网络代理,并且可以根据需求对不同的微服务进行独立的升级、回滚或重启,而不会影响整个系统的运行。
服务网格提供了一种统一且灵活的方式来管理和控制微服务之间的通信。它减少了业务代码与网络通信的耦合,使得微服务架构更易于扩展、管理和维护。
企业级后端架构的挑战
企业级后端架构的挑战:
- 基础设施层面
- 物理资源是有限的
- 机器
- 带宽
- 资源利用率受制于部署服务
- 物理资源是有限的
- 用户层面
- 网络通信开销较大
- 网络抖动导致运维成本提高
- 异构环境下,不同实例资源水位不均
1)离在线资源并池
核心收益:
- 降低物理资源成本
- 提供更多的弹性资源,增加收入
解决思路:离在线资源并池 - 在线业务的特点
- I0 密集型为主
- 潮汐性、实时性
- 离线业务的特点
- 计算密集型占多数
- 非实时性
2)自动缩扩容
核心收益:
- 降低核心成本
解决思路:
- 自动缩扩容:利用在线业务潮汐性自动缩扩容。
3)微服务亲和性部署
核心收益;
- 降低业务成本
- 提高服务可用性
解决思路:微服务亲和性部署
- 将满足亲和性条件的容器调度到一台宿主机
- 微服务中间件与服务网格通过共享内存通信
- 服务网格控制面实施灵活、动态的流量调度
4)流量治理
核心收益:
- 提高微服务调用容错性
- 容灾
- 进一步提高开发效率,DevOps发挥到极致
解决思路:基于微服务中间件与服务网格的流量治理
- 熔断、重试
- 单元化
- 复杂环境(功能、预览)的流量调度
5)CPU 水位负载均衡
核心收益:
- 打平异构环境算力差异
- 为自动扩缩容提供正向输入
解决思路:CPU 水位负载均衡
- IaaS
- 提供资源探针
- 服务网格
- 动态负载均衡