架构是指软件系统的整体结构和组件之间的抽象描述,用于指导软件系统各个方面的设计。
单机架构: 单机架构是将软件系统的所有功能实现在一个进程内,并将其部署在一台机器上的方式。它的优点是简单,但在高负载或需要水平扩展时可能存在限制。
单体架构: 单体架构是将整个应用作为一个单一的单元构建和部署,但可以在分布式环境中运行。它可以垂直划分为多个垂直应用单元,以实现水平扩展,减少运维停机时间等优点。
SOA(Service Oriented Architecture)和微服务架构: SOA将应用的不同功能单元抽象为服务,并定义服务间的通信标准,以实现松耦合的系统。微服务架构是SOA的演进,强调更小的、独立的服务单元,通过水平切分实现更好的弹性、可维护性和扩展性。
云计算: 云计算是通过软件自动化管理,提供计算资源的服务网络。它涵盖了虚拟化技术、计算资源编排方案(如虚拟机编排和容器编排)、不同层次的服务模型(IaaS、PaaS、SaaS、FaaS)等。
云原生: 云原生是一种构建和运行可弹性扩展应用的方法,适用于公有云、私有云和混合云等环境。它包括弹性计算资源(微服务、计算资源调度、消息队列)、弹性存储资源(对象存储、关系型数据库、NoSQL)、DevOps实践、微服务架构、服务网格等概念。
弹性计算资源: 弹性计算资源包括服务资源调度(微服务、大服务)、计算资源调度(在线和离线任务)、消息队列(用于在线和离线场景,如削峰、解耦、大数据分析)。
弹性存储资源: 弹性存储资源涵盖了对象存储、大数据存储、关系型数据库、元数据等,将存储资源作为服务进行管理。
DevOps: DevOps是云原生时代的软件交付方法,通过自动化流程来提高软件开发和交付效率,贯穿整个软件开发周期。
微服务架构: 微服务架构中的通信标准包括HTTP(RESTful API)和RPC(如Thrift和gRPC)。微服务中间件可以实现性能优化、服务治理和协议可解释性,减轻业务逻辑的通信负担。
微服务架构下,服务之间的通讯标准是基于协议的。
- HTTP - H1/H2
- RPC - Apache Thrift/gRPC
HTTP 和 RPC 的对比
- 性能 - RPC 协议往往具备较好的压缩率,性能较高。如 Thrift, Protocol Buffers
- 服务治理 - RPC 中间件往往集成了丰富的服务治理能力。如 熔断、降级、超时等
- 可解释性 - HTTP 通信的协议往往首选 JSON,可解释性、可调试性更好
服务网格: 服务网格是微服务架构的一层中间层,用于管理微服务之间的通信,包括高性能网格代理,业务代码与治理的解耦,以及异构系统治理统一化等特点。
- 微服务之间通讯的中间层
- 一个高性能的 4 层网络代理
- 将流量层面的逻辑与业务进程解耦