共计 4086 个字符,预计需要花费 11 分钟才能阅读完成。
前言
Developing distributed systems can be challenging. Complexity is moved from the application layer to the network layer and demands greater interaction between services. Making your code‘cloud-native’means dealing with 12-factor issues such as external configuration, statelessness, logging, and connecting to backing services. The Spring Cloud suite of projects contains many of the services you need to make your applications run in the cloud.
开发分布式系统具备挑战性。复杂性从应用程序层转移到网络层,并要求各个服务之间更亲密的交互。将代码设计为“云原生”意味着要解决 12 因素(12-factor)的问题,例如内部配置、无状态性、日志记录以及与后端服务的连贯。Spring Cloud 我的项目套件中蕴含了许多服务,能够使应用程序在云环境中运行。
架构图
- 多端适配,物联网、手机、电脑设备通过网关拜访服务。
- 网关应用配置核心获取配置,通过服务注册核心发现调用微服务。
- 服务运行时进行分布式追踪。
组件选型
服务发现
通过服务发现组件能够监控服务的部署和存活状况,并实现基于服务编码的负载平衡进行近程调用。以下是一些常见的服务发现工具:
- Netflix Eureka:已进行保护,不再举荐应用。
- HashiCorp Consul:提供了弱小的服务发现和配置管理性能。
- Zookeeper:在从 Eureka 切换过去时老本较低,并且性能绝对简略。举荐
- Nacos:功能完善,提供了用户界面(UI),易于治理和监控。举荐
接口网关
好的,以下是为你补充欠缺的内容:
多端调用和微服务部署可能会导致系统变得复杂。通过 API 网关调用多个服务能够缩小零碎的复杂程度。API 网关可能提供平安拦挡解决、路由信息传递、暗藏服务、负载平衡等性能。
在抉择 API 网关时,有几个罕用的框架可供选择:
- Spring Cloud Gateway:这是一个基于 Spring Cloud 生态系统的 API 网关,它提供了丰盛的性能,如路由、过滤器、负载平衡等。Spring Cloud Gateway 具备良好的扩展性和灵活性。举荐
- Zuul:这是一个晚期的 API 网关框架,由 Netflix 开发。然而,须要留神的是,Zuul 曾经进行保护,不再举荐应用。
除了 Spring Cloud Gateway 和 Zuul 之外,还有其余一些 API 网关框架,如 Kong、Tyk、APISIX 等。
云服务配置
在微服务中,配置嵌入到利用侧有很多限度。例如不能实时更新、更新配置须要重启、版本保护没有、多环境反对。配置核心次要解决的就是这些问题。
- Spring cloud config,分布式部署、反对注册核心、版本控制等。举荐。
- Nacos,提供 UI 可视化界面。也反对分布式部署、反对注册核心、版本控制等。举荐。
熔断
当分布式系统中呈现服务不牢靠的状况时,熔断器能够帮忙解决这个问题。熔断器能够采纳限流、降级、重试等机制来解决服务不牢靠的状况。
- Resilience4J:这是一个轻量级的熔断器框架,它提供了限流、降级和重试等性能。Resilience4J 易于应用和配置。举荐
- Sentinel:这是一个弱小的熔断器和限流框架,它反对多种限流策略,并提供了丰盛的监控和指标性能。举荐
- Hystrix:这是一个经典的熔断器框架,由 Netflix 开发。Hystrix 提供了断路器、降级和缓存等性能。
服务追踪
调试分布式应用的确是一项简单且耗时的工作。当问题呈现时,可能会波及到多个独立的微服务。Sleuth 提供了一系列服务调用追踪的集成计划,使得服务追踪更加可预测和可反复。
须要留神的是,Sleuth 曾经进行对 Spring Boot 3 的反对,而后续的替代者是 Micrometer Tracing。Micrometer Tracing 提供了相似的接口和性能。
- Micrometer Tracing:作为 Sleuth 的后继者,Micrometer Tracing 提供了更弱小和灵便的追踪性能。举荐
- Zipkin:这是一个开源的分布式追踪零碎,它能够收集和可视化服务之间的调用关系。
- Skywalking:这是一个功能丰富的分布式追踪和监控零碎,它提供了全面的监控和剖析性能。举荐
测试集成
想要领有牢靠、值得信赖和稳固的 API,就得须要单元测试。合同式测试是高效团队罕用的一种技术,它通过将 API 的内容形式化并构建相干测试,来帮忙确保代码或者 API 是失常运行性能失常的。须要留神的是,Spring Cloud Contract 曾经进行保护了。在抉择测试框架时,举荐应用 JUnit 5(Spring Boot Test)。JUnit 5 是一个宽泛应用的单元测试框架,与 Spring Boot 集成良好,能够不便地进行测试编写和执行。
- Spring Cloud Contract 进行保护了
- Junit5(Spring boot test)能够编写针对 API 的测试用例,验证 API 的响应后果是否合乎预期。通过模仿申请和响应,能够对 API 进行全面的测试,包含参数验证、响应状态码、数据返回等。举荐
近程调用
在微服务架构中,存在许多独立的单体服务,服务之间的调用频率减少,依赖关系也变得更加简单。为了解决这些问题,咱们须要一个通用的框架来解决服务之间的调用,并解决负载平衡、平安机制、服务降级等一系列问题。
OpenFeign 是一个十分风行和弱小的框架,用于在微服务之间进行调用。它提供了简洁而易于应用的 API,使开发者可能不便地调用其余服务。OpenFeign 反对负载平衡、熔断器、重试机制等性能,以进步零碎的可靠性和容错性。
应用 OpenFeign,你能够通过注解或配置来定义服务接口和调用形式,而后框架将主动解决服务的发现、调用和异样解决。它还反对动静路由和参数传递,能够轻松实现服务之间的通信。
OpenFeign 与其余微服务框架(如 Spring Cloud)集成良好,能够与注册核心(如 Eureka)配合应用,实现服务的主动注册和发现。
- OpenFeign,举荐
接口文档
通过对立的接口文档治理,能够缩小接口模仿、接口测试、接口文档输入等相干工作。
- springdoc-openapi,举荐,反对 springboot3 生态,反对 openapi3
- springfox(前身 swagger-springmvc),不举荐,短少 openapi3 的反对
分布式事务
分布式事务是指在分布式系统中,跨多个节点或多个数据库的操作须要放弃一致性和原子性的一种机制。在传统的单节点事务中,事务在一个数据库上执行,而在分布式事务中,事务可能波及多个数据库或多个服务之间的操作。
分布式事务面临的挑战次要是协调和保持数据的一致性。因为波及多个节点或多个数据库,事务的执行会面临以下问题:
- ACID 属性的放弃:分布式事务须要满足 ACID(原子性、一致性、隔离性、持久性)属性,即要么所有操作都胜利,要么都失败。这须要确保在不同节点或数据库上的操作都能同步进行,并且在呈现故障时可能回滚。
- 并发管制:因为分布式事务可能波及多个并发执行的操作,须要对并发拜访进行管制,以防止数据的不一致性。常见的并发管制办法包含锁机制、多版本并发管制(MVCC)等。
- 故障解决:在分布式环境下,各个节点或数据库可能呈现故障或网络通信中断,这可能导致事务的中断或数据不统一。因而,须要无效的故障解决机制,如故障复原、重试机制等。
为了解决这些问题,有多种分布式事务协调协定被提出,包含两阶段提交(2PC)、三阶段提交(3PC)、Paxos、Raft 等。这些协定通过协调参与者节点的行为,保障了分布式事务的一致性和原子性。此外,还有一些分布式事务的代替计划,如基于音讯队列的最终一致性、弥补事务等。这些计划在肯定水平上升高了分布式事务的复杂性和性能开销,但也带来了一些其余的束缚和问题。
分布式事务是在分布式系统中放弃一致性和原子性的重要机制,须要采纳适合的协调协定和计划来解决数据的一致性和并发管制的问题。
- Seata,举荐,是由阿里中间件团队发动的开源我的项目 Fescar,后更名为 Seata,它是一个是开源的分布式事务框架。以高效并且对业务 0 侵入的形式解决微服 务场景下面临的分布式事务问题,它目前提供 AT 模式 (即 2PC) 及 TCC 模式的分布式事务解决方案。
组件确定
通过 SpringCloudAlibaba、SpringCloud 的组件举荐选型,SpringCloud2023 最终组件选型如下:
- 注册核心(Spring Cloud Zookeeper):负责服务的注册和发现。
- 网关(Spring Cloud Gateway):作为内部申请的入口,实现路由和负载平衡。
- 云服务配置(Spring Cloud Config):用于治理服务的配置信息。
- 熔断(Sentinel):提供熔断器性能,实现服务的限流和降级。
- 服务追踪(Micrometer Tracing):用于追踪和监控服务的性能和调用状况。
- 测试集成(JUnit 5 + Spring Boot Test):用于编写和执行单元测试。
- 近程调用(OpenFeign):用于服务之间的近程调用。
- 接口文档(springdoc-openapi + openapi3):用于生成和治理 API 的文档。
- 分布式事务(Seata):用于解决跨多个服务的事务。
这些组件通过相互协作,构建了一个残缺的微服务架构,实现了服务的注册、发现、配置管理、熔断器、服务追踪、测试集成、近程调用和接口文档生成等性能。每个组件在整个架构中扮演着不同的角色,独特确保了微服务零碎的可靠性、可扩展性和高可用性。
对于作者
来自一线全栈程序员 nine 的八年摸索与实际,继续迭代中。欢送关注“雨林寻北”或增加集体卫星 codetrend(备注技术)。