Go语言中文网 为您找到相关结果 105

分布式任务调度平台forest

# 分布式任务调度平台 ## 前言 在企业系统开发过程中难免少不了一些定时任务来进行定时触发执行任务,对于非分布式环境系统中,我们只需要在对应系统中内部集成一些调度库进行配置定时触发即可。 比如:使用Spring框架集成quartz,只需要进行一些简单的配置就能定时执行任务了。但是随着企业的系统越来越多、逐步从单一应用慢慢演变为微服务集群。 在分布式集群系统中主要面临出如:任务的重复执行、没有统一定时任务配置、任务节点故障转移、任务监控&报警等一些列的功能都是要在分布式系统中进行解决。 此分布式的定时任务调度平台,它非常轻量小巧,使用简单,后端以中心服务器为调度核心,负责集群中各种任务的动态分配和调度执行。 在平台前端支持Web界面可视化管理,我们可以创建、暂...阅读全文

开源项目 2019-07-26 10:09:46 busgo

一个轻量级的分布式定时任务调度平台-Cloudtask

什么是Cloudtask? Cloudtask 是一个轻量级的分布式定时任务管理平台,它非常轻量小巧,使用简单,我们可以上传、暂停/启动任务,克隆一个任务,修改任务的执行命令,或者查看任务的调度状态、执行日志,开发人员可以采用自己最熟悉的编程语言来编写任务程序,可以是一个控制台程序,也可以是一段 shell 脚本,上传至平台后设置定时执行规则即可。 设计方案 Cloudtask 后端为无状态服务,通过 Zookeeper 实现集群各节点间的发现与协调,节点以心跳方式注册到注册中心,中心服务器统一管理着所有集群,任务调度以集群方式进行分配,具有良好的可扩展性,任务分配信息按集群划分并将分配数据存储到 Zookeeper 节点,保持分配数据的一致性。 更多文档 https://cloudtask...阅读全文

分布式后台任务队列模拟(Golang)

最近研究了下gowoker,这东西代码少而精,Golang真是很适合实现这类东西。 我去掉参数配置,JSON,Redis这些东西,用goworker的方式做了个最简单的实现。 实现如下功能: 1. worker向JobServer注册可执行的功能 2. JobServer轮询,有job就执行,没有则继续轮询 3. client向JobServer提出任务请求,并传入参数 4. JobServer依请求丢给worker执行(可并发或串行执行) 5. JobServer继续轮询 我弄的这个代码很少,其中队列用数组代替,同时省掉了很多东西, 但保留了其goroutine与channel最基础的实现。 如果想看goworker的,可以参考下我这个,应当可以更快的弄明白goworker。 演示例子及运...阅读全文

博文 2015-06-17 20:03:48 xcltapestry

分布式定时任务库dcron分布式定时任务库

## dcron 分布式定时任务库 ### 原理 基于redis同步节点数据,模拟服务注册。然后将任务名 根据一致性hash 选举出执行该任务的节点。 ### 流程图 ![dcron流程图](https://github.com/LibiChai/dcron/raw/master/dcron.png) ### 特性 - 负载均衡:根据任务数据和节点数据均衡分发任务。 - 无缝扩容:如果任务节点负载过大,直接启动新的服务器后部分任务会自动迁移至新服务实现无缝扩容。 - 故障转移:单个节点故障,10s后会自动将任务自动转移至其他正常节点。 - 任务唯一:同一个服务内同一个任务只会启动单个运行实例,不会重复执行。 - 自定义存储:通过实现driver接口...阅读全文

开源项目 2019-08-13 15:14:20 LibiChai

统一任务调度平台scheduler for golang

在企业项目开发中会定时执行对应的job,对于一些简单少的job可以直接使用调度器调度执行任务。当随着公司的业务越来越多,执行任务越来越多。那么直接使用任务调度器调度任务执行会变得臃肿,而且对于任务是动态配置不可实现。如:想某一个时刻停止任务的执行、删除此任务然后修改更新任务执行时间等,如某一个任务配置到多台机器上如何做到不可用时,进行转移等问题。 为了解决此类问题,我们需要对任务的调度和执行进行分开。有统一的任务调度中心-专门进行任务的调度分发任务工作,各个任务的具体任务执行分配到个个项目中。从而达到对任务的统一配置和管理。 #基础环境 #GO环境 cd /usr/local/src/ mkdir -p $HOME/gocode/src # tar -zxf go1.8.3.linux-am...阅读全文

博文 2017-07-11 11:04:02 13614

轻量级的分布式定时任务调度平台Cloudtask

