参考资料:http://treode.github.io/store/ 官方网站

实际测试环境:3台有公网IP的服务器,一台阿里云,另两台公司内部

1host IP地址 IP1
java -jar server.jar -init -serve -host 0xF47F4AA7602F3857 -cell 0x3B69376FF6CE2141 store.db
2host IP地址 IP2
java -jar server.jar -init -serve \
    -com.twitter.finatra.config.port :7071 \
    -com.twitter.finatra.config.adminPort :9991 \
    -host 0x4A348994B2B21DA3 \
    -cell 0x3B69376FF6CE2141 \
    -port 6279 \
    -hail 0xF47F4AA7602F3857=IP1:6278 \
    store2.db
3host 未使用   
java -jar server.jar -init -serve \
    -com.twitter.finatra.config.port :7072 \
    -com.twitter.finatra.config.adminPort :9992 \
    -host 0x4FC3013EE2AE1737 \
    -cell 0x3B69376FF6CE2141 \
    -port 6280 \
    -hail 0xF47F4AA7602F3857=IP1:6278 \
    store3.db    
    
这时进行数据操作都是会直接返回500错误的,因为未将服务器编组,谁也不知道由谁来进行操作,即服务器启动是没有主次之分的.虽然有先后的区别
    
编组
curl -i -w'\n' -XPUT -d@- \
    -H'content-type: application/json' \
    http://IP1:7070/atlas << EOF
[ {"hosts": ["0xF47F4AA7602F3857"] } ]
EOF

给一台机器插入数据
curl -w'\n' -i -XPUT \
    -H'content-type: application/json' \
    -d'{"v":"antelope"}' \
    http://IP1:7070/table/0x1?key=apple

另一台机器也可以查询到    
curl -w'\n' -i http://IP1:7070/table/0x1?key=apple

搞定

将三台服务器都设置进来.
curl -w'\n' -i -XPUT -d@- \
    -H'content-type: application/json' \
    http://IP1:7070/atlas << EOF
[ { "hosts": ["0xF47F4AA7602F3857", "0x4A348994B2B21DA3", "0x4FC3013EE2AE1737"] } ]
EOF



给机器2插入数据
curl -w'\n' -i -XPUT \
    -H'content-type: application/json' \
    -d'{"v1":"antelope"}' \
    http://IP2:7071/table/0x1?key=apple1

另一台机器也可以查询到    
curl -w'\n' -i http://IP1:7070/table/0x1?key=apple1

这时关掉机器1上的程序
给机器2插入数据,两台机器时就访问不了了,500错误 报超时
curl -w'\n' -i -XPUT \
    -H'content-type: application/json' \
    -d'{"v2":"antelope"}' \
    http://IP2:7071/table/0x1?key=apple2

重新启动机器1,机器2应用
给机器1插入数据
curl -w'\n' -i -XPUT \
    -H'content-type: application/json' \
    -d'{"v3":"antelope"}' \
    http://IP1:7070/table/0x1?key=apple3

另一台机器也可以查询到    
curl -w'\n' -i http://IP2:7071/table/0x1?key=apple3

关掉机器2上的应用
给机器1插入数据
curl -w'\n' -i -XPUT \
    -H'content-type: application/json' \
    -d'{"v4":"antelope"}' \
    http://IP2:7071/table/0x1?key=apple4

查询不到,看样子需要启动机器3测试   
curl -w'\n' -i http://IP2:7071/table/0x1?key=apple4


给机器1插入数据
curl -w'\n' -i -XPUT \
    -H'content-type: application/json' \
    -d'{"v5":"antelope"}' \
    http://IP1:7070/table/0x1?key=apple5

另一台机器也可以查询到    
curl -w'\n' -i http://IP1:7072/table/0x1?key=apple5
curl -w'\n' -i http://IP2:7071/table/0x1?key=apple5

关掉机器2
机器1,机器3仍然能查询到数据
curl -w'\n' -i http://IP1:7072/table/0x1?key=apple5
curl -w'\n' -i http://IP1:7070/table/0x1?key=apple5

给机器插入数据,以验证服务器的断线数据同步
curl -w'\n' -i -XPUT \
    -H'content-type: application/json' \
    -d'{"v6":"antelope"}' \
    http://IP1:7070/table/0x1?key=apple6


curl -w'\n' -i http://IP1:7072/table/0x1?key=apple6
机器2启动后进行查询,可以看到数据是同步的.
curl -w'\n' -i http://IP2:7071/table/0x1?key=apple6

 

总结

1 安全性接口缺失,从目前的接口来看,没看到安全性控制类接口,全凭key就可以获取.商业化运行必须考虑这些.
2 数据访问类接口,可用,但读写速度并不均衡,在2MS~5000MS(最高值有可能受网络状况影响)
3 设备,主机操作类接口基本可用
4 对主机依赖性较大,且正常模式必须保持一主一备的模式运行.其余备机断线基本不受影响,
  主机断线备机则无法再提供服务,即使主机重启也不行,说明主备模式切换有可能存在问题