Dubbo 是一个高性能的分布式服务框架,由阿里巴巴开源。它提供了一种简单而强大的远程服务调用和治理框架,用于构建分布式应用, 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入,软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点, 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
Dubbo 提供了服务注册中心,服务提供者在启动时将自己的服务注册到注册中心,服务消费者通过注册中心获取服务提供者的信息。
Dubbo 支持远程服务调用,通过RPC(Remote Procedure Call)实现服务提供者和服务消费者之间的通信。
Dubbo内置负载均衡策略
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:一致性哈希负载均衡
Dubbo 支持多种集群容错机制,包括失败自动切换、失败重试、失败快速失败等,提高系统的稳定性和可用性。
容错模式 :
@Service(version = "2.0.0",cluster = "failover")
public class UserServiceImpl implements UserService
Dubbo 提供了丰富的服务治理功能,包括监控、统计、限流、降级等,帮助开发者更好地管理和维护分布式系统。
服务降级,当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。
两种场景:
场景:春运,一项全人类历史上最大规模的迁移活动,抢火车票一直是每年跨年以后的热点话题。服务限流就成为重中之重,常见的限流算法如下
1.漏桶算法
漏桶算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水,当水流入速度过大会直接溢出,可以看出漏桶算法能强行限制数据的传输速率。
2.令牌桶算法
令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。
3.漏桶 vs 令牌桶的区别
漏桶的天然特性决定了它不会发生突发流量,就算每秒1000个请求到来,那么它对后台服务输出的访问速率永远恒定。而令牌桶则不同,其特性可以“预存”一定量的令牌,因此在应对突发流量的时候可以在短时间消耗所有令牌,其突发流量处理效率会比漏桶高,但是导向后台系统的压力也会相应增多。
Dubbo 的设计非常灵活,支持通过扩展点机制进行功能扩展,可以自定义各种组件,满足不同场景的需求。
Dubbo 的架构包括三个关键角色:服务提供者、服务消费者和注册中心。以下是它们之间的交互过程:
服务提供者: 在启动时,将自己提供的服务注册到注册中心,同时监听来自服务消费者的请求。
服务消费者: 从注册中心获取服务提供者的地址列表,选择一个地址进行远程调用。Dubbo 支持服务引用、本地存根和动态代理等特性。
注册中心: 负责服务的注册和发现,维护服务提供者和服务消费者的地址信息。
Dubbo 的配置非常灵活,可以通过 XML 或注解的方式进行配置。以下是一个简单的 Dubbo 配置示例:
<dubbo:service interface="com.example.service.UserService" ref="userService" />
<dubbo:reference interface="com.example.service.UserService" id="userService" />
Dubbo 不仅仅是一个RPC框架,还构建了丰富的生态系统,包括:
提供可视化的服务治理界面,方便监控和管理 Dubbo 服务。
用于收集和展示 Dubbo 服务的性能指标和统计信息,帮助进行性能优化和故障排查。
通过 Telnet 命令行方式,对 Dubbo 服务进行动态调整和管理。
1.定义服务接口: 定义需要暴露的服务接口,包括接口定义、参数、返回值等。
2.实现服务提供者: 实现服务接口,并通过 Dubbo 注册服务。
3.配置消费者引用: 在服务消费者中配置对服务提供者的引用。
4.调用远程服务: 通过引用的服务接口,调用远程服务。
Dubbo 提供了分布式事务的支持,通过 Dubbo 的分布式事务管理器来实现分布式事务的一致性。
Dubbo 支持分布式事件驱动,通过异步调用和消息队列实现分布式系统的解耦和扩展。
Dubbo 提供了分布式缓存的功能,通过集成缓存中间件,提高服务的响应速度。
Dubbo 是一个功能丰富、灵活可扩展的分布式服务框架。通过强大的服务治理、负载均衡和集群容错机制,Dubbo 构建了一个稳定、高性能的分布式系统。在实际应用中,深入理解 Dubbo 的架构和特性,合理配置参数,能够帮助开发者构建高效可靠的分布式应用。本博客简要介绍了 Dubbo 的基本概念、架构、配置和高级特性,希望能够对使用 Dubbo 的开发者提供帮助。
以上就是全部内容,如果你有任何问题、意见或建议,都欢迎在评论中分享。让我们继续分享知识,共同成长,一起走向更加美好的未来。感谢你们的阅读,祝愿你们在未来的道路上一帆风顺!