Node.js+HDFS开发的简易网盘

最近研究了HDFS的相关内容,基于WebHDFS REST APIHadoop-1.1.2版)制作了一个了简易的网盘。实现了账号注册,文件的上传、下载、删除等功能。由于基于Hadoop,参考Dropbox的命名,将其名字定为Doopbox。项目地址:https://github.com/xushvai/Doopbox

业务/应用服务(调用HDFS服务的服务)使用node.js+Express开发。

数据库中只有一个account表 ...


Tcpdump与Wireshark的渊源

1988年春,Steve McCanne在加州大学伯克利分校修完了计算机科学中的编译器课程,当时负责授课的是来自劳伦斯伯克利国家实验室的教授Van Jacobson,这个课程主要讨论了标准编译器的工作原理,包括:词法分析,语法分析,目标代码生成,程序优化等主题。学期末,Steve获得了Van研究小组的暑期实习机会。

不久之后,Steve便成为了由Van领导的“网络研究小组”的正式科研人员。在Steve刚加入这个网络研究小组的时候,Van正致力于TCP拥塞控制方面的研究,他对ARPANET频繁崩溃的机理做出了合理推测,为彻底查明问题,实施有效修复,他需要一个可靠的网络分析工具来进行分析和研究。

起初,Van用的是SunOS平台上的网络分析工具:etherfind,然而,其表现却不尽如人意,复杂的命令格式,令人困惑的协议解析,糟糕的性能,总之,你无法准确高效地看到自己想要的东西,尤其是当LAN中存在大量广播数据包的时候。

在这种情况下,研究工作无法展开,于是,Van放弃了etherfind,进而开发了全新的工具,叫做tcpdump,初期的tcpdump参考了etherfind的部分代码,为避免版权纠纷,Steve ...


集群小结

原本互不相关的n(n > 1)台计算机,以某种方式被组织起来,协同地去完成一些任务,这一“组”机器即为一个集群。

LB(Load Balancing)集群:负载均衡集群

当用单台机器对外提供服务时,随着客户量的不断增加,其所具备的资源将有可能无法满足客户的需求。一旦大量客户并发地请求服务,后端的计算,存储,网络等资源将会吃紧。这种情况下,对客户的服务质量将大大下降(响应变慢),或者根本无法再为用户提供服务。

要解决这个问题,努力方向主要有两个:一是为这台机器增加资源(或换机器),让它变得更强大;二是增加更多的机器,组织成集群,来分担压力。第一种方法叫”scale on”,即:向上扩展,着眼于机器本身,在垂直方向上做文章;第二是”scale out”,即:向外扩展,自己不变,多找几个帮手。

scale on是容易想到的做法 ...


lobby game后端架构

大厅是供用户选择游戏对象的场所。图中是大厅的基本形式,左侧的目录树有三个层级:游戏(game)、分区(zone)和房间(room)。每款游戏都会基于某些规则来划分zone和room 。游戏的基本单元是游戏桌,即图中右侧的那些table,当table上“积攒”的玩家数满足要求时,该table上的游戏即可开始。

若要搭建一个大厅系统,后端应该具备一个负责客户登陆的loginsvrd,一个主管各游戏服的lobbysvrd,一个用于访问数据库的dbsvrd ...


逐步实现TCP服务端Step06-1:Libevent

Libevent是基于C语言开发的高性能开源通信库。Libevent是Reactor模式的一个实例。Reactor是一种事件处理模型,其基本形式: 其中,Reactor为核心部分,它是使用者启用Reactor机制的入口。EventDemultiplexer是事件分离器,Reactor使用它来监测事件的发生。Processor是事件处理器,它用于处理,或者说响应某个特定的事件。ConcreteProcessor的存在是为了方便模式使用者定制事件处理逻辑。Reactor、EventDemultiplexer和Processor三者基于句柄(Handle)建立关联,比如socket文件描述符 ...


逐步实现TCP服务端Step06:使用轮子

这一系列从零开始实现了一个处理简单业务(echo)的服务端,现实当中不太可能一切从头开发。所谓的服务端开发,更多地是去实现业务逻辑。务实的做法是使用成熟的“部件”快速搭建基础设施,然后专心开发业务。

一个后台系统可粗略地分为三个单元:通信单元、业务单元和存储单元。三者的作用从名字即可看出。前面的大多数篇幅,实际上都是在讨论通信单元的实现。由于不关注具体的业务,与业务单元有关的讨论几乎没有。至于存储单元,上篇讨论了dbsvrd与MySQL,其具体实现见antframe项目。

下面讨论一下 ...