<
dubbo:protocol
- 事件處理線程說明
- 如果事件處理的邏輯能迅速完成,並且不會發起新的IO請求,比如只是在內存中記個標識,則直接在IO線程上處理更快,因為減少了線程池調度。
- 但如果事件處理邏輯較慢,或者需要發起新的IO請求,比如需要查詢數據庫,則必須派發到線程池,否則IO線程阻塞,將導致不能接收其它請求。
- 如果用IO線程處理事件,又在事件處理過程中發起新的IO請求,比如在連接事件中發起登錄請求,會報“可能引發死鎖”異常,但不會真死鎖。
<
dubbo:registry
有時候希望人工管理服務提供者的上線和下線,此時需將注冊中心標識為非動態管理模式。
<
dubbo:registry
address="10.20.141.150:9090"
dynamic="false"
/>
不同服務在性能上適用不同協議進行傳輸,比如大數據用短連接協議,小數據大並發用長連接協議。
異步調用
基於NIO的非阻塞實現並行調用,客戶端不需要啟動多線程即可完成並行調用多個遠程服務,相對多線程開銷較小。
<dubbo:reference id="fooService" interface="com.alibaba.foo.FooService">
<dubbo:method name="findFoo" async="true" />
</dubbo:reference>
<dubbo:reference id="barService" interface="com.alibaba.bar.BarService">
<dubbo:method name="findBar" async="true" />
</dubbo:reference>
應用間聲明依賴強度,哪些功能強依賴,哪些弱依賴,然后基於依賴強度,計算出影響面,並定期測試復查,加強關鍵路徑上的服務的優化和容錯,清理不該在關鍵路徑上的服務。
提供容錯Mock數據,Mock數據也應可以在注冊中心在運行時動態下發,當某服務不可用時,用Mock數據代替,可以減少故障的發生,比如某驗權服務,當驗權服務全部掛掉后,直接返回false表示沒有權限,並打印Error日志報警。
另外,前端的頁面也應采用Portal進行降級,當該Portal獲取不到數據時,直接隱藏,或替換為其它模塊展示,並提供功能開關,可人工干預是否展示,或限制多少流量可以展示。
結果緩存
結果緩存,用於加速熱門數據的訪問速度,Dubbo提供聲明式緩存,以減少用戶加緩存的工作量。 |
||
2.1.0以上版本支持 |
||
- lru 基於最近最少使用原則刪除多余緩存,保持最熱的數據被緩存。
- threadlocal 當前線程緩存,比如一個頁面渲染,用到很多portal,每個portal都要去查用戶信息,通過線程緩存,可以減少這種多余訪問。