Dubbo 分布式架构总结

Dubbo 分布式架构总结

1. 什么是 Dubbo?

Dubbo 是一个高性能的分布式服务框架,由阿里巴巴开源。它提供了一种简单而强大的远程服务调用和治理框架,用于构建分布式应用, 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入,软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点, 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

2. Dubbo 的特性

2.1 服务注册与发现

Dubbo 提供了服务注册中心,服务提供者在启动时将自己的服务注册到注册中心,服务消费者通过注册中心获取服务提供者的信息。

2.2 远程调用

Dubbo 支持远程服务调用,通过RPC(Remote Procedure Call)实现服务提供者和服务消费者之间的通信。

2.3 负载均衡

Dubbo内置负载均衡策略

  1. RandomLoadBalance:随机负载均衡,随机的选择一个,默认负载均衡。
  2. RoundRobinLoadBalance:轮询负载均衡。
  3. LeastActiveLoadBalance:最少活跃调用数,相同活跃数的随机。
  4. ConsistentHashLoadBalance:一致性哈希负载均衡,相同参数的请求总是落在同一台机器上。

1)生产端

@Service(version = "2.0.0",loadbalance = "roundrobin")
public class UserServiceImpl implements UserService 

2)消费端

@Reference(version = "*",loadbalance = "random")
private UserService userService;

参数:

  • random:随机负载均衡
  • leastactive:最少活跃调用数,相同活跃数的随机
  • roundrobin:轮询负载均衡
  • consistenthash:一致性哈希负载均衡

2.4 集群容错

Dubbo 支持多种集群容错机制,包括失败自动切换、失败重试、失败快速失败等,提高系统的稳定性和可用性。
容错模式 :

  1. Failover Cluster:失败重试。默认值。当出现失败,重试其它服务器,默认重试2次,使用retries配置。一般用于读操作
  2. Failfast Cluster : 快速失败,只发起一次调用,失败立即报错。通常用于写操作。
  3. Failsafe Cluster : 失败安全,出现异常时,直接忽略。返回一个空结果。日志不重要操作。
  4. Failback Cluster : 失败自动恢复,后台记录失败请求,定时重发。非常重要的操作。
  5. Forking Cluster:并行调用多个服务器,只要有一个成功即返回。
  6. Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错。 同步要求高的可以使用这个模式。
    集群容错配置:
@Service(version = "2.0.0",cluster = "failover")
public class UserServiceImpl implements UserService 

2.5 服务治理

Dubbo 提供了丰富的服务治理功能,包括监控、统计、限流、降级等,帮助开发者更好地管理和维护分布式系统。

服务降级:

服务降级,当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。
两种场景:

  • 当下游的服务因为某种原因响应过慢,下游服务主动停掉一些不太重要的业务,释放出服务器资源,增加响应速度!
  • 当下游的服务因为某种原因不可用,上游主动调用本地的一些降级逻辑,避免卡顿,迅速返回给用户
服务限流:

场景:春运,一项全人类历史上最大规模的迁移活动,抢火车票一直是每年跨年以后的热点话题。服务限流就成为重中之重,常见的限流算法如下
1.漏桶算法
漏桶算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水,当水流入速度过大会直接溢出,可以看出漏桶算法能强行限制数据的传输速率。
2.令牌桶算法
令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。
3.漏桶 vs 令牌桶的区别
漏桶的天然特性决定了它不会发生突发流量,就算每秒1000个请求到来,那么它对后台服务输出的访问速率永远恒定。而令牌桶则不同,其特性可以“预存”一定量的令牌,因此在应对突发流量的时候可以在短时间消耗所有令牌,其突发流量处理效率会比漏桶高,但是导向后台系统的压力也会相应增多。

2.6 扩展机制

Dubbo 的设计非常灵活,支持通过扩展点机制进行功能扩展,可以自定义各种组件,满足不同场景的需求。

3. Dubbo 架构

Dubbo 的架构包括三个关键角色:服务提供者、服务消费者和注册中心。以下是它们之间的交互过程:

服务提供者: 在启动时,将自己提供的服务注册到注册中心,同时监听来自服务消费者的请求。

服务消费者: 从注册中心获取服务提供者的地址列表,选择一个地址进行远程调用。Dubbo 支持服务引用、本地存根和动态代理等特性。

注册中心: 负责服务的注册和发现,维护服务提供者和服务消费者的地址信息。

4. Dubbo 配置

Dubbo 的配置非常灵活,可以通过 XML 或注解的方式进行配置。以下是一个简单的 Dubbo 配置示例:


<dubbo:service interface="com.example.service.UserService" ref="userService" />


<dubbo:reference interface="com.example.service.UserService" id="userService" />

5. Dubbo 生态系统

Dubbo 不仅仅是一个RPC框架,还构建了丰富的生态系统,包括:

5.1 Dubbo Admin

提供可视化的服务治理界面,方便监控和管理 Dubbo 服务。

5.2 Dubbo Monitor

用于收集和展示 Dubbo 服务的性能指标和统计信息,帮助进行性能优化和故障排查。

5.3 Dubbo Telnet

通过 Telnet 命令行方式,对 Dubbo 服务进行动态调整和管理。

6. Dubbo 的使用流程

1.定义服务接口: 定义需要暴露的服务接口,包括接口定义、参数、返回值等。

2.实现服务提供者: 实现服务接口,并通过 Dubbo 注册服务。

3.配置消费者引用: 在服务消费者中配置对服务提供者的引用。

4.调用远程服务: 通过引用的服务接口,调用远程服务。

7. Dubbo 的高级特性

7.1 分布式事务

Dubbo 提供了分布式事务的支持,通过 Dubbo 的分布式事务管理器来实现分布式事务的一致性。

7.2 分布式事件驱动

Dubbo 支持分布式事件驱动,通过异步调用和消息队列实现分布式系统的解耦和扩展。

7.3 分布式缓存

Dubbo 提供了分布式缓存的功能,通过集成缓存中间件,提高服务的响应速度。

8. 总结

Dubbo 是一个功能丰富、灵活可扩展的分布式服务框架。通过强大的服务治理、负载均衡和集群容错机制,Dubbo 构建了一个稳定、高性能的分布式系统。在实际应用中,深入理解 Dubbo 的架构和特性,合理配置参数,能够帮助开发者构建高效可靠的分布式应用。本博客简要介绍了 Dubbo 的基本概念、架构、配置和高级特性,希望能够对使用 Dubbo 的开发者提供帮助。
以上就是全部内容,如果你有任何问题、意见或建议,都欢迎在评论中分享。让我们继续分享知识,共同成长,一起走向更加美好的未来。感谢你们的阅读,祝愿你们在未来的道路上一帆风顺!

你可能感兴趣的:(分布式,架构,dubbo)