Ring Buffer 和 Memory Poll

那天看到微博上看到讨论如何设计网络程序BufferLink。其中@简悦风云 给出个使用Ring Buffer的思路同时也顺带着嘲讽了一下C++和STL(链接),结果引出混战。本文不关心事件,纯粹讨论其中的两个技术点——RingBuffer和Memory Poll。 两者都是内存管理中比较常用的技术。我们知道C语言中使用malloc/free库函数来申请/释放内存,C++中对应的是new/delete,终归也是调用malloc/free。有些程序会非常频繁的申请/释放内存,这就导致内存碎片的产生,进而引起性能下降甚至内存分配失败。像Memcached这种内存kv数据库为了解决这种问题都是在应用层自己又实现了一套内存管理模块 »

MacOS Lion安装Apache+MySQL+PHP的一些坑

吐槽文。MacOS中默认是安装了Apache和PHP的,Lion中Apache版本是2.2.20。开启的办法是将“系统偏好设置->共享->Web共享”前边的checkbox选中即可。安装MySQL可以直接去官网下载DMG包安装。PHP同样在MacOS中内置了,Lion中的版本是5.3.6。具体的安装办法可以参考下边的链接。本文主要记录一些安装中出现的异常及解决办法。 安装mcryt扩展 系统中默认的PHP是没有安装这个扩展的。但是如果你要使用PHPMyAdmin来管理数据库的话,就需要手动安装。吐槽一下,相比Linux,在MacOS里给PHP安装扩展实在是比较麻烦。不仅要手动编译libmcrypt库,还要下载与当前系统版本对应的PHP源码 »

BookKeeper And Hedwig

周五去Hadoop in China 2011打酱油,下午听了一场来自Yahoo!巴塞罗那研究院科学家Flavio Junqueira先生的演讲。他演讲的主题是《Apache BookKeeper: High-performance reliable write-ahead logging》,主要是介绍了一种高可靠日志记录存储系统也就是BookKeeper(BookKeeper is a system to reliably log streams of records)。 开发Bookkeeper最初是源于这样一个问题 »

复杂的Vector Clcok

之前一篇文章简单介绍了使用Vector Clock解决消息副本不一致问题的方法。虽然文章题目叫做“简单的Vector Clock”,但是说的都是从使用者角度看的,对于使用者而言确实比较简单。所以如果系统中提供了这个机制,那不妨就直接用好了。现在我们换个角度来看这个机制,从实现者角度来看,恐怕这个系统就不是那么容易了。 从实现者角度来看,其中最难的两个问题是:1)确定谁作为消息更新的Actor(actor,在vclock中有自己独立的域,同时负责版本解析和递增);2)保证vclock能过随着时间延续,无限地递增。 在上一篇文章所用的例子中,将提出对消息修改的客户端(即Alice等人)当做vclock中的actor »

简单的Vector Clock

上一篇文章中说过Dynamo为了解决数据一致性问题使用了Vector Clock。基本思想就是对同一份数据的每一次修改都加上<修改者,版本号>的标签。在搜索相关资料的时候发现了另一个有意思的项目,Riak。Riak可以说是一个类Dynamo的Erlang实现,更多相关介绍可以参考下边链接。本文来自Riak主页上的一篇blog,简单介绍Vector Clock以及在Riak中的使用。虽然名为“简单的Vector Click”,仅仅是介绍的简单。后续还有一篇“复杂的Vector Click” Vector clock确实很简单,以至于你第一次见到它时甚至不确定能不能给你带来好处。不过只要你认真遵循vector clock的几条准则 »