在SchedulerX中建立的應用預設最多隻支援1,000個任務,而在某些情境下1,000個任務遠遠滿足不了業務需求。另外,實際業務情境中,不同定時任務的調度時間可能不一樣。本文介紹如何通過一系列配置,使單應用能夠支援上萬,甚至十萬以上的定時任務,並且不同任務能夠有獨立的調度時間。
應用情境
常見應用情境是每個定時任務調度時間都不一樣,無法通過MapReduce分布式任務解決(MapReduce分布式任務每個子任務調度時間是一致的)。
物聯網智能開關
智能開關可以設定定時開啟、關閉,是由使用者自訂設定的,所以每個開關的定時時間是不一致的。可以給每一個開關設定一個定時單機任務。在物聯網情境下,定時單機任務可能會達到萬、甚至十萬層級。
業務監控
業務監控需要配置監控警示規則,一般每分鐘輪詢一次,符合規則則警示。大部分情境下使用一個MapReduce分布式任務是可以解決的,但是如果由於警示規則的複雜程度不同而導致執行時間差異較大時,有可能出現一個警示子任務沒有執行完而阻塞整個任務下次調度。所以,可以給每個警示規則配置一個定時單機任務。當業務規模很大時,定時單機任務也可能達到萬、甚至十萬層級。
將SchedulerX作為底座
當將SchedulerX作為底座,封裝一層任務調度平台(通過POP API建立任務)提供給自己的公司使用時,任務量也有可能達到萬、甚至十萬層級。
操作步驟
使單應用能夠支援十萬以上的定時任務,需要完成以下兩個步驟:
聯絡SchedulerX技術支援人員,開啟應用自動擴容。
開啟應用自動擴容後,單應用的任務數達到上限(1000)後,會自動感知並分裂出一個新的子應用。
使用1.2.1及以上版本用戶端接入SchedulerX,並開啟共用ContainerPool功能。
本文以Spring Boot應用為例進行介紹,用戶端接入詳情請參見Spring Boot應用接入SchedulerX。如果您使用其它類型的應用接入,請參見中的相關文檔。
在應用的pom.xml檔案中添加1.2.1及以上版本的用戶端依賴。
1.2.1以下版本用戶端不支援共用ContainerPool,所以請在應用中添加1.2.1及以上版本用戶端,或將用戶端的依賴升級到1.2.1及以上版本。更多用戶端版本資訊請參見用戶端發布記錄。
在應用的設定檔中添加共用ContainerPool配置。
spring.schedulerx2.shareContainerPool=true #開啟所有任務共用線程池 spring.schedulerx2.sharePoolSize=128 #自訂共用線程池大小說明如果未開啟共用ContainerPool,每個任務觸發都會建立一個線程池,用戶端負載會因超負荷而發生異常。