2013年6月

好的设计真是一念之间吗?

背景描述

近几年redis应用的越来越多,正好现在手上的一个项目就用到了。简化一下需求,就是要实现一个worker程序,该程序所有的工作就是去redis中的一个任务链表tasklist里面去取任务,执行一些处理操作。

分工明确化

从始至终我们持有的一个观点就是,这个worker的功能要极度简化,就是去从tasklist中取任务,执行操作,并根据任务执行成功与否进行相关的结果记录。至于这个tasklist怎么来的,里面的任务是由谁来插入,worker一概不管。这样的话,有几个好处:

  • worker的角色明确,目标清晰。直接的好处就是代码容易编写。
  • 设计思想比较通用
  • tasklist的插入在不同的场景下有不同的方式,最常见的是根据某个不断增长的log中取任务,插入任务。而这个工作很灵活,通过脚本语言更方便实现。

关于重试

worker从tasklist中领取到一个任务来后,就开始执行相关的操作。如果一切顺利,就万事大吉。但在软件设计中,考虑异常情况几乎已经是广大码农们本能的反应了。不是我们天生心思缜密,而是这些都是通过一些惨痛的教训得来的。关于这个异常处理,在这里多说两句,讲一个亲身经历的例子:

- 阅读剩余部分 -