分布式解决方案是大型企业为了应对大规模、高并发的技术架构,是非常关键的技术,下面我就全面来详解分布式@mikechen
分布式架构
分布式架构:它通过将系统分解成多个独立的组件、或服务,并部署在不同的节点上协同工作,从而提高系统的扩展性、容错性、和灵活性。
主要特点:
- 分布式:分布式的场景,系统中的节点、或者服务器…等,是分布网络多个节点;
- 可扩展性:通过增加节点,来提升系统处理能力;
- 垂直扩展:通过增强单个节点的资源,来提升性能;
- 高可用性:通过多副本、集群、和负载均衡..来实现高可用性;
- 独立性:不同服务可以使用不同的编程语言、框架、和数据库,各个服务可以独立开发、测试和部署。
常见的分布式架构,会涉及到:微服务、负载均衡、分布式存储、分布式事务…等等技术场景和架构@mikechen
微服务架构
微服务架构,具有以下六大特点:
1. 小服务
微服务架构,将大型单体应用拆分为多个小型服务,每个服务专注于一个特定的业务功能或领域。
这种拆分使得每个服务的代码库、和部署单元都相对较小,易于理解、和维护。
2. 独立进程
每个微服务,运行在独立的进程中,可以独立部署和扩展。
这种独立性使得一个服务的失败、或异常不会影响其他服务的正常运行,增强了系统的稳定性、和可靠性。
3. 轻量级通信
微服务之间,通过轻量级的通信机制进行交互,常见的通信方式,包括:基于HTTP的RESTful API、或者基于RPC的通信协议(如gRPC)..等。
这种通信方式简化了服务间的耦合度,支持异步通信、和松耦合。
4. 基于业务模型
每个微服务,被设计为围绕特定的业务领域或业务功能构建。
这种设计理念,使得每个服务能够更好地反映业务的现实世界,并通过限界上下文划分清晰的边界。
5. 独立部署
每个微服务,可以独立进行开发、测试、和部署。
这种独立部署,性质使得团队可以快速迭代、和发布新功能,降低了发布新版本的风险和成本。
6. 无集中管理
微服务架构推崇去中心化的治理模式,服务团队有更大的自主权和责任,能够选择适合自己服务的技术栈和开发流程。
优点:
- 高可维护性:小的服务易于理解和修改;
- 高可扩展性:可以独立扩展服务以满足特定功能的需求;
- 高容错性:单个服务的失败不会导致整个系统崩溃。
缺点:
- 复杂性增加:服务间通信、数据一致性、和分布式事务处理变得复杂。
- 运维挑战:需要完善的服务发现、监控、和日志管理机制。
适用场景:
- 大型复杂应用,需要频繁迭代、和部署。
- 多团队协作开发,服务之间职责分明。
SpringCloud
SpringCloud:是微服务架构的经典实现,在国内使用非常多。
Spring Cloud ,可以用于快速构建分布式系统中的常见模式,比如:服务发现、服务治理、负载均衡、断路器、配置管理…等。
如下图所示:
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,通过集成阿里巴巴的优秀开源组件、和云服务,为开发者提供了一套完善的微服务架构、解决方案。
如下图所示:
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)构成的网络。
如下图所示:
Service(服务)
微服务架构中的每个独立的服务单元,每个服务负责执行特定的业务功能或服务。
Mesh(网格)
在Service Mesh中,每个服务都有一个专门的代理(通常称为sidecar)。
如下图所示:
Sidecar”(侧车),这个术语源自摩托车的侧边车,它附加在主要载体旁边,用于提供额外的功能、或服务。
Sidecar 是一个重要的概念,特别是在 Service Mesh(服务网格)模式中被广泛采用。
在 Service Mesh 中,每个微服务都有一个专门的 Sidecar 代理与之配对。
这个 Sidecar 代理负责管理服务间的通信,实现:流量控制、熔断降级、服务发现、负载均衡等……功能。
优点:
- 提高了微服务间通信的可靠性和安全性。
- 简化了微服务架构的运维和管理。
- 提供了丰富的可观测性和控制能力。
缺点:
- 引入了额外的复杂性和资源开销。
- 学习曲线较陡,需要掌握新的工具和概念。
分布式数据存储
分布式数据存储是一种数据存储架构,数据分布在多个物理位置、或服务器上。
如下图所示:
提供数据分片、复制和一致性保证的机制,具体如下:
1.数据分片
将数据集拆分成更小的片段,每个片段存储在不同的节点上,这样可以平衡负载并提高系统的性能、和容量。
2.数据复制
在多个节点上存储数据的副本,以提高数据的可用性、和可靠性。
即使某个节点发生故障,其他节点上的副本仍然可用。
3.一致性模型
数据副本可能会暂时不同步,但最终会达到一致状态。
优点:
- 提高了数据存储的可扩展性和容错性。
- 可以处理大规模数据和高并发请求。
缺点:
- 数据一致性管理复杂。
- 分布式事务处理难度较大。
分布式缓存
将热点数据缓存在多个节点上,提高数据访问速度,常见的分布式缓存系统有:Redis、Memcached等。
优点:
- 显著提高数据访问性能,降低数据库负载。
- 提供数据分片和复制机制,确保缓存的高可用性。
缺点:
- 数据一致性问题需要特别处理。
- 缓存过期和失效策略管理复杂。
适用场景:
- 读多写少的应用,如内容管理系统、社交媒体平台。
- 需要快速响应的实时数据应用。
分布式事务
分布式事务是在分布式系统中,跨多个独立的数据存储、或服务节点执行的事务操作。
如下图所示:
分布式事务,需要保证所有涉及的操作要么全部成功,要么全部失败。
常见的解决方案,有两阶段提交(2PC)、三阶段提交(3PC)等。
两阶段提交(2PC)
- 协调者向所有参与者发送准备请求,各参与者执行事务操作并锁定资源,但不提交,返回准备好的状态;
- 如果所有参与者都准备好了,协调者发送提交请求,各参与者提交事务;
- 如果有任何一个参与者准备失败,协调者发送回滚请求,各参与者回滚事务。
三阶段提交(3PC)
是2PC的改进,增加了一个“预提交”阶段,进一步减少协调者崩溃导致不一致的风险。
补偿机制
如果某个本地事务失败,触发补偿操作以回滚之前的操作,保证数据一致性。
作者简介
陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注作者「mikechen」公众号,获取更多技术干货!
后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》