久旱逢甘雨----读《国家》有感

读完《易中天中华史之国家》,真有一种久旱逢甘雨的畅快之感。

历史书本来可以用三类来概括的,正史、野史和人教版课本。前两者历史久远,最后一个实在臭名昭著,从小学、初中、高中、大学、研究生,都只在说一件事情:没我哪有你。

但是现在,又有一类历史类书籍异常火爆,就是借历史上的一些故事来讲如何混社会。这种书我是绝不敢在公共场合下看的,怕我憨厚木讷的脸上突然多了四个字:老奸巨猾。

正儿八斤的历史类著作,读过吕思勉先生的《中国通史》和斯塔夫里阿诺斯的《全球通史》等。但这些书在读的时候总有一种中国与世界割裂开来的感觉,单纯的中国历史书籍自然不说,世界史类书籍也是如此。

sort命令中-k、-t选项的用法

需求:

假设有个result_test_upload.log的文件,里面存放着一些FastDFS系统中的fileid。文本内容如下:

group1/M00/04/08/wKhwglHq1rqAYO2oAAAoAChSBpE0502682  
group2/M00/05/06/wKhwglHq2CGAIs8AAAAoAChSBpE9287977  
......(略)......  

如何统计出分配到每个group的文件的总和并将其按group1,group2,group3的顺序列出来,以方便观察是否所有的fileid均匀的分配到FastDFS的group中?

方法:

cat result_test_upload.log  | grep -o group[0-9][0-9]*  | sort -n -t p -k 2| uniq -c  

其中,grep -o group-0-9][0-9].*已经把每个group名截取出来了,sort -t p 表示以p为分隔,-k 2 表示按以p为分隔的第二个域来排序,也就是group1,group2,group3…中的1,2,3. sort -n很简单,表示按照group1,group2,group3…groupn的顺序排列。

bash下如何实现perl中seek的功能?

因为日志处理需要,接触到perl,虽然还未入门,但通过几个函数就可以发现其在文本处理上的威力确实名不虚传,更不用提正则表达式了。

假设有这样的应用场景:客户通过ftp客户端上传文件到接入端ftp服务器,接入端ftp服务器作为分布式存储系统的客户端,再将这些文件存入到后面的分布式存储服务器中。这个接入端ftp服务器要做的工作就是定时分析ftp server(假设是vsftpd,则日志为xferlog)的日志来获取客户上传的文件,再对这些文件做后续处理。客户上传时随时进行的,xferlog的记录条数也随之增长。

perl中通过seek函数可以很方便的做到,每一次脚本执行时,都将上一次脚本执行时xferlog的大小作为本次读操作的偏移量,用这个偏移量来调用seek,本次处理完后再将该偏移量更新后存入到一个文件供下次脚本执行时读取。

再不判断异常分支就剁手

一两个月前刚进新公司时,正逢部门内部搞技术交流,每人轮流给部门其他人做一次自己擅长的技术培训。部门内几个老员工,有讲nginx模块开发的,有讲视频编解码的,也有讲分布式存储系统的。由于我刚入行,对公司业务完全不熟,无奈之下,索性说我就讲讲shell编程吧。于是花了一天时间写了个十几页的PPT,其中强调了脚本中对异常分支判断的重要性。脚本不是命令行的堆积,在交互模式下,一个命令的执行成功与否一目了然,根据这个结果我们会很自然的执行相应的命令;可是在脚本中,就不能这么想当然了,最简单的就是,cd到一个目录,该目录是否存在?

可是今天还是犯了一个这样的错误。

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

背景描述

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

分工明确化

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

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

关于重试

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