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项目套件中包含了许多服务,可以使应用程序在云环境中运行。
通过服务发现组件可以监控服务的部署和存活情况,并实现基于服务编码的负载均衡进行远程调用。以下是一些常见的服务发现工具:
多端调用和微服务部署可能会导致系统变得复杂。通过 API 网关调用多个服务可以减少系统的复杂程度。API 网关能够提供安全拦截处理、路由信息传递、隐藏服务、负载均衡等功能。
在选择 API 网关时,有几个常用的框架可供选择:
除了 Spring Cloud Gateway 和 Zuul 之外,还有其他一些 API 网关框架,如 Kong、Tyk、APISIX 等。
在微服务中,配置嵌入到应用侧有很多限制。例如不能实时更新、更新配置需要重启、版本维护没有、多环境支持。配置中心主要解决的就是这些问题。
当分布式系统中出现服务不可靠的情况时,熔断器可以帮助解决这个问题。熔断器可以采用限流、降级、重试等机制来处理服务不可靠的情况。
调试分布式应用确实是一项复杂且耗时的任务。当问题出现时,可能会涉及到多个独立的微服务。Sleuth 提供了一系列服务调用追踪的集成方案,使得服务追踪更加可预测和可重复。
需要注意的是,Sleuth 已经停止对 Spring Boot 3 的支持,而后续的替代者是 Micrometer Tracing。Micrometer Tracing 提供了类似的接口和功能。
想要拥有可靠、值得信赖和稳定的 API,就得需要单元测试。合同式测试是高效团队常用的一种技术,它通过将 API 的内容形式化并构建相关测试,来帮助确保代码或者 API 是正常运行功能正常的。需要注意的是,Spring Cloud Contract 已经停止维护了。在选择测试框架时,推荐使用 JUnit 5(Spring Boot Test)。JUnit 5 是一个广泛使用的单元测试框架,与 Spring Boot 集成良好,可以方便地进行测试编写和执行。
在微服务架构中,存在许多独立的单体服务,服务之间的调用频率增加,依赖关系也变得更加复杂。为了解决这些问题,我们需要一个通用的框架来处理服务之间的调用,并解决负载均衡、安全机制、服务降级等一系列问题。
OpenFeign 是一个非常流行和强大的框架,用于在微服务之间进行调用。它提供了简洁而易于使用的 API,使开发者能够方便地调用其他服务。OpenFeign 支持负载均衡、熔断器、重试机制等功能,以提高系统的可靠性和容错性。
使用 OpenFeign,你可以通过注解或配置来定义服务接口和调用方式,然后框架将自动处理服务的发现、调用和异常处理。它还支持动态路由和参数传递,可以轻松实现服务之间的通信。
OpenFeign 与其他微服务框架(如 Spring Cloud)集成良好,可以与注册中心(如 Eureka)配合使用,实现服务的自动注册和发现。
通过统一的接口文档管理,可以减少接口模拟、接口测试、接口文档输出等相关工作。
分布式事务是指在分布式系统中,跨多个节点或多个数据库的操作需要保持一致性和原子性的一种机制。在传统的单节点事务中,事务在一个数据库上执行,而在分布式事务中,事务可能涉及多个数据库或多个服务之间的操作。
分布式事务面临的挑战主要是协调和保持数据的一致性。由于涉及多个节点或多个数据库,事务的执行会面临以下问题:
为了解决这些问题,有多种分布式事务协调协议被提出,包括两阶段提交(2PC)、三阶段提交(3PC)、Paxos、Raft等。这些协议通过协调参与者节点的行为,保证了分布式事务的一致性和原子性。此外,还有一些分布式事务的替代方案,如基于消息队列的最终一致性、补偿事务等。这些方案在一定程度上降低了分布式事务的复杂性和性能开销,但也带来了一些其他的约束和问题。
分布式事务是在分布式系统中保持一致性和原子性的重要机制,需要采用合适的协调协议和方案来解决数据的一致性和并发控制的问题。
通过SpringCloudAlibaba、SpringCloud的组件推荐选型,SpringCloud2023最终组件选型如下:
这些组件通过相互协作,构建了一个完整的微服务架构,实现了服务的注册、发现、配置管理、熔断器、服务追踪、测试集成、远程调用和接口文档生成等功能。每个组件在整个架构中扮演着不同的角色,共同确保了微服务系统的可靠性、可扩展性和高可用性。
来自一线全栈程序员nine的八年探索与实践,持续迭代中。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。