文档章节

Swift:一个基于.NET Core的分布式批处理框架

o
 osc_gu9d45li
发布于 2019/04/08 09:12
字数 1575
阅读 27
收藏 0

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

Swift是什么

从文章的标题可知:此Swift非Apple那个Swift,只是考虑这个词的含义比较适合。

Swift是一个基于.NET Core的分布式批处理框架,支持将作业分割后分发到多台服务器并行处理,可成倍提升大量数据的处理速度。

GitHub地址:https://github.com/bosima/Swift

原理

Swift作业处理分为3步:分割作业、执行任务、合并结果。

Swift由多个成员节点组成集群,成员分为Manager和Worker,Manager负责分割作业和合并结果,Worker负责执行具体的任务。

Manager同时只有一个,自动选举产生,集群工作需要至少2个节点,节点数>=3才有意义。

Swift通过启动子进程来处理作业,原则上可以支持各类语言开发的程序,目前仅实现了.NET Core作业的支持。

Swift依赖Consul管理集群节点,每台部署了Swift节点的机器都需要部署Consul。

Swift作业的元数据都保存在集中的配置中心,各个节点从配置中心拉取最新的配置用于处理作业,以及将自身的工作状态实时更新到配置中心。

Swfit使用

运行环境搭建

Swift基于.NET Core平台,可以运行在Windows、Linux、Mac等多种操作系统,动手能力强的同学可以在自己熟悉的环境手动部署。

不过使用docker可以快速创建一个Swift集群,省去下载、部署、配置等各种麻烦事,如果你的程序没有重度使用Consul,也可以考虑用于生产环境。

 1、docker

(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容器,以方便进行测试。

2、手动部署

(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,可以参考来创建自己的作业。

 1、编写作业

用户首先需要按照Swift的规范编写作业处理程序,作业处理程序包括三部分:分割任务、执行任务、合并任务。

这三部分对应到程序中是三个方法,Swift规定了方法的名称和输入输出类型,用户实现内部逻辑即可。

 2、打包作业

打包作业处理程序首先需要编译程序,建议使用命令:

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分钟
}

运行时间计划格式说明:

  • HH:mm 每天定时运行
  • ddd HH:mm 每周定时运行
  • MM-dd HH:mm 每月定时运行
  • yyyy-MM-dd HH:mm 定时运行一次
  • dH 每d小时执行一次
  • dm 每m分钟执行一次

然后将这些全部打包到一个zip文件,文件名需要和job.json中的作业名称一致。

3、运行作业

将打包的zip文件通过Swift管理界面上传,稍等几秒钟,Swift会自动发现作业包,并分发到集群中。 现在你可以直接点击运行作业,也可以等待作业按照计划执行。

后记

这个程序还很简单,代码写的也有些丑陋,还有很多设想没有实现,如有兴趣,欢迎Fork!

我的独立博客地址:https://blog.bossma.cn/csharp/swift-is-a-distributed-processing-framework-of-batch-data-based-on-dotnetcore/

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
NET Core的分布式批处理框架

NET Core的分布式批处理框架 Swift是什么 从文章的标题可知:此Swift非Apple那个Swift,只是考虑这个词的含义比较适合。 Swift是一个基于.NET Core的分布式批处理框架,支持将作业分割后分发...

osc_qgmf9fjw
2019/05/12
6
0
Hadoop生态圈

Hadoop是Apache开源的分布式计算框架,由Java语言实现,支持对海量数据的分布式计算,其框架中最核心设计是HDFS和MapReduce。 Hadoop的优势1)高可靠性:因为Hadoop假设计算元素和存储会出现...

osc_qgitz6q2
2019/09/23
1
0
《从零开始学Swift》学习笔记(Day60)——Core Foundation框架

原创文章,欢迎转载。转载请注明:关东升的博客 Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API。虽然在Swift中调用这种C语言风格的API比较麻...

智捷课堂
2016/01/15
50
0
Swift 开源精选-v1.0(基础篇)

Swift 开源精选-v1.0(基础篇) 基于《Swift 语言指南》开源项目收录,做了一个甄别、筛选,并辅以一句话介绍。 来源 GitHub:Swift 开源项目精选 目录 工具 存储 网络 图片 框架 界面 示例...

上官尘
2016/03/07
325
0
Hive的简介

大数据技术框架 数据存储:HDFS:分布式文件存储系统(基于磁盘),包括存储安全性;Tachyon(可拓展了解部分,基于内存的分布式文件存储系统),一般会将Tachyon架构在hdfs与计算框架之间,...

chen_qin
2016/07/17
14
0

没有更多内容

加载失败,请刷新页面

加载更多

2020-2021 设计趋势ISUX报告 · 用户体验篇

据说点击蓝色字体关注同学都升职加薪了 前言 身为用户体验设计师,无时无刻不被世界上的新事物冲刷着认知——互联网红利下降带来变化莫测的商业动向、循着摩尔定律野蛮生长日新月异的新技术、...

静电1983
07/04
0
0
当查询的数据来自多个数据源,有哪些好的分页策略?

概述 在业务系统开发中,尤其是后台管理系统,列表页展示的数据来自多个数据源,列表页需要支持分页,怎么解决? 问题 如上图,数据源可能来自不同 DB 数据库,可能来自不同 API 接口,也可能...

新亮笔记
03/14
9
0
花最少的时间点亮OLED之RT-Thread u8g2之(DIY一个小小天气站+万年历)

准备花几天时间DIY一个小小天气站+万年历,一来可以送给好友,二来也是蹦着熟悉RT-Thread的目的去学习,以提高自己的工作效率,指不定哪天就用上了,总之技多不压身嘛! 1、什么是u8g2? u8g...

Aladdin-Wang
07/10
0
0
HTML5 不得不看的本地存储 LocalStorage

用过HTML5 本地存储和sessionStorage的,你就感觉html5很强大,比cookie和session好用很多,下面让我们来学习这个知识吧... 最早的Cookies自然是大家都知道,问题主要就是太小,大概也就4KB...

胡哥有话说
2016/08/16
0
0
Oracle SQL自动化审核工具的实现

作者介绍 梁铭图,新炬网络首席架构师,十多年数据库运维、数据库设计、数据治理以及系统规划建设经验,拥有Oracle OCM、Togaf企业架构师(鉴定级)、IBM CATE等认证,曾获dbaplus年度MVP以及...

osc_sezkegv6
21分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部