摘要: 对于 Go 语言开发者来说,在享受语言便利性的同时,最终编译的单一可执行文件也是我们所热衷的。但是,一旦遇到我们需要分发的东西不只有可执行文件的时候,事情就变得稍微有点复杂了,例如,需要分发个默认的配置文件;或者说是一个 Web 服务需要附带一些简单的 js/css 文件之类的。当然,对于经验丰富的老司机们来说这都不是问题,例如 RH 系列的 RPM 是很多老司机们的选择,像我这样的新手也是觉得老...阅读全文
posted @ 2018-01-15 22:21 行者酱油君 阅读(144) 评论(2) 编辑
摘要: 吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。登高而招,臂非加长也,而见者远;顺风而呼,声非加疾也,而闻者彰。假舆马者,非利足也,而致千里;假舟楫者,非能水也,而绝江河。君子生非异也,善假于物也。-- 荀况 《劝学》Go 语言对于单元测试是很重视的,且不说其他的作者的背景啊,开源库啊,第三方的支持之类的,有两点让我对 Go 语言关于单元测试的重视程度的有信心的点在于:Go 语言...阅读全文
posted @ 2018-01-08 09:29 行者酱油君 阅读(250) 评论(0) 编辑
摘要: 我觉得以前在我开发程序的时候,除了文档,可能单元测试是另外一个让我希望别人都写,但是自己又一点都不想写的东西。但是,随着开发程序的增多,以及自己对 Bug 的修改的增多,我发现,UT 在很大程度上是对我有利的,虽然带来的结果就是可能我的 Dev 时间会增加 20-40% 左右,但是,相比较于一段时间之后突然冒出来一个 Bug,让你摸不着头脑;或者说突然一个接一个的 Bug 在你转测试之后提过来,写...阅读全文
posted @ 2017-12-23 15:20 行者酱油君 阅读(226) 评论(3) 编辑
摘要: 最近看了不少代码,也写了不少代码,所以在看和写之间发现了很多的问题,真的是很多,至少从我的认识来看,有几个地方有很大的改进空间,这里不准备把所有的问题都列举出来,所以就先挑选一个比较明显得来和大家聊聊。回顾流行开源项目的成功,除了功能上的刚需之外,文档也是必不可少的一个环节,没有良好文档的开源项目几乎不可能说是流行的,因为很少人会因为你说了一句使用我的项目就可以怎么怎么样就傻不溜秋得用你的。从我以...阅读全文
posted @ 2017-12-16 13:20 行者酱油君 阅读(37) 评论(0) 编辑
摘要: 在前面几篇解析中,我们已经看过了 Worker 是如何运行的,Task 是如何创建的,以及怎么被路由到 Worker 中,除了这些之外,我们还对流量限制,Worker 控制和 Task/Worker 产生和处理 Event 进行了介绍。但这却不是全部,今天我将继续和大家一起来看看 Celery 的 Task Result 和 State 相关的内容。Task State在 celery/celer...阅读全文
posted @ 2017-11-23 22:00 行者酱油君 阅读(324) 评论(0) 编辑
摘要: 前面对于 Celery 的分布式处理已经做了一些介绍,例如第五章的 远程控制 和第六章的 Event机制,但是,我认为这些分布式都比较简单,并没有体现出多实例之间的协同作用,所以,今天就来点更加复杂的,对于多实例直接的交互更多,这就是 Gossip 和 Mingle。Mingle在 Celery 的介绍中,Mingle 主要用在启动或者重启的时候,它会和其他的 worker 交互,从而进行同步。同...阅读全文
posted @ 2017-11-22 22:03 行者酱油君 阅读(249) 评论(0) 编辑
摘要: 在 Celery 中,除了远程控制之外,还有一个元素可以让我们对分布式中的任务的状态有所掌控,而且从实际意义上来说,这个元素对 Celery 更为重要,这就是在本文中将要说到的 Event。在 Celery 中,注册了很多的 Event,这些 Event 将会在 Task/Worker 的状态发生变化的时候被发出,然后被绑定的 Event 消费者(Receiver)所接受,绑定的 Event 消费...阅读全文
posted @ 2017-11-21 22:34 行者酱油君 阅读(387) 评论(0) 编辑
摘要: 今天要聊的话题可能被大家关注得不过,但是对于 Celery 来说确实很有用的功能,曾经我在工作中遇到这类情况,就是我们将所有的任务都放在同一个队列里面,然后有一天突然某个同学的代码写得不对,导致大量的耗时任务被同时塞进了消息队列里面,这就悲剧了,这直接导致了其他服务长时间不可用,例如发送登录短信验证阅读全文
posted @ 2017-11-16 22:39 行者酱油君 阅读(2973) 评论(2) 编辑
摘要: 在系列中的第二篇我们已经看过了 Celery 中的执行引擎是如何执行任务的,并且在第三篇中也介绍了任务的对象,但是,目前我们看到的都是被动的任务执行,也就是说目前执行的任务都是第三方调用发送过来的。可能你会有点奇怪,难道除了第三方调用发送,还有其他的调用发送方?是的,Celery 自身也会发送任务,在本文中,你将看到 Celery 如何利用自身的定时机制运行我们设置得定时任务,并且交给 Worke...阅读全文
posted @ 2017-11-14 21:37 行者酱油君 阅读(653) 评论(0) 编辑
摘要: Task 的实现在 Celery 中你会发现有两处,一处位于 celery/app/task.py,这是第一个;第二个位于 celery/task/base.py 中,这是第二个。他们之间是有关系的,你可以认为第一个是对外暴露的接口,而第二个是具体的实现!所以,我们由简入繁,先来看看对外的接口: 其阅读全文
posted @ 2017-11-13 21:06 行者酱油君 阅读(669) 评论(0) 编辑