zookeeper實現分佈式任務調度系統

        目前項目採用nginx+tomcat來作負載均衡,缺乏一個分佈式任務調度配置。任務調度在整個系統中是單點故障。爲了解決這個問題,研究了一下zookeeper和redis。你們一致的解決方案是用分佈式鎖。經過zookeeper或者redis來構建一個鎖實現。全部系統節點都能獲取到這個鎖的狀態,做爲一個共享鎖,爲系統調度提供分佈式部署。nginx

        由於個人系統架構是spring架構。爲了減小代碼對系統的侵入,擴展spring的任務調度。將分佈式任務調度機制寫入自定義任務調度中。redis

   <task:scheduled-tasks scheduler="zkScheduleManager">
        <task:scheduled ref="taskObj" method="print"  fixed-rate="5000"/>
    </task:scheduled-tasks>
zkScheduleManager繼承spring的
org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;

在各個調度方法中寫入分佈式任務調度機制。spring

代碼量比較大,下邊說一下思路,後續把代碼補上。tomcat

  1. zookeeper維護server task兩個文件夾。server存放鏈接的節點,task存放註冊的任務服務器

  2. 爲了防止羊羣效應每一個服務器上維護一個EPHEMERAL_SEQUENTIAL類型節點。選取序列號最小的節點爲主節點。架構

  3. task節點按照任務名稱/主節點id  形式註冊到zookeeper負載均衡

  4. 任務調度時利用反射機制構建任務,並獲取task節點中的主節點id與當前節點id比對,是當前服務器進行相關任務調度。
    分佈式

相關文章
相關標籤/搜索