超简单的分布式任务实现

为什么不用hadoop
我们目前的数据大多是时间序列并且有状态的数据,数据体积也在10个g以上,由于时间序列的关系,必须将某一类的数据按照时间顺序严格的绑定在一个map上。并且我们想我们的消费程序完全不需要改造来支持hadoop的map reduce模式。

要求:

  • 消费者对上游无感。
  • 支持水平扩展。
  • 系统本身耗能(cpu,memory)低。
    实现:
    redis用来做任务中心。(rpop弹出任务)
    linux fifo来控制单机最大并发数
    下游程序以stdin管道的模式注入数据
    消费者生成的数据落文件,采用ssh远程执行命令加cat的方式进行汇总。
#!/bin/sh
tmp_fifofile="/tmp/$$.fifo"
mkfifo $tmp_fifofile
exec 6<>$tmp_fifofile
rm -f $tmp_fifofile
key=$1
thread=$2
for ((i=0;i<$thread;i++));
do
    echo >&6
done
while true;do
  cmd=$(redis-cli -h xxxxx --raw rpop $key)
  if [ -n "$cmd" ];then
      read -u6
      {
        echo $cmd
        echo $cmd | sh
        echo >&6
      } &
  else
    break
  fi
done
wait
exec 6>&-
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容