Cock Sucker Sucker Sucker

memcached : N.S.thoughts Bem Cocksuckerchamp Szh Lt Games 14943 Mr Golden Goes Choccie Mad Sex Slave Cock Sucker Chapm

Bem Cocksuckerchamp Szh Lt Games 14943 Mr Golden Goes Choccie Mad Sex Slave Cock Sucker Chapm

redist 当初测试时缺乏我需要的api。不过目前已经有了PHP PECL版本的api。 redist的复制机制现在也有了很大的改进。redist的应用实例不多。但是,我认为它和mongoDb一样,值得持续关注。

flare 则是最后选择的。经过测试,虽然速度上没有其他那么快,但其良好的扩展能力让我非常满意。此外,对于memcached协议的兼容性也做的很好。
还有1个特性,flare的key可以超过256bytes,而value可以超过1mb。 传统memcached由于内存分配策略因此有上述限制。
flare的底层存储是可以扩展的,目前使用的是tc(tokyo cabinet)。
从这个结构上看,倒是一个tt的很好替代品。

flare的运行性能还是不错,目前在GREE中得到实际应用,摘自项目网站描述:

Flare is running at GREE (one of the major SNS services in Japan) w/ 6 masters and 6 slaves (over 2,000M keys), and 500-1,000 qps (load average is nearly 0.00…).

看起来很诱人。因为同样TT超过100M的key,性能会直线下降。plurk的lightclound通过多节点的负载均衡解决了这个问题。(btw,plurk.com目前是被和谐中,要想取得lightclound源码还需要穿墙,唉)

以下是在我的osx上进行的安装测试。

1. 首先下载源码

Top/OpenSource/Flare/Download-en.html

2. 使用port安装boost

$ port
install boost

3. 安装tc

4. 编译flare
tar zxvf flare-1.0.8.tgz
./configure –with-boost=/opt/local –prefix=/opt/flare
make install

flare编译后只有2个文件
flarei,flared
分别是index server和node server.
很清爽啊。

5.运行
flare sources下有一个etc目录,中间分别有index server, node server的配置。
可以直接复制到/opt/flare/etc
然后使用
flared –daemonize -f
flarei –daemonize -f

就可以跑起来了。

6.概念
Flare有几个概念,需要理解
index server
这是索引服务器,用于控制node server的状态
注意,client并不直接和index server进行交互。
node server
这是实际存储节点. node有3种role:
master/slave/proxy
master是主节点,slave是分流节点,用于同步复制master
proxy则将client的请求转发到当前合适的节点(包括master/slave)。
有的人不太理解为什么要用proxy,是否多此一举,而实际测试表明,
通过proxy转发的请求的确要比直接connect到实际节点速度差很多。
这是因为,flare是一个集群,其中的node server是可以动态添加,删除的。
当某个node down后,index server会检测到,并标志其state为down。
此外,master 支持partition,因此通过proxy节点,client无需处理这些复杂问题。
根据作者的建议, proxy node应该和client本地运行,这样可以减少多余的tcp请求。

下面是我写的一个脚本,用于搭建一个典型的测试场景:
1个index server
2个master node,启用partition
1个slave,启用balance

由于flare把ip:port作为一个node,因此只需要1个ip,不同的port就可以快速实现测试需要的环境。

$./start_flare.sh
#启动index server,监听 127.0.0.1:12120
flarei –daemonize -f /opt/flare/etc/flarei.conf
#proxy
flared –daemonize –data-dir /opt/flare/var/data/d0 –index-server-name 127.0.0.1 –index-server-port 12120 –server-name 127.0.0.1 –server-port 12121
#master1 node
flared –daemonize –data-dir /opt/flare/var/data/d1 –index-server-name 127.0.0.1 –index-server-port 12120 –server-name 127.0.0.1 –server-port 12122
#slave node
#flared –daemonize –data-dir /opt/flare/var/data/d2 –index-server-name 127.0.0.1 –index-server-port 12120 –server-name 127.0.0.1 –server-port 12123
#master2
#flared –daemonize –data-dir /opt/flare/var/data/d3 –index-server-name 127.0.0.1 –index-server-port 12120 –server-name 127.0.0.1 –server-port 12124
echo “waiting dameon startup…”
sleep 3
echo “set nodes role….”

# 当某个node加入时,默认是proxy role,因此需要修改这些role
# 通过telnet到index server,可以执行这些命令,我们在脚本中可以使用
# nc来自动执行

# node role的命令格式:
# node role server port master|slave|proxy balance partiion

echo “node role 127.0.0.1 12122 master 1 0″|nc 127.0.0.1 12120
# 设置为slave, balance 为2,给于2倍read权重
echo “node role 127.0.0.1 12123 slave 2 0″|nc 127.0.0.1 12120
# 第2个master node,将partition设置为1,表明这是第2个partion,允许
#将部分数据从原来的master 同步过来
echo “node role 127.0.0.1 12124 master 1 1″|nc 127.0.0.1 12120
sleep 2
echo “stats nodes”|nc 127.0.0.1 12120

STAT 127.0.0.1:12121:role proxy
STAT 127.0.0.1:12121:state down
STAT 127.0.0.1:12121:partition -1
STAT 127.0.0.1:12121:balance 0
STAT 127.0.0.1:12121:thread_type 16
STAT 127.0.0.1:12122:role master
STAT 127.0.0.1:12122:state down
STAT 127.0.0.1:12122:partition 0
STAT 127.0.0.1:12122:balance 1
STAT 127.0.0.1:12122:thread_type 17
STAT 127.0.0.1:12123:role slave
STAT 127.0.0.1:12123:state prepare s memcached : N.S.thoughts Bem Cocksuckerchamp Szh Lt Games 14943 Mr Golden Goes Choccie Mad Sex Slave Cock Sucker Chapmc Sex u memcached : N.S.thoughts Bem Cocksuckerchamp Szh Lt Games 14943 Mr Golden Goes Choccie Mad Sex Slave Cock Sucker Chapmg Sucker n Cock Sex