对于热点数据,或者对于一些长期不会变化的数据来说,减少数据库访问查询,对查询结果进行缓存处理。
一、结果缓存
结果缓存 ,用于加速热门数据的访问速度,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.BarService
的sayHello
方法,服务器端并发执行(或占用线程池线程数)不能超过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.BarService
的 sayHello
方法,每客户端并发执行(或占用连接的请求数)不能超过 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" />