對於熱點數據,或者對於一些長期不會變化的數據來說,減少數據庫訪問查詢,對查詢結果進行緩存處理。
一、結果緩存
結果緩存 ,用於加速熱門數據的訪問速度,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" />