一个轻量级的分布式定时任务调度平台-Cloudtask ![image](https://static.oschina.net/uploads/img/201803/23165643_69Aq.jpg) **什么是Cloudtask?** Cloudtask 是一个轻量级的分布式定时任务管理平台,它非常轻量小巧,使用简单,我们可以上传、暂停/启动任务,克隆一个任务,修改任务的执行命令,或者查看任务的调度状态、执行日志,开发人员可以采用自己最熟悉的编程语言来编写任务程序,可以是一个控制台程序,也可以是一段 shell 脚本,上传至平台后设置定时执行规则即可。 **架构设计** **![image](https://static.oschina.net/uploads/img/2018...阅读全文

开源项目 2018-03-23 17:30:02 网友

Go 语言的 CMS 工具库 Qor

Qor 是基于 Golang 开发的的CMS 一系列工具库,基于 Qor可以快速搭建网站的后台管理系统。 Qor 的工作库包含: 1,后台管理:可以对数据库进去 CURD 管理,支持一对一,一对多,多对多关联关系维护等等 2,支持上传图片到云以及 filesystem,resize、crop 图片等等 3,Publish 发布系统,可以修改数据,并且经过检查后,再发布到正式环境中 4,状态机,可以用于开发工作流的系统 5,I18n,翻译,可以通过在 WEB 界面翻译,并将翻译保存到数据库中 6,L10n,本地化,不同于翻译,他可以针对某个地区来对内容,或者数据结构进行本地化。 7,Roles,权限管理 8,Exchange,通过 Excel,CSV 导入导出数据 9,Wo...阅读全文

Go 程序在 macOS 上的打包功能

这篇文章简单地说明了如何在 macOS 上打包一个 Go 的程序,包括引用或者不引用外部资源。作为一个原生的 Cocoa 程序它是可以下载、安装和运行的。开发过程并不需要 XCode,cgo 或者其他特殊的库文件。 在此文章结尾处,你的 Go 程序将会被打包进一个 `.app` 文件,成为一个拖放安装的只读 DMG 文件。这也适用于其他非 Go 语言的程序。 关于这个端到端的解决方案的主题还有其他很多的指导文章,有的讲的比我想要做的内容多很多,有的又是采用不同的方式,而我想呈现给你的是如何将文件打包的过程。 **要求**:你必须要有一个 macOS。此方法不会在 Windows 或者 Linux 上生效。事实上,它也可能生效,但是你必须要手动或者借助某些疯狂的工具来制作和 macOS 相关的...阅读全文

Google资深工程师深度讲解Go语言

课程地址:http://icourse8.com/go_pachong.html
课程地址:http://icourse8.com/go_pachong.html
课程目录第1章 课程介绍第2章 基础语法第3章 内建容器第4章 面向“对象”第5章 面向接口第6章 函数式编程第7章 错误处理和资源管理第8章 测试与性能调优第9章 Goroutine第10章 Channel第11章 http及其他标准库第12章 迷宫的广度优先搜索第13章 开始实战项目第14章 单任务版爬虫第15章 并发版爬虫第16章 数据存储和展示第17章 分布式爬虫第18章 课程总结 class Solution: def isMonotonic(self, A: List[int])...阅读全文

博文 2019-05-24 20:35:12 zhongjunr

Go语言开发分布式任务调度 轻松搞定高性能Crontab

第1章 课程介绍本章中将介绍一下本课程的基本内容,包括:我们要做什么、要求什么基础、将学会哪些工具、收获哪些独家干货,以及课程具体安排。第2章 如何执行shell命令执行"定时任务"其实就是执行"shell命令"。在本章中,将首先带大家区分"程序"与"命令",接着了解bash命令解释器的2种工作模式,并图示分析shell执行任务的底层原理与涉及的系统调用。最后,我们使会用Go语言的Command标准库,实现任务的执行,输出捕获,杀死任务等重要功能。 ...第3章 如何解析cron表达式cron表达式是配置定时任务执行周期的核心工具。在本章中,将首先分析cron表达式的构成以及解析逻辑,并利用开源项目cronexpr解析cron表达式并计算任务的下次调度时间。之后,我们将利用其实现任务并发调度...阅读全文

博文 2019-03-14 01:34:41 18304356293

分布式数据传输中间件DTLE

**DTLE是一个开源的数据传输中间件**,其针对的核心场景如下:  **跨数据中心的数据传输**:DTLE能在数据中心间进行可靠数据传输,并提供链路压缩以降低传输成本 **云间数据同步/迁移**:DTLE能提供在公有云间架设数据同步通道,以支持数据容灾等需求 **数据汇聚**:DTLE能将多个数据源汇聚到同一个数据源,以提供数据分析/数据转储的功能 **数据订阅**:DTLE能将数据源的变更消息发往Kafka等消息中间件,以支持数据订阅通知/缓存失效通知等需求 **跨数据中心的双向复制**:DTLE能在数据中心间提供双向复制通道,以配合业务实现数据双写   **分布式架构**:DTLE在数据传输这个基本场景上,使用了成熟的分布式任务调度架构,可以便捷地在集群中配置大量的数据传...阅读全文

Uber如何使用go语言创建高效的查询服务

在2015年初我们创建了一个微服务,它只做一件事(也确实做得很好)就是地理围栏查询。一年后它成了Uber高频查询(QPS)服务,本次要讲的故事就是我们为什么创建这个服务,以及编程语言新秀Go如何帮我们快速创建和扩展该服务。 背景 在Uber,一个地理围栏就是在地表人为定义的地理区域(或多边形几何区域)。地理围栏在Uber被广泛用于基于地理位置的设置。向用户展示给定区域有哪些产品可以使用,根据特殊需要(如机场)定义区域,并在乘车高峰时在相邻区域实施动态定价是我们产品的重要应用场景。 一个科罗拉多地理围栏示例。 第一步是通过用户手机获取地理位置信息如经纬度,进而确定用户所在地理围栏。这个功能分散在多个服务或模块中。因为我们从整体架构向微服务架构迁移,我们选择将这个功能做成一个新的微服务。 使用G...阅读全文

博文 2016-05-04 11:00:00 zengmingen

Goroutine协程池ants

ants是一个高性能的协程池,实现了对大规模goroutine的调度管理、goroutine复用,允许使用者在开发并发程序的时候限制协程数量,复用资源,达到更高效执行任务的效果。 功能: 1. 实现了自动调度并发的goroutine,复用goroutine 2. 提供了友好的接口:任务提交、获取运行中的协程数量、动态调整协程池大小 3. 资源复用,极大节省内存使用量;在大规模批量并发任务场景下比原生goroutine并发具有更高的性...阅读全文

请教:如果设置让窗体不在任务栏里出现(测试设置窗体WS_EX_TOOLWINDOW属性无效果)

下面是测试代码,是我哪里弄错了,请高手指教,谢谢。 ```go package main import ( "github.com/lxn/walk" "github.com/lxn/walk/declarative" "github.com/lxn/win" ) func main() { form := new(walk.MainWindow) declarative.MainWindow{ AssignTo: &form, Title: "test", Size: declarative.Size{300, 300}, }.Create() setFormStyle(form) form.Run(...阅读全文

南京招聘Golang工程师

工作地点:南京市楚翘城,双休五险一金,10K-20K,物联网行业 核心技能: •Go, C++/C, Lua •高并发/并行处理/队列/任务调度相关工作经历 大型系统项目经验佳 还期望您可能具备: •集群, Docker部署; •Linux 基础; •JavaScript/Node.js; •内存库:Redis, mongo…; •关系数据库: Postgres, MySQL...; •MQ 相关: MQTT,CoAP...; •会 Java/C#, 有强烈学习意愿. 其他: •欢迎完美主义者/小偏执狂:-) 岗位职责: •各种姿势 Coding; •做好TDD驱动或开发者驱动测试; •任务/故障跟踪...阅读全文

Golang Walk 托盘菜单

最近在用Golang开发一个客户端。客户端打开之后,会打开系统浏览器然后弹出一个网页。 目前已经写的差不多了,但是有个问题疑惑着我,Golang有没有类似C# contextMenu的东西呢,我在 github.com 上看到了 walk. 一个非常不错的golang gui开发框架,这个实现了类似于C# ContextMenu的东西 下面是一个非常简单的小示例: package main import ( "github.com/lxn/walk" "log" ) func GuiInit() { mw, err := walk.NewMainWindow() if err != nil { log.Fatal(err) } //托盘图标文件 icon, err := walk.Resou...阅读全文

博文 2019-03-24 14:34:45 smoothcraft

谷歌 Go 语言迎来三岁生日

谷歌Go语言近日迎来了3周岁生日。谷歌在2009年11月首次宣布推出Go语言项目,截止到今天,已有数百个外部贡献者加入并参与贡献,也有大量的组织或机构开始转向Go语言,其中包括BBC Worldwide、 Canonical、CloudFlare、Heroku、Novartis、SoundCloud等。谷歌自己也使用该语言开发了一些Web应用程序以及Doodles等。 Go语言结合了动态语言易于编写的特性和静态语言的高效性,最初定位于网络服务器、存储系统和数据库的程序设计,同时在语言中包含并发构造体,以帮助开发者创建并行任务。Go开发团队曾表示,编译完成的Go程序运行速度接近C语言实现的程序。 今年3月份,谷歌发布了Go语言的第1个稳定版本,在此之后,谷歌又为该项目增加了一个包管理系统goi...阅读全文

博文 2014-10-09 16:00:08 wangguo

分布式任务调度平台-forest

# 分布式任务调度平台 > 演示地址:http://122.51.106.217:6579 ## 前言 在企业系统开发过程中难免少不了一些定时任务来进行定时触发执行任务,对于非分布式环境系统中,我们只需要在对应系统中内部集成一些调度库进行配置定时触发即可。 比如:使用Spring框架集成quartz,只需要进行一些简单的配置就能定时执行任务了。但是随着企业的系统越来越多、逐步从单一应用慢慢演变为微服务集群。 在分布式集群系统中主要面临出如:任务的重复执行、没有统一定时任务配置、任务节点故障转移、任务监控&报警等一些列的功能都是要在分布式系统中进行解决。 此分布式的定时任务调度平台,它非常轻量小巧,使用简单,后端以中心服务器为调度核心,负责集群中各种任务的动态分配和调度执行。 在平台前端支持W...阅读全文

博文 2019-10-23 11:27:45 busgo

Go语言近况

Go语言是Google公司的实验性语言,以BSD协议开放源代码。Go语言在Inferno操作系统相关的研究工作基础上开发,最初由Rob Pike等Google工程师在2007年9月启动设计工作,在2009年11月正式对外发布。 Go将动态语言易于编写的特性和静态语言的高效性相结合,具备良好的易用性和极佳的执行效率。Go语言最初定位于网络服务器、存储系统和数据库的程序设计,同时在语言中包含并发构造体,以方便的帮助开发者创建并行任务。Go语言具有效率极高的编译器,目前Go编译器能在Linux、FreeBSD以及Mac OS X平台下运行,但暂时没有对Windows环境提供编译支持。Go开发团队曾在博客中表示,编译完成的Go程序运行速度接近C语言实现的程序。 在今年五月份举办的Google I/O...阅读全文

博文 2014-12-08 02:00:03 aylixuan

Go语言近况

Go语言是Google公司的实验性语言,以BSD协议开放源代码。Go语言在Inferno操作系统相关的研究工作基础上开发,最初由Rob Pike等Google工程师在2007年9月启动设计工作,在2009年11月正式对外发布。 Go将动态语言易于编写的特性和静态语言的高效性相结合,具备良好的易用性和极佳的执行效率。Go语言最初定位于网络服务器、存储系统和数据库的程序设计,同时在语言中包含并发构造体,以方便的帮助开发者创建并行任务。Go语言具有效率极高的编译器,目前Go编译器能在Linux、FreeBSD以及Mac OS X平台下运行,但暂时没有对Windows环境提供编译支持。Go开发团队曾在博客中表示,编译完成的Go程序运行速度接近C语言实现的程序。 在今年五月份举办的Google I/O...阅读全文

谷歌发布 Go 1.1 正式版本

谷歌Go语言开发团队今天发布了1.1正式版本。 Go是谷歌于2007年9月启动设计的编程语言,最初定位于web服务、存储系统和数据库的程序设计,同时在语言中包含并发构造体,以帮助开发者创建并行任务。Go将动态语言易于编写的特性和静态语言的高效性相结合,具备良好的易用性和极佳的执行效率。 与1.0版本相比,该版本的主要改进如下: 1. 性能改进 与1.0版本相比,该版本对编译器和链接器、垃圾回收、goroutine(Go语言的并发机制)调度、map实现、部分标准库进行了优化,基于该版本构建的Go代码运行速度将会明显提升。 2. 语言本身的变化 语言本身有一些细微的变化,其中两个需要注意的变化是:放宽了return语句的限制(可以简化现有代码中多余的return语句,使程序更加简洁)、引入了方法...阅读全文

Golang创建daemon程序

## daemon的概念 守护进程(daemon)就是一直在后台运行的进程,它没有控制终端,无法和前台的用户交互。当我们打开一个终端时会创建一个session会话(shell),从用户登录开始到用户退出为止,这段时间内在该终端执行的进程都属于这一个会话。一个会话一般包含一个前台进程组、一个后台进程组和一个会话首进程(shell程序本身)。 例如用以下命令启动5个进程: > $ proc1 | proc2 & > $ proc3 | proc4 | proc5 > proc1和proc2属于同一个后台进程组,proc3、proc4、proc5属于同一个前台进程组,Shell进程本身属于一个单独的进程组。这些进程组的控制终端相同,它们属于同一个session。 > **"后台任务"与"前台任务"...阅读全文

博文 2017-02-09 20:02:22 shanks

golang后台任务库

功能需求 本来想用linux自带的corntab,然而corn调试困难,而且不支持以下需求 能分布式 有http接口 能调试 有统计 kala 这个需求也不算小众,于是在网上查了一下,果然有,而且还比较多。 最后选择了kala,主要是它的接口比较简洁,而且调试方便。 注意 与其它库不同的是,kala没有选择与corntab格式兼容,而是采用了iso8601时间格式。 格式说明,可以见我上一篇博客。 小优化 kala是一个任务管理平台,也提供了golang、nodejs和python的客户端sdk,可是默认的 golang库,有点问题,于是我把kala默认的库修改了一下,只保留的客户端功能。 使用方法和官方一样,git仓库在此...阅读全文

博文 2017-12-01 00:00:01 xdao

go任务调度7(etcd的watch的用法)

监听etcd中的kv变化,常用来做集群中的配置下发、状态同步,非常有价值。 package main import ( "go.etcd.io/etcd/clientv3" "time" "fmt" "context" "go.etcd.io/etcd/mvcc/mvccpb" ) func main() { var ( config clientv3.Config client *clientv3.Client err error kv clientv3.KV watcher clientv3.Watcher getResp *clientv3.GetResponse watchStartRevision int64 watchRespChan <-chan clientv3.WatchR...阅读全文

博文 2019-04-20 18:35:10 梁十八

Go 语言团队否决关于"try"语句的提案

Go语言作者之一 Robert Griesemer前几天代表Go语言开发团队的提案审查委员会公布了关于否决一项提案的决定。Robert在「内置的Go错误检查函数,"try"」提案下面的回复中发布了这个公告,并表示基于社区压倒性的反应和由此引起的广泛讨论,团队决定提前拒绝此项提案。关于Go 2的错误处理问题,Robert表示团队去年就已阐述了对此的看法,但当时并没引起足够的注意和讨论。所以关于"try"语句的提案可能是解决此问题的一个很好的解决方案,但对于大多数使用者而言,这可能没解决到什么问题。下面举一个try语句的示例。例如如下代码:f, err := os.Open(filename) if err != nil { return …, err // zero values for ot...阅读全文

在Golang中对MySQL进行操作

Golang官方并没有提供数据库驱动,但通过database/sql/driver包来提供了实现驱动的标准接口。可以在Github上找到很多开源的驱动。 其中go-sql-driver/mysql是一个比较推荐的驱动,其完全支持database/sql接口。 使用这个驱动, 在项目里import进: import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) 在正式使用database/sql包之前,首先得明白sql.DB并不代表一个数据库连接,它并不会与数据库建立任何连接,也不会验证参数的合法性,要想知道DSN的合法性,需使用sql.DB实例(比如db)db.Ping() 方法, 如下: err = db.Ping() if e...阅读全文

博文 2019-03-09 14:34:39 灯风罩戟

go+chan并发执行

利用一个chan执行一个并发的任务, 整个任务的最大耗时是最耗时的那个子任务 func SendChan(data int){ t := 10 - data if data == 5{ t = 20 } time.Sleep(time.Duration(t*1e9)) C <- data } func main(){ for i:=0; i<10; i++{ go SendChan(i) } for i:=0; i<10; i++{ var data int = <- C fmt.Println("data:", data) } ...阅读全文

博文 2017-08-05 03:14:54 jinjiashan

golang runtime实现多核并行任务

首先我们需要明确一下并行跟并发的区别,并发一般是被内核通过时间片或者中断来控制的,遇到io阻塞或者时间片用完的时会转移线程的使用权。一个核的情况下不可能有并行的情况,因为同一时间只有一个任务在调度。 该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。 http://xiaorui.cc/2016/03/05/golang-runtime%E5%AE%9E%E7%8E%B0%E5%A4%9A%E6%A0%B8%E5%B9%B6%E8%A1%8C%E4%BB%BB%E5%8A%A1/ Golang默认所有的任务都在一个cpu核里,如果想使用多核来跑goroutine的任务,需要配置runtime.GOMAXPROCS。 GOMAXPROCS的数目根据自己任务量分配就可...阅读全文

博文 2017-04-04 19:21:47 rfyiamcool

go任务调度10(操作mongodb)

后台启动mongodb服务器端: nohup ./bin/mongod --dbpath=./data & package main //导入 import ( "context" "fmt" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/mongo/readpref" "os" "time" ) type Howie struct { //struct里面获取Ob...阅读全文

博文 2019-04-21 01:35:11 梁十八

基于go通道的异步任务调度器

项目地址:[https://github.com/chenhg5/go-task](https://github.com/chenhg5/go-task) 安装 ``` go get github.com/chenhg5/go-task ``` 使用 ``` import ( "runtime" "fmt" "time" "github.com/chenhg5/go-task" ) func main() { // init task.InitTaskReceiver(runtime.NumCPU()) // add task task.AddTask(task.NewTask( map[string]interface{}{ "paramA" : "value", }, // parame...阅读全文

高性能任务调度引擎Volcano

Volcano 是基于 Kubernetes 的批处理系统,源自于华为云 AI 容器。Volcano 方便 AI、大数据、基因、渲染等诸多行业通用计算框架接入,提供高性能任务调度引擎,高性能异构芯片管理,高性能任务运行管理等能力。 ## 整体架构 ![volcano](https://static.oschina.net/uploads/img/201907/03110508_8Omm.png) Volcano 提供一整套目前 K8S 在批量和弹性工作负载处理中缺失的机制,包括: 1. 机器学习/深度学习 2. 生物信息学/基因组学 3. 其他“大数据”应用 这些类型的应用程序通常运行在Volcano集成的Tensorflow,Spark,PyTorch,MPI等通用域框架上...阅读全文

Golang搭建并行版爬虫信息采集框架

1.简介 Go语言在分布式系统领域有着更高的开发效率,提供了海量并行的支持。本博文介绍的是采用Go语言搭建一个并行版爬虫信息采集框架,博文中使用58同城中租房网页做案例。相比较其他爬虫程序它的优点是: 1.抓取信息速度非常快,因为是并行处理的,通过配置协程数量,可以比普通的爬虫信息采集程序快上上百倍。 2.功能模块化,每个功能模块各司其职,配置简单。通过修改信息抓取规则,就可以采集不同网站中的数据。 程序源代码放到github上,链接地址是: https://github.com/GuoZhaoran/crawler 2.项目架构 下面是项目整体架构的示意图: 2.1 Request(请求) 该爬虫架构中Request请求可以理解为:抓取请求url的内容,例如抓取58同城北京市的租房信息时,...阅读全文

博文 2018-10-05 22:34:38 郭兆冉

集群管理和容器编排工具 SwarmKit

SwarmKit 是Docker公司开源的Docker集群管理和容器编排工具,其主要功能包括节点发现、基于[raft算法](https://en.wikipedia.org/wiki/Raft_%28computer_science%29)的一致性和任务调度等。 ### 基本概念 服务器上运行SwarmKit工具的swarmd命令后,即可将其加入到服务器集群中,该服务器就成为集群中的一个 节点 。SwarmKit将节点分为两类: * 工作节点 负责通过执行器运行任务。SwarmKit的默认执行器为Docker容器执行器(Docker Container Executor); * 管理节点 负责接收和响应用户的请求,将集群状态调节成最终状态。 用户可以动态调整节点的角色。 ...阅读全文

一文读懂什么是进程、线程、协程

进程 我们都知道计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件;应用程序则是具有某种功能的程序,程序是运行于操作系统之上的。 进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。 进程一般由程序、数据集合和进程控制块三部分组成。 程序用于描述进程要完成的功能,是控制进程执行的指令集; 数据集合是程序在执行时所需要的数据和工作区; 程序控制块(Program Control Block,简称PCB),包含进程的描述信息和控制信息,是进程存在的唯一标志。 进程具有的特征: 动态性:进程是程...阅读全文

博文 2019-09-26 21:32:53 aside section ._1OhGeD

go任务调度9(op实现分布式乐观锁)

package main import ( "go.etcd.io/etcd/clientv3" "time" "fmt" "context" ) func main() { var ( config clientv3.Config client *clientv3.Client err error lease clientv3.Lease leaseGrantResp *clientv3.LeaseGrantResponse leaseId clientv3.LeaseID keepRespChan <-chan *clientv3.LeaseKeepAliveResponse keepResp *clientv3.LeaseKeepAliveResponse ctx context.Co...阅读全文

博文 2019-04-20 22:35:12 梁十八

Golang模仿七牛图片处理API

之前一直在用qiniu的存储服务,生成图片的缩略图,模糊图,视频的webp,现在需要把存储移到s3上,那么这些图片,视频处理就要自己动手写了,本文梳理一下大致的思路。 分析需求 先看一下qiniu的接口是如何处理图片的,例如先截取视频第一秒的图片,再把图片缩略,最后存储到一个新的key,命令可以这么写 vframe/jpg/offset/1|imageMogr2/thumbnail/400x|saveas/xxx, 可以看到三个操作之间用 | 符号分割,类似unix 的 pipe 操作。 上面的操作算作一个cmd, 一次API请求可以同时处理多个cmd,cmd之间用分号分割, 处理完毕后,在回调中把处理结果返回,例如 { "id": "xxxxx", "pipeline": "xxx", "...阅读全文

博文 2017-02-09 08:29:46 一堆好人卡

Golang的socket编程(三):并发Server

一、概述上一篇实现了一个server和client通信,完成了小写转大写的功能,但是是一个单任务式的响应:客户端发送连接接收响应,程序结束;服务端则接收数据响应数据也结束!就实际需要而言,并没有很大的用处,所以现在我们就给客户端和服务端添加上并发功能。 逻辑其实很简单,就是利用golang的gorutine,一旦来新的连接,就开启一个gorutine去处理,然后响应,直到客户端关闭连接。 二、服务端1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950package mainimport ( "net" "fmt" "strings")func handle(con...阅读全文

博文 2018-05-17 09:28:40 Client | 马谦的博客

待机任务调度与警报工具GoAlert

GoAlert 是一个待机任务调度与警报工具,支持自动上报与通知(通过 SMS 或语音通话),以在正确的时间以正确的方式自动通知到对应的负责人。 ![image](https://static.oschina.net/uploads/space/2019/0617/143154_NUY1_3820517.png) 特性: * 可以自定义 GoAlert 给他人发送通知,保证在你不方便的时候也不会错过任何警报 * 管理团队任务,控制待机人员并快速查看相关信息 * GoAlert 为现有监控和遥测系统的外部集成提供了便利的选项 * 可以通过适合移动设备的 Web UI 或简单的单字符 SMS 回复来确认和关闭警...阅读全文

开源项目 2019-07-05 12:30:01 target

Go语言开发分布式任务调度 轻松搞定高性能Crontab

Go语言开发分布式任务调度 轻松搞定高性能CrontabGolang因其强大的协程机制,现已广泛应用于解决分布式环境下的高并发问题。本门课程中将结合Etcd与MongoDB实现一个基于Master-Worker分布式架构的任务调度系统。你不仅将掌握Golang的工程实践能力,而且会收获诸如CAP、Raft的分布式经典理论与架构经验,”工程能力”与”知识体系”齐头并进,实现华丽质变第1章 课程介绍本章中将介绍一下本课程的基本内容,包括:我们要做什么、要求什么基础、将学会哪些工具、收获哪些独家干货,以及课程具体安排。1-1 课程导学 试看第2章 如何执行shell命令执行"定时任务"其实就是执行"shell命令"。在本章中,将首先带大家区分"程序"与"命令",接着了解bash命令解释器的2种工作...阅读全文

博文 2019-05-22 17:34:41 方便你我他

go_工作池

```golang package main import ( "fmt" "time" ) // 在这个例子中,我们将看到如何使用goroutine 和channel实现一个_工作池_ // 工作池是我们将要在并发实例中支持的任务了,这些执行者将从`jobs`通道接受任务, // 并且通过`result`发送对应的结果。 // 工作池 func worker(id int, jobs <-chan int, result chan<- int) { for j := range jobs { fmt.Println("worker : ", id, "processing job ", j) time.Sleep(time.Second * 2) // 构建耗时2s的任务 result <...阅读全文

博文 2018-06-12 17:10:57 18393910396

GC(垃圾回收)必须Stop-the-world?

GC(垃圾回收)必须Stop-the-world? 并发编程的许多困难都源于对象生存期问题,当对象在线程之间传递时,要确保它们安全地释放就变得很麻烦。因此GC可以使得并发编程变得容易。但是实GC也是一个挑战,但是一次实现,就可以解决人们手动管理内存的麻烦(C语言),大大提高的开发效率和避免了许多Bug。 但是GC也是有成本的,他会影响程序的效率,GC是一个非常挑战的工作,很多计算机科学家在上面耗费了数十年不断的提升效率。 GC算法设计时,会考虑几个重要指标: 程序吞吐量:GC对程序效率的影响,也就花费在GC的时间和程序处理正常业务的时间比; GC吞吐量:单位时间内垃圾回收的数量; 暂停时间:Stop-the-world 的时间; 并发:垃圾回收机制如何使用多核; 等等还有很多 很多人问为什么...阅读全文

博文 2019-10-30 14:04:17 _西门吹牛

Go语言打造分布式Crontab 轻松搞定高性能任务调度

Go语言开发分布式任务调度 轻松搞定高性能CrontabGolang因其强大的协程机制,现已广泛应用于解决分布式环境下的高并发问题。本门课程中将结合Etcd与MongoDB实现一个基于Master-Worker分布式架构的任务调度系统。你不仅将掌握Golang的工程实践能力,而且会收获诸如CAP、Raft的分布式经典理论与架构经验,”工程能力”与”知识体系”齐头并进,实现华丽质变第1章 课程介绍本章中将介绍一下本课程的基本内容,包括:我们要做什么、要求什么基础、将学会哪些工具、收获哪些独家干货,以及课程具体安排。1-1 课程导学 试看第2章 如何执行shell命令执行"定时任务"其实就是执行"shell命令"。在本章中,将首先带大家区分"程序"与"命令",接着了解bash命令解释器的2种工作...阅读全文

博文 2019-05-04 19:34:37 为了谁你知道

go任务调度5(go操作etcd)

连接etcd: package main import ( "fmt" "go.etcd.io/etcd/clientv3" "time" ) var ( config clientv3.Config client *clientv3.Client err error ) func main() { //客户端配置 config = clientv3.Config{ Endpoints: []string{"0.0.0.0:2379"}, //集群列表 DialTimeout: 5 * time.Second, } //建立连接 if client, err = clientv3.New(config); err != nil { fmt.Println(err) return } clie...阅读全文

博文 2019-04-20 17:35:12 梁十八

Golang实现简单爬虫框架(4)——队列实现并发任务调度

前言 在上一篇文章《Golang实现简单爬虫框架(3)——简单并发版》中我们实现了一个最简单并发爬虫,调度器为每一个Request创建一个goroutine,每个goroutine往Worker队列中分发任务,发完就结束。所有的Worker都在抢一个channel中的任务。但是这样做还是有些许不足之处,比如控制力弱:所有的Worker在抢同一个channel中的任务,我们没有办法控制给哪一个worker任务。 其实我们可以自己做一个任务分发的机制,我们来决定分发给哪一个Worker 注意:本次并发是在上一篇文章简单并发实现的基础上修改,所以没有贴出全部代码,只是贴出部分修改部分,要查看完整项目代码,可以查看上篇文章,或者从github下载项目源代码查看 1、项目架构 在上一篇文章实现简单并发...阅读全文

博文 2019-05-27 12:34:37 jsfantasy

Go语言打造分布式Crontab 轻松搞定高性能任务调度

Go语言开发分布式任务调度 轻松搞定高性能CrontabGolang因其强大的协程机制,现已广泛应用于解决分布式环境下的高并发问题。本门课程中将结合Etcd与MongoDB实现一个基于Master-Worker分布式架构的任务调度系统。你不仅将掌握Golang的工程实践能力,而且会收获诸如CAP、Raft的分布式经典理论与架构经验,”工程能力”与”知识体系”齐头并进,实现华丽质变第1章 课程介绍本章中将介绍一下本课程的基本内容,包括:我们要做什么、要求什么基础、将学会哪些工具、收获哪些独家干货,以及课程具体安排。1-1 课程导学 试看第2章 如何执行shell命令执行"定时任务"其实就是执行"shell命令"。在本章中,将首先带大家区分"程序"与"命令",接着了解bash命令解释器的2种工作...阅读全文

博文 2019-05-04 19:34:37 花开月月圆

go任务调度4(etcd安装和基本使用)

下载,解压,进入目录,运行: [root@bogon etcd-v3.3.12-linux-amd64]# ./etcd --listen-client-urls 'http://0.0.0.0:2379' --advertise-client-urls 'http://0.0.0.0:2379'(本地etcd的端口) etcd控制工具: [root@bogon etcd-v3.3.12-linux-amd64]# ETCDCTL_API=3 ./etcdctl (前面需要一个环境变量ETCDCTL_API=3)put、get、del、--prefix: [root@bogon etcd-v3.3.12-linux-amd64]# ETCDCTL_API=3 ./etcdctl put "n...阅读全文

博文 2019-04-20 03:35:10 梁十八