参考资料: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 对主机依赖性较大,且正常模式必须保持一主一备的模式运行.其余备机断线基本不受影响,
主机断线备机则无法再提供服务,即使主机重启也不行,说明主备模式切换有可能存在问题