每一个可以努力的日子,都是一份厚礼。
分布式
新浪云商店试用评测(附邀请码链接)
2012 7月 15th
使用Amazon云系统保障存储一致性
2011 5月 20th
背景:Data Provenance
在CS学术领域有个术语叫做Data Provenance,有人翻译为“数据世系”。实际上,就是一个文件的meta data,属性信息。只不过这里的属性记录得更加详细,颇有些log的意味。简单来说,就是“谁创建了它”、“谁对它做了什么修改”、“数据流传输到了哪里”等等一系列记录。在我们的数据出现异常的时候,数据世系能帮助我们追溯根源,在程序debug、核实取证以及数据恢复上也都有着巨大用途。
例如,在电信网络流量管理中,一些异常检测工具能够及时的发现网络流量中的异常,但是这些工具并不能检测出是什么原因导致的异常,异常发生在哪里?如果系统能够追踪流数据的世系,那么用户可以确定数据演化过程以及产生异常的原始流,定位并确定异常产生的原因。 更多 >
计算圆周率Approximating Pi – Map Reduce Program
2011 4月 11th
MapReduce主要应用于大规模数据处理,特别是在搜索引擎中各种链接的访问统计,进而影响到页面关键词排名等等。今天这个例子却是讲的利用MapReduce来对圆周率Pi进行近似计算。考虑下面这张图:
我们知道,正方形的面积 As = (2r)2 也就是 4r2. 内嵌圆形的面积 Ac = pi * r2. 于是 更多 >
大型网站的后端架构设计
2011 4月 7th
对于像我这样的小博客网站来说,日访问量仅百余,找个普通的主机托管完全可以满足需要,实在是不必过多考虑后端的问题。然而,腾讯网易这样的门户网站、淘宝这样的购物交易网站、人人网新浪微博等主要流行的社交网络应用,则不得不运用多种技术设计后端架构,才能支撑起百万甚至上亿级别的访问。
这里我在一个high level例举我所了解到的提升服务性能的相关技术,其中的每一项都可以展开讨论,有空我会专门详细整理一下和大家探讨。 更多 >
学习MapReduce分布式程序设计方法
2011 2月 9th
MapReduce是Google提出的一个编程框架,用于大规模海量数据处理,其主要思想就是分治(divide and conquer)。我们希望程序有并行处理能力,于是就可以使用多台机器同时处理加快速度。
然而,怎样分派任务给不同的计算机?如果任务单元的数量大于可执行任务的计算机的数量怎么办?计算需要使用到一些中间结果怎样处理?如果某些计算机在处理任务时中途死掉了呢?怎样才能知道任务已经处理完毕?问题主要来自于任务处理节点的交流(比如状态信息),以及对共享资源(数据)的访问。要解决这些棘手的问题,我们需要有一套完整的同步机制:同步锁信号量、条件变量(等待、通告、广播)等等。
现有的一些编程模型有共享内存(pthread)、消息传递(MPI)等,架构的设计模式有主从式(Master-Slaves)、生产者消费者流式(Producer-consumer flows)等。Map Reduce结合了函数式编程语言的思想,使用key-value对作为输入和输出。开发者只需要实现map(key, value)和reduce(key, value)两个功能。map()会产生中间结果作为输出,而这正是reduce()的输入。中间结果经过reduce()产生最终结果。类似以下模型:
map (in_key, in_value) ->
(out_key, intermediate_value) listreduce (out_key, intermediate_value list) ->
out_value list
具体的原理可以参看Google发表的关于MapReduce的论文。从应用开发的角度,本站的MapReduce分类下有一些python示例,可以作为初步入门学习。最简单的方法就是利用管道来进行代码测试,例如: 更多 >
反向索引Inverted Index – Map Reduce Program
2011 1月 4th
Inverted Index (反向索引)是搜索引擎需要做的一件经常性工作。在Google提出Map Reduce分布式编程框架中,这是一件很容易完成的事情。下面就是一个python写的示例。 更多 >
单词统计Word Count – Map Reduce Program
2011 1月 4th
在学习Map Reduce方法时,Word Count(单词统计)程序是最基础的入门训练。不同的写法会有不同的执行效率,下面是用python写的一个示例。 更多 >