谈谈云环境下的软件开发

技术趋势上,传统的IDC架构迟早要走向虚拟IDC。每个公司、每个部门、甚至每个项目组都有自己的虚拟IDC,可以对IDC的计算资源、网络、存储、安全、甚至空调电力进行自我调控。目前流行的各类云是虚拟IDC的重要实现。

继续阅读

发表在 Common | 标签为 , | 一条评论

Heroku黑客指南(一)

为何使用Heroku

(一)简单

在所有云解决方案中,Heroku最简单。Heroku基于Unix philosophy原则构建,它意味着你只需要做一件事,并且把它做好。部署应用到Heroku,你只需将你的git repo推送到他们的服务器,应用立刻就部署好并运行了。

需要更多的功能组件,比如数据库、缓存服务器、K/V存储?没问题,你可以自己创建它们并绑定到应用。

因为Heroku够简单、够现代,你无需花费时间处理架构、高可用、部署等问题,把时间花在代码上吧。

继续阅读

发表在 Common | 标签为 , | 一条评论

电邮反垃圾方法

【注】这篇文档是好些年前写的,现在反垃圾都往人工智能方向走,传统的一些技术已经过时了。

  • RBL:实时黑名单,包括诸如IP黑名单、URL黑名单,常用的有Spamhaus、Spamcop、Sorbs、NJABL等。
  • SPF:检查发送者IP是否在发送域的授权网络范围内,本博其他文档有提及
  • 频率控制:限制发送频率,单纯根据发送频率进行流控是愚昧做法,QQ邮箱多这样干。
  • 信誉系统(reputation):对Sender的IP或domain建立信誉评分机制。
  • DomainKey:采用数字签名对发送域进行验证。
  • 灰名单(greylist):对可疑邮件返回临时失败,拒绝对方一段时间。
  • 指纹(fingerprint):对垃圾邮件建立指纹样本库。
  • 蜜罐(honeypot):设立蜜罐邮箱,用来采集垃圾邮件样本。
  • 贝叶斯(Bayes):对邮件内容进行分词和采用Bayes算法进行概率统计。
  • 关键字:内容关键字过滤。
  • 渐进式规则评分系统(启发式过滤):SpamAssassin
  • 基于上下文的系统:对邮件内容、邮件组织方式、发送者信誉进行关联统计,如IronPot
  • 基于行为分析的系统:从垃圾邮件起源的全球地理位置角度统计垃圾邮件行为和特征,如CommTouch

通常是各个技术措施综合起来对垃圾邮件进行识别和过滤。例如基于规则的反垃圾方法,可以准确的识别已知垃圾邮件,但对于新出现的垃圾邮件则无能为力。而基于统计的方法(如Bayes),则可以较准确的预防新垃圾邮件。还有基于内容的方法(如关键字)与基于行为的方法结合起来,才能发挥更好的效果。

发表在 Common | 标签为 , | 电邮反垃圾方法已关闭评论

dns.watch公共DNS服务

话说最近公共DNS解析服务出现挺多的,除了老牌的google DNS, open DNS, 国内的114DNS外,还有alidns, onedns都提供了类似服务。今天又发现一个逆天域名dns.watch, 也提供同样的公众DNS解析服务。

它的2个DNS服务器地址是:

  • 84.200.69.80
  • 84.200.70.40

服务器位于欧洲,试了下查询挺慢的,国外的同学可以一试。他们侧重点应该在DNS安全解析

第一次知道.watch这个后缀,看了下是由澳洲的Aridns负责权威解析的。

watch. 86400 IN NS demand.beta.aridns.net.au.
watch. 86400 IN NS demand.gamma.aridns.net.au.
watch. 86400 IN NS demand.delta.aridns.net.au.
watch. 86400 IN NS demand.alpha.aridns.net.au.

按照ICANN新政,新的域名后缀层出不穷,要适应起来还真不容易。

发表在 Common | 标签为 , | dns.watch公共DNS服务已关闭评论

Nginx执行CGI

Nginx是个事件驱动的服务程序,非fork类型,并不适合直接执行CGI,关于这方面我之前写过一篇文档。Nginx可以通过fastcgi方式执行CGI程序,简单说,Nginx只是一个反向代理,它通过socket与fastcgi守护程序通信,在用户请求和fastcgi响应结果之间执行转发。

fastcgi有自己的标准,如果每个CGI脚本都改成fastcgi,不是一件容易的事。不过可以通过fastcgi wrapper来执行普通CGI程序。fastcgi wrapper是个守护进程,通过Unix socket或TCP socket与Nginx进行通信。我们首先需要这个fastcgi wrapper。随便找了下,网上有2处提供:

前者提供Unix socket的wrapper,后者提供TCP socket的wrapper,两者都是Perl实现。经实际测试,前者有bug,运行异常。Linode提供的这个可以正常工作。

继续阅读

发表在 Common | 标签为 , , , | Nginx执行CGI已关闭评论

git处理不同步的logs目录

开发了某个app,提交到git,然后另一台机clone了这个app。这个app里有个logs目录,里面是access.log等日志。在生产环境里,两台机产生的logs肯定不一致。这样在一台机push代码后,在另一台机执行pull肯定不成功,提示:

error: Your local changes to the following files would be overwritten by merge:
APP/logs/access.log
Please, commit your changes or stash them before you can merge.

因为我并不想commit这个机的日志,于是执行了git stash。git stash将当前工作区的内容放入存档,并将工作区恢复到上次commit的内容,此时可以执行git pull了。git stash list查看历史的stash存档,git stash clear清掉所有存档。

继续阅读

发表在 Common | 标签为 , | git处理不同步的logs目录已关闭评论

十年踪迹十年心

前天傍晚,回到家里小区时,天色未全暗,尚有微光。正值农历6月15,一轮皓月当空,冰轮初转光晕含羞。刚下过雨,云朵重重叠叠,蘸水欲滴。天空覆盖大海,上下蓝的纯净。楼里华灯初上,月下树影婆娑。用手机拍下这张照片,记录一时光影。

行云有影

此情此景,让我想起吴文英的名句:落絮无声春坠泪,行云有影月含羞。

对比之下,更触动灵魂深处的,是纳兰容若的小令虞美人:

回廊一寸相思地,落月成孤倚。
背灯和月就花阴,已是十年踪迹十年心。

是啊,一晃十年过去,然此情此景却萦绕心头,何以为忘。

发表在 Common | 标签为 , | 十年踪迹十年心已关闭评论

再次吐槽QQ邮箱

如果要我评价QQMail,从技术上讲,我认为四个字最合适:乱搞一通。很早前就吐槽过QQ邮箱的MX设置,详见这篇。今天碰到一个更无语的问题。我们的MTA服务器,竟然发送不到QQ邮箱。如下是发信过程记录:

qqmail

继续阅读

发表在 Common | 标签为 , | 再次吐槽QQ邮箱已关闭评论

Ceph性能测试二

上一篇blog里,简单测试了下本地硬盘和分布式块存储的性能,从数据表现看分布式存储的IO吞吐能力大概是本地硬盘的1/7。正好邮件列表上有个同学也做了测试,内容如下:

继续阅读

发表在 Common | 标签为 , | 一条评论

Ceph简单的性能测试

部署了2个node的ceph,一个是server端,一个是client端。对分布式block storage简单测了下,性能不咋地。前提是2台都是普通PC机,硬盘IO性能本身一般。另外内网是百兆,这个应该影响不大,因为在server端看到带宽并没跑满。

在ceph block storage目录dd测试结果:

$ dd if=/dev/zero of=test.file bs=16k count=64k
65536+0 records in
65536+0 records out
1073741824 bytes (1.1 GB) copied, 106.087 s, 10.1 MB/s

$ dd if=/dev/zero of=test.file bs=16k count=64k conv=fdatasync
65536+0 records in
65536+0 records out
1073741824 bytes (1.1 GB) copied, 216.598 s, 5.0 MB/s

上述显示,分布式存储的写入性能是10MB/s,加了硬件同步参数后是5MB/s.

继续阅读

发表在 Common | 标签为 , | 2条评论