分布式架构方案最全详解(9大主流架构方案)

分布式架构方案最全详解(9大主流架构方案)

分布式解决方案是大型企业为了应对大规模、高并发的技术架构,是非常关键的技术,下面我就全面来详解分布式@mikechen

分布式架构

分布式架构:它通过将系统分解成多个独立的组件、或服务,并部署在不同的节点上协同工作,从而提高系统的扩展性、容错性、和灵活性。

分布式架构方案最全详解(9大主流架构方案)

主要特点:

  • 分布式:分布式的场景,系统中的节点、或者服务器…等,是分布网络多个节点;
  • 可扩展性:通过增加节点,来提升系统处理能力;
  • 垂直扩展:通过增强单个节点的资源,来提升性能;
  • 高可用性:通过多副本、集群、和负载均衡..来实现高可用性;
  • 独立性:不同服务可以使用不同的编程语言、框架、和数据库,各个服务可以独立开发、测试和部署。

常见的分布式架构,会涉及到:微服务、负载均衡、分布式存储、分布式事务…等等技术场景和架构@mikechen

 

微服务架构

微服务架构,具有以下六大特点:

分布式架构方案最全详解(9大主流架构方案)

1. 小服务

微服务架构,将大型单体应用拆分为多个小型服务,每个服务专注于一个特定的业务功能或领域。

这种拆分使得每个服务的代码库、和部署单元都相对较小,易于理解、和维护。

2. 独立进程

每个微服务,运行在独立的进程中,可以独立部署和扩展。

这种独立性使得一个服务的失败、或异常不会影响其他服务的正常运行,增强了系统的稳定性、和可靠性。

3. 轻量级通信

微服务之间,通过轻量级的通信机制进行交互,常见的通信方式,包括:基于HTTP的RESTful API、或者基于RPC的通信协议(如gRPC)..等。

这种通信方式简化了服务间的耦合度,支持异步通信、和松耦合。

4. 基于业务模型

每个微服务,被设计为围绕特定的业务领域或业务功能构建。

这种设计理念,使得每个服务能够更好地反映业务的现实世界,并通过限界上下文划分清晰的边界。

5. 独立部署

每个微服务,可以独立进行开发、测试、和部署。

这种独立部署,性质使得团队可以快速迭代、和发布新功能,降低了发布新版本的风险和成本。

6. 无集中管理

微服务架构推崇去中心化的治理模式,服务团队有更大的自主权和责任,能够选择适合自己服务的技术栈和开发流程。

优点:

  • 高可维护性:小的服务易于理解和修改;
  • 高可扩展性:可以独立扩展服务以满足特定功能的需求;
  • 高容错性:单个服务的失败不会导致整个系统崩溃。

缺点:

  • 复杂性增加:服务间通信、数据一致性、和分布式事务处理变得复杂。
  • 运维挑战:需要完善的服务发现、监控、和日志管理机制。

适用场景:

  • 大型复杂应用,需要频繁迭代、和部署。
  • 多团队协作开发,服务之间职责分明。

 

SpringCloud

SpringCloud:是微服务架构的经典实现,在国内使用非常多。

Spring Cloud ,可以用于快速构建分布式系统中的常见模式,比如:服务发现、服务治理、负载均衡、断路器、配置管理…等。

如下图所示:

分布式架构方案最全详解(9大主流架构方案)

1.服务发现

通过服务发现,微服务可以动态地注册自己的实例,并发现其他服务的实例,从而实现服务之间的解耦、和动态调用。

Spring Cloud 提供了集成服务注册、与发现的解决方案,比如:使用 Eureka 、或者 Zookeeper 等作为服务注册中心。

2. 服务治理

Spring Cloud 提供了通过注册中心管理服务的能力,包括:监控、管理、统计和安全控制…等功能。

3. 断路器

断路器模式在微服务架构中非常重要,用于防止由于服务故障导致的级联故障。

Spring Cloud 集成了 Hystrix 等断路器库,可以帮助开发者实现服务的容错机制,自动地断开不可用服务的调用,快速恢复可用状态。

4. API 网关

网关实现路由、过滤、安全性、监控…等功能,简化了微服务架构中的外部访问控制。

Spring Cloud 提供了 :Zuul 等 API 网关组件,用于统一管理和转发微服务的 API 请求。

5. 分布式追踪

链路追踪:是在分布式系统中提升可观测性、和排障效率的重要工具,特别在微服务架构中更显其重要性。

通过集成 Zipkin、Spring Cloud Sleuth …等组件,Spring Cloud 支持分布式系统的请求链路追踪。

 

SpringCloudAlibaba

Spring Cloud Alibaba,通过集成阿里巴巴的优秀开源组件、和云服务,为开发者提供了一套完善的微服务架构、解决方案。

如下图所示:

分布式架构方案最全详解(9大主流架构方案)

1.Nacos

Nacos 是一个动态服务发现、配置管理和服务管理平台,作为 Spring Cloud Alibaba 的核心组件之一。

提供了服务注册与发现、配置中心、动态 DNS 服务…等功能。

开发者可以使用 Nacos 实现服务的注册、发现/和动态配置管理。

2.Sentinel

Sentinel 是阿里巴巴开源的一款流量控制、和熔断降级工具,用于保护微服务应用在高并发场景下的稳定性。

在 Spring Cloud Alibaba 中集成 Sentinel,可以实现对服务调用的流量控制、熔断降级、系统负载保护…等功能。

3.Dubbo

Dubbo 是阿里巴巴开源的高性能 Java RPC 框架,用于实现服务之间的远程调用、和通信。

4.RocketMQ

RocketMQ 是阿里巴巴开源的分布式消息中间件,支持高并发、低延迟的消息发布和订阅。

Spring Cloud Alibaba 集成了 RocketMQ,提供了便捷的消息驱动能力,可以用于实现异步通信、事件驱动…等场景。

RocketMQ,是一个分布式消息中间件,提供了高可靠性、高吞吐量的消息传递服务。

 

ServiceMesh

Service Mesh(服务网格),是一种新兴的微服务架构模式。

Service Mesh可以形象地理解为,一个由许多微小的服务(Service)、和它们之间复杂的交互和连接(Mesh)构成的网络。

如下图所示:

分布式架构方案最全详解(9大主流架构方案)

Service(服务)

微服务架构中的每个独立的服务单元,每个服务负责执行特定的业务功能或服务。

Mesh(网格)

在Service Mesh中,每个服务都有一个专门的代理(通常称为sidecar)。

如下图所示:

分布式架构方案最全详解(9大主流架构方案)

Sidecar”(侧车),这个术语源自摩托车的侧边车,它附加在主要载体旁边,用于提供额外的功能、或服务。

Sidecar 是一个重要的概念,特别是在 Service Mesh(服务网格)模式中被广泛采用。

在 Service Mesh 中,每个微服务都有一个专门的 Sidecar 代理与之配对。

这个 Sidecar 代理负责管理服务间的通信,实现:流量控制、熔断降级、服务发现、负载均衡等……功能。

优点:

  • 提高了微服务间通信的可靠性和安全性。
  • 简化了微服务架构的运维和管理。
  • 提供了丰富的可观测性和控制能力。

缺点:

  • 引入了额外的复杂性和资源开销。
  • 学习曲线较陡,需要掌握新的工具和概念。

 

分布式数据存储

分布式数据存储是一种数据存储架构,数据分布在多个物理位置、或服务器上。

如下图所示:

分布式架构方案最全详解(9大主流架构方案)

提供数据分片、复制和一致性保证的机制,具体如下:

1.数据分片

将数据集拆分成更小的片段,每个片段存储在不同的节点上,这样可以平衡负载并提高系统的性能、和容量。

2.数据复制

在多个节点上存储数据的副本,以提高数据的可用性、和可靠性。

即使某个节点发生故障,其他节点上的副本仍然可用。

3.一致性模型

数据副本可能会暂时不同步,但最终会达到一致状态。

优点:

  • 提高了数据存储的可扩展性和容错性。
  • 可以处理大规模数据和高并发请求。

缺点:

  • 数据一致性管理复杂。
  • 分布式事务处理难度较大。

 

分布式缓存

将热点数据缓存在多个节点上,提高数据访问速度,常见的分布式缓存系统有:Redis、Memcached等。

优点:

  • 显著提高数据访问性能,降低数据库负载。
  • 提供数据分片和复制机制,确保缓存的高可用性。

缺点:

  • 数据一致性问题需要特别处理。
  • 缓存过期和失效策略管理复杂。

适用场景:

  • 读多写少的应用,如内容管理系统、社交媒体平台。
  • 需要快速响应的实时数据应用。

 

分布式事务

分布式事务是在分布式系统中,跨多个独立的数据存储、或服务节点执行的事务操作。

如下图所示:

分布式架构方案最全详解(9大主流架构方案)

分布式事务,需要保证所有涉及的操作要么全部成功,要么全部失败。

常见的解决方案,有两阶段提交(2PC)、三阶段提交(3PC)等。

两阶段提交(2PC)

  • 协调者向所有参与者发送准备请求,各参与者执行事务操作并锁定资源,但不提交,返回准备好的状态;
  • 如果所有参与者都准备好了,协调者发送提交请求,各参与者提交事务;
  • 如果有任何一个参与者准备失败,协调者发送回滚请求,各参与者回滚事务。

三阶段提交(3PC)

是2PC的改进,增加了一个“预提交”阶段,进一步减少协调者崩溃导致不一致的风险。

补偿机制

如果某个本地事务失败,触发补偿操作以回滚之前的操作,保证数据一致性。

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    暂无讨论,说说你的看法吧