参考资料: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'
' -XPUT -d@-
-H'content-type: application/json'
http://IP1:7070/atlas << EOF
[ {"hosts": ["0xF47F4AA7602F3857"] } ]
EOF
给一台机器插入数据
curl -w'
' -i -XPUT
-H'content-type: application/json'
-d'{"v":"antelope"}'
http://IP1:7070/table/0x1?key=apple
另一台机器也可以查询到
curl -w'
' -i http://IP1:7070/table/0x1?key=apple
搞定
将三台服务器都设置进来.
curl -w'
' -i -XPUT -d@-
-H'content-type: application/json'
http://IP1:7070/atlas << EOF
[ { "hosts": ["0xF47F4AA7602F3857", "0x4A348994B2B21DA3", "0x4FC3013EE2AE1737"] } ]
EOF
给机器2插入数据
curl -w'
' -i -XPUT
-H'content-type: application/json'
-d'{"v1":"antelope"}'
http://IP2:7071/table/0x1?key=apple1
另一台机器也可以查询到
curl -w'
' -i http://IP1:7070/table/0x1?key=apple1
这时关掉机器1上的程序
给机器2插入数据,两台机器时就访问不了了,500错误 报超时
curl -w'
' -i -XPUT
-H'content-type: application/json'
-d'{"v2":"antelope"}'
http://IP2:7071/table/0x1?key=apple2
重新启动机器1,机器2应用
给机器1插入数据
curl -w'
' -i -XPUT
-H'content-type: application/json'
-d'{"v3":"antelope"}'
http://IP1:7070/table/0x1?key=apple3
另一台机器也可以查询到
curl -w'
' -i http://IP2:7071/table/0x1?key=apple3
关掉机器2上的应用
给机器1插入数据
curl -w'
' -i -XPUT
-H'content-type: application/json'
-d'{"v4":"antelope"}'
http://IP2:7071/table/0x1?key=apple4
查询不到,看样子需要启动机器3测试
curl -w'
' -i http://IP2:7071/table/0x1?key=apple4
给机器1插入数据
curl -w'
' -i -XPUT
-H'content-type: application/json'
-d'{"v5":"antelope"}'
http://IP1:7070/table/0x1?key=apple5
另一台机器也可以查询到
curl -w'
' -i http://IP1:7072/table/0x1?key=apple5
curl -w'
' -i http://IP2:7071/table/0x1?key=apple5
关掉机器2
机器1,机器3仍然能查询到数据
curl -w'
' -i http://IP1:7072/table/0x1?key=apple5
curl -w'
' -i http://IP1:7070/table/0x1?key=apple5
给机器插入数据,以验证服务器的断线数据同步
curl -w'
' -i -XPUT
-H'content-type: application/json'
-d'{"v6":"antelope"}'
http://IP1:7070/table/0x1?key=apple6
curl -w'
' -i http://IP1:7072/table/0x1?key=apple6
机器2启动后进行查询,可以看到数据是同步的.
curl -w'
' -i http://IP2:7071/table/0x1?key=apple6
总结
1 安全性接口缺失,从目前的接口来看,没看到安全性控制类接口,全凭key就可以获取.商业化运行必须考虑这些.
2 数据访问类接口,可用,但读写速度并不均衡,在2MS~5000MS(最高值有可能受网络状况影响)
3 设备,主机操作类接口基本可用
4 对主机依赖性较大,且正常模式必须保持一主一备的模式运行.其余备机断线基本不受影响,
主机断线备机则无法再提供服务,即使主机重启也不行,说明主备模式切换有可能存在问题