從文章的標題可知:此Swift非Apple那個Swift,只是考慮這個詞的含義比較適合。html
Swift是一個基於.NET Core的分佈式批處理框架,支持將做業分割後分發到多臺服務器並行處理,可成倍提高大量數據的處理速度。node
GitHub地址:https://github.com/bosima/Swiftgit
Swift做業處理分爲3步:分割做業、執行任務、合併結果。github
Swift由多個成員節點組成集羣,成員分爲Manager和Worker,Manager負責分割做業和合並結果,Worker負責執行具體的任務。docker
Manager同時只有一個,自動選舉產生,集羣工做須要至少2個節點,節點數>=3纔有意義。json
Swift經過啓動子進程來處理做業,原則上能夠支持各種語言開發的程序,目前僅實現了.NET Core做業的支持。bootstrap
Swift依賴Consul管理集羣節點,每臺部署了Swift節點的機器都須要部署Consul。swift
Swift做業的元數據都保存在集中的配置中心,各個節點從配置中心拉取最新的配置用於處理做業,以及將自身的工做狀態實時更新到配置中心。安全
Swift基於.NET Core平臺,能夠運行在Windows、Linux、Mac等多種操做系統,動手能力強的同窗能夠在本身熟悉的環境手動部署。服務器
不過使用docker能夠快速建立一個Swift集羣,省去下載、部署、配置等各類麻煩事,若是你的程序沒有重度使用Consul,也能夠考慮用於生產環境。
(1)使用解決方案中的Dockerfile生成Swift鏡像:
docker build -t fireflysoft/swift:latest .
(2)啓動Swift容器:
沒有Consul集羣的狀況下,爲了方便測試,支持經過參數 -consulboot 啓動Consul Agent,使之做爲Consul集羣的Server和Leader。
生產環境下爲了數據安全,應該有專門的Consul Server節點。
docker run --name swift1 -d -p 9632:9632 fireflysoft/swift:latest -cluster=test -consulboot
參數 -cluster 指定了Swift集羣的名稱。這裏同時將9632端口映射到了主機,這個是Swift管理界面程序的端口。
已經有Consul Server節點的狀況下,這樣啓動容器:
docker run --name swift2 -d fireflysoft/swift:latest -cluster=test -consuljoinip=172.17.0.2
參數 -consuljoinip 指定了容器中的Consul節點要加入的Consul集羣中的任意一個節點。
建議啓動3個Swift容器,以方便進行測試。
(1)部署Consul 這裏只是大概說下Consul的部署,具體的使用或問題請網絡搜索,也歡迎加入Consul交流羣討論(234939415)。
點擊這裏下載Consul程序包,而後編寫節點配置,舉個例子:集羣dc1的192.168.0.2節點,它是一個server節點,經過節點192.168.0.3鏈接到集羣,集羣預料有3個Server節點。
{ "datacenter": "dc1", "data_dir": "/usr/local/consul/data", "node_name": "192.168.0.2", "advertise_addr": "192.168.0.2", "start_join": ["192.168.0.3"], "rejoin_after_leave": true, "server": true, "bootstrap-expect":3, "ui": true }
而後使用命令啓動這個節點:
consul agent -config-dir ./conf
測試環境1個Server節點就夠了,生產環境建議啓動3或5個Server節點。
(2)部署Swift Swift當前有2個核心程序:
節點程序(Swift)和管理界面程序(Swift.Management),前者是一個控制檯程序,後者是一個Web程序。
這兩個程序部署起來很簡單,須要注意當前機器上須要已經部署了Consul節點。
首先使用Visual Studio發佈程序,而後部署到指定的目錄,使用命令行啓動。 啓動節點程序:
dotnet /app/swift/Swift.dll -c swiftcluster
啓動管理界面程序(只須要在其中1個機器部署便可):
dotnet /app/management/Swift.Management.dll --urls "http://0.0.0.0:9632"
用戶能夠經過管理界面查看集羣節點,上傳做業包,監控做業運行,下載做業結果,也能夠很方便的運行做業和取消做業。
Swift節點建議不要少於3個,最少2個。
VS解決方案中提供了一個做業的例子:Swift.DemoJob,能夠參考來建立本身的做業。
用戶首先須要按照Swift的規範編寫做業處理程序,做業處理程序包括三部分:分割任務、執行任務、合併任務。
這三部分對應到程序中是三個方法,Swift規定了方法的名稱和輸入輸出類型,用戶實現內部邏輯便可。
打包做業處理程序首先須要編譯程序,建議使用命令:
dotnet publish -c Release
而後附加一個名爲job.json的做業配置文件,其中指定做業的名稱、可執行文件名、計劃執行時間等信息:
{ "Name": "DemoJob", // 做業名稱 "FileName": "Swift.JobEntryPoint.dll", // 做業可執行文件,目前固定爲.NET Core對應入口文件,不要改動 "ExeType": "dotnet", // 做業可執行文件類型,目前僅支持dotnet "JobClassName": "Swift.DemoJob.dll,Swift.DemoJob.DemoJob", // 做業所在文件和類的全名稱 "RunTimePlan": [ "10m" ], // 做業運行時間計劃,能夠指定多個 "TaskExecuteTimeout": 1440, // 單個任務執行超時時間,默認1440分鐘 "MemberUnavailableThreshold": 10, // 節點不可用的認定閾值,默認10分鐘 "JobSplitTimeout":120, // 做業分割超時時間,默認120分鐘 "TaskResultCollectTimeout":120 // 任務結果合併超時時間,默認120分鐘 }
運行時間計劃格式說明:
而後將這些所有打包到一個zip文件,文件名須要和job.json中的做業名稱一致。
將打包的zip文件經過Swift管理界面上傳,稍等幾秒鐘,Swift會自動發現做業包,並分發到集羣中。 如今你能夠直接點擊運行做業,也能夠等待做業按照計劃執行。
這個程序還很簡單,代碼寫的也有些醜陋,還有不少設想沒有實現,若有興趣,歡迎Fork!