分佈式事務:java
弱一致性(基於MQ的最終一致性)redis
強一致性(基於XA二段提交的強一致性)spring
分佈式JOB(任務調度)數據庫
分㐊全局一致性(分佈式鎖)springboot
分佈式場景下的session一致性服務器
CAP:網絡
C:數據一致性(數據從一個事務到另外一個事務時一致的)session
A:服務可用性,全部讀寫請求在必定時間內獲得相應,可終止,不會一直等待負載均衡
P:分錢容錯性,在網絡分區的狀況下,被分隔的節點仍能正常對外服務框架
base理論:基本可用,服務降級
jta,XA接口,2PC
jta:java操做xa接口
jta+automatic
XA接口:全局事務(事務管理器,本地事務)
2PC:二段提交協議(準備和提交)
LCN分佈式事務框架官網:http://www.txlcn.org/
一、lcn事務原理:不生產事務,只是事務的搬運工(事務協調者TX,本地事務)
二、發起方:調用其餘服務接口
三、參與方:被別人調用我接口
1.建立事務分組(發起方建立事務分組,獲取到分組ID,將分組ID發給事務協調者)
二、http協議,經過請求頭將事務分組傳遞給參與方
三、參與方從請求頭裏面獲取到事務分組ID
四、參與方獲取到事務分組以後,不會去提交事務
五、lcn假關閉。發起方通知TX,TX通知參與方提交或者回滾事務。
任務調度:定時JOB,在何時進行執行代碼任務
場景:標的放款與標的還款每5秒跑一次。
java實現定時任務幾種方式:
Thread(死循環一直監聽),
TimeTask,
線程池定時線程ScheduledExecutorService .scheduleAtFixedRate(new Runnable),1,1,TimeUnit.SECONDS),
quartz,springboot
分佈式JOB如何解決冪等性:
一、分佈式鎖(zk、redis),保證只有一臺服務器執行job,zk與redis分佈式鎖的區別?
二、使用配置文件,配置文件開關,加一個配置文件 start=true、false,true執行job,false不執行job,一個配置文件爲true其他全爲false
三、使用數據庫惟一標識(年月日),成功就執行,失敗就不執行,缺點:效率低。
傳統任務調度 缺點:
一、執行中出現異常,就中止了,沒有補充機制,只有等到下一次纔會執行。
二、支持集羣?隨機出如今某一臺機器上面執行(權重)
三、不支持路由策略(負載均衡)
四、統計(幾百個服務,那些執行成功了,那些失敗了,手動補償,統一管理)
五、管理平臺
六、重試屢次失敗->報警、狀態監控
---分佈式任務調度平臺(XXLJOB)(elsticjob):解決傳統任務調度缺點