Dubbo特性结果缓存、并发与连接控制


对于热点数据,或者对于一些长期不会变化的数据来说,减少数据库访问查询,对查询结果进行缓存处理。

一、结果缓存

结果缓存 ,用于加速热门数据的访问速度,Dubbo 提供声明式缓存,以减少用户加缓存的工作量 。

dubbo缓存是在本地缓存,在分布式服务中,会缓存多份,在每个服务中缓存。
redis缓存是分布式缓存,所有服务共用一份缓存。

缓存类型
  • lru 算法基于最少使用原则删除多余缓存,保持最热的数据被缓存。
  • thradlocal:当前线程缓存, 比如一个页面渲染,用到很多protal, 每个protal都要去查用户信息,通过线程缓存,可以减少这种多余访问。
  • jcache 与JSR107 集成, 可以桥接各种缓存实现。(用的少)。
配置
<dubbo:reference interface="com.foo.BarService" cache="lru" />

或:

<dubbo:reference interface="com.foo.BarService">
    <dubbo:method name="findBar" cache="lru" />
</dubbo:reference>

注解配置

   @Reference(interfaceClass = CinemaServiceAPI.class,cache = "lru")

dubbo可以对连接和并发属性进行控制。
超出部门以错误形式返回。

二、 连接控制

多个消费者访问服务提供者,就会创建多个连接(dubbo长连接)。创建连接数过多会造成服务端资源压力多大。所以需要进行连接访问控制。

服务端连接控制

限制服务端接受的连接不能超过10个。

<dubbo:provider protocol="dubbo" accepts="10" />

<dubbo:protocol name="dubbo" accepts="10" />
客户端连接控制

限制客户端服务使用连接不能超过10个。如果是长连接,比如dubbo协议,connections表示该服务对每个提供者建立的长连接数。

 <dubbo:reference interface="com.foo.BarService" connections="10" />

<dubbo:service interface="com.foo.BarService" connections="10" />

三、 并发控制

配置样例
样例1

限制com.foo.BarService的每个方法,服务器端并发执行(或占用线程池线程数)不能超过10个:

<dubbo:service interface="com.foo.BarService" executes="10" />
样例2

限制com.foo.BarServicesayHello方法,服务器端并发执行(或占用线程池线程数)不能超过10个。

<dubbo:service interface="com.foo.BarService">
    <dubbo:method name="sayHello" executes="10" />
</dubbo:service>
样例3

限制 com.foo.BarService 的每个方法,每个客户端并发执行(或占用连接的请求数)不能超过 10 个:

<dubbo:service interface="com.foo.BarService" actives="10" />

<dubbo:reference interface="com.foo.BarService" actives="10" />
样例 4

限制 com.foo.BarServicesayHello 方法,每客户端并发执行(或占用连接的请求数)不能超过 10 个:

<dubbo:service interface="com.foo.BarService">
    <dubbo:method name="sayHello" actives="10" />
</dubbo:service>

<dubbo:reference interface="com.foo.BarService">
    <dubbo:method name="sayHello" actives="10" />
</dubbo:service>
load Balance 均衡

配置服务的客户端的 loadbalance 属性为 leastactive,此Loadbalance会调用并发数最小的Provider(consumer端并发数)。

<dubbo:reference interface="com.foo.BarService" loadbalance="leastactive" />

<dubbo:service interface="com.foo.BarService" loadbalance="leastactive" />
<think>嗯,用户想了解Dubbo服务中创建结果缓存的功能和作用。首先,我需要回顾一下Dubbo的相关知识,特别是缓存部分。记得Dubbo有本地缓存,比如注册中心的信息会被保存到本地文件中,这样即使注册中心不可用,服务还能继续运行。但用户提到的“结果缓存”可能是指方法调用结果缓存,而不是服务提供者的缓存。 根据引用[2]和[4],Dubbo在订阅时会保存服务提供者的信息到本地缓存文件,这个缓存是以URL为维度全量保存的。不过用户问的是结果缓存,可能需要更深入的分析。Dubbo是否有类似的结果缓存机制呢?比如在调用远程服务时,对某些方法的结果进行缓存,避免重复调用,提高性能。 另外,引用[5]提到Spring Cloud Sleuth和Dubbo的集成,但可能和缓存关系不大。引用[1]中的优化序列化方式和缓存策略可能相关,但具体到结果缓存,可能需要看Dubbo的官方文档或源码中的缓存功能。 在Dubbo中,结果缓存可能属于服务消费端的一种优化手段。例如,当某个方法的调用结果在一定时间内不会变化,可以缓存结果,下次直接使用缓存数据,减少网络开销和响应时间。这样的功能通常通过过滤器或特定的缓存拦截器实现,可能配置在方法级别,允许开发者指定缓存策略,比如LRU、超时时间等。 此外,缓存的作用包括提高性能、降低服务提供者的负载、增强系统的容错能力。比如当服务提供者暂时不可用时,消费端可以使用缓存结果继续提供服务,避免完全不可用。不过需要注意缓存一致性问题,确保数据不会过时。 总结来说,Dubbo结果缓存功能可能在消费端缓存方法调用的结果,通过配置策略来优化性能和可靠性。需要确认Dubbo是否内置了这样的功能,或者是否通过扩展点实现。根据现有的引用,可能没有直接提到结果缓存,但可以结合本地缓存和性能调优的建议来推断其作用和实现方式。</think>### Dubbo服务中创建结果缓存的功能和作用解释 在Dubbo服务中,**结果缓存**功能主要用于**提升服务调用效率和降低系统负载**。其核心作用是通过缓存方法调用的返回结果,避免重复计算或频繁访问远程服务,从而优化性能并增强系统的稳定性。以下是具体分析: --- #### 1. **功能实现原理** Dubbo结果缓存功能通常在**消费端(Consumer)**实现。当消费者调用某个远程服务方法时,若该方法配置了结果缓存Dubbo会按照以下步骤处理: 1. **首次调用**:执行远程调用,获取结果缓存。 2. **后续调用**:根据缓存策略(如超时时间、LRU淘汰机制等)直接返回缓存结果,无需再次发起远程调用[^2][^4]。 例如,对于频繁调用但结果变化不频繁的查询接口(如商品信息查询),缓存结果可显著减少网络开销。 --- #### 2. **核心作用** - **性能优化**:减少重复的远程调用和网络传输延迟,尤其适用于高并发场景。 - **降低服务提供者压力**:缓存结果后,部分请求无需触发服务提供者的实际业务逻辑,从而降低其负载。 - **容错性增强**:当服务提供者暂时不可用时,消费者可通过缓存结果实现“降级”,保证基本功能可用[^1][^5]。 --- #### 3. **缓存类型配置** Dubbo支持多种缓存策略,常见类型包括: - **LRU缓存**:基于最近最少使用原则淘汰数据。 - **定时过期缓存**:设置固定的缓存时间,超时后自动失效。 - **线程本地缓存**:仅在当前线程内缓存结果,适用于特定上下文场景。 配置示例(通过XML或注解): ```xml <dubbo:reference interface="com.example.Service" cache="lru" /> ``` 或通过注解: ```java @Reference(cache = "lru") private ExampleService exampleService; ``` --- #### 4. **适用场景** - **读多写少的数据查询**:如配置信息、静态数据查询。 - **计算密集型操作**:若结果在一定时间内有效(如每日统计报表)。 - **高并发且响应时间敏感的场景**:如秒杀活动的库存查询[^1][^5]。 --- #### 5. **注意事项** - **缓存一致性**:若服务提供者的数据更新频繁,需合理设置缓存时间或通过事件通知机制刷新缓存。 - **内存管理**:避免缓存过多数据导致内存溢出,需结合淘汰策略控制缓存大小。 - **业务兼容性**:确保缓存结果不会导致业务逻辑错误(如实时性要求高的场景需禁用缓存)[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值