Aerospike 的一致性问题
Consistency issue with Aerospike
我在 Aerospike (v3.5.12) 中使用作为一个节点的内存键值存储。
同时使用 Java 客户端 (v3.1.7) 来检索和写入数据。
我注意到在某些 QPS (3K) 的读取(批处理)和写入下。
部分数据检索无效。
[INFO] [24/11/2015 14:43:38.782] Write Data
[ERROR] [24/11/2015 14:43:38.937] Read Data - Not Found
有人遇到过类似的问题吗?
更新
我更新到 Aerospike 3.7.1。
我在以下问题中使用了异步操作:
public void store() {
WritePolicy expirationWritePolicy = new WritePolicy();
expirationWritePolicy.sendKey = true;
expirationWritePolicy.priority = Priority.HIGH;
expirationWritePolicy.expiration = 10;
Key key = new Key(namespace, SET_NAME, requestId);
Bin bin = new Bin(BIN_NAME, serializer.toBinary(budgetCommit));
Bin extra = new Bin("extra", "data");
client.put(expirationWritePolicy, new WriteListener() {
@Override
public void onSuccess(Key key) {
logger.info("Succeed to store {}", requestId());
}
@Override
public void onFailure(AerospikeException exception) {
logger.error(exception, "Fail to store {}", key);
}
}, key, extra, bin);
}
public void retrieve() {
WritePolicy defaultWritePolicy = new WritePolicy();
defaultWritePolicy.priority = Priority.LOW;
defaultWritePolicy.sendKey = true;
Key key = new Key(namespace, SET_NAME, requestId);
Bin closeExtra = new Bin("extra", "_closed");
client.operate(defaultWritePolicy, new RecordListener() {
@Override
public void onSuccess(Key key, Record record) {
if (record.getValue(BIN_NAME) == null){
logger.error("Fail to retrieve {}", requestId);
}
}
@Override
public void onFailure(AerospikeException exception) {
logger.error("Fail to retrieve {} : {}", requestId, exception.getMessage());
}
}, key,
Operation.append(closeExtra), Operation.get());
}
[INFO] [12/01/2016 08:37:16.732] 成功存储379e67dc-945d-4717-97a7-721cc8093c05
[错误] [12/01/2016 08:37:16.736] 无法检索 379e67dc-945d-4717-97a7-721cc8093c05
当有来自 Aerospike 的 Ack 时调用 onSuccess 回调。
主写入时大约 8k QPS 开始失败。
可能正在进行一轮再平衡。该版本中的批处理不会代理到其他节点。
Aerospike Server 3.6.4 有一个可以代理的新批处理实现。
我在 Aerospike (v3.5.12) 中使用作为一个节点的内存键值存储。
同时使用 Java 客户端 (v3.1.7) 来检索和写入数据。
我注意到在某些 QPS (3K) 的读取(批处理)和写入下。
部分数据检索无效。
[INFO] [24/11/2015 14:43:38.782] Write Data
[ERROR] [24/11/2015 14:43:38.937] Read Data - Not Found
有人遇到过类似的问题吗?
更新
我更新到 Aerospike 3.7.1。
我在以下问题中使用了异步操作:
public void store() {
WritePolicy expirationWritePolicy = new WritePolicy();
expirationWritePolicy.sendKey = true;
expirationWritePolicy.priority = Priority.HIGH;
expirationWritePolicy.expiration = 10;
Key key = new Key(namespace, SET_NAME, requestId);
Bin bin = new Bin(BIN_NAME, serializer.toBinary(budgetCommit));
Bin extra = new Bin("extra", "data");
client.put(expirationWritePolicy, new WriteListener() {
@Override
public void onSuccess(Key key) {
logger.info("Succeed to store {}", requestId());
}
@Override
public void onFailure(AerospikeException exception) {
logger.error(exception, "Fail to store {}", key);
}
}, key, extra, bin);
}
public void retrieve() {
WritePolicy defaultWritePolicy = new WritePolicy();
defaultWritePolicy.priority = Priority.LOW;
defaultWritePolicy.sendKey = true;
Key key = new Key(namespace, SET_NAME, requestId);
Bin closeExtra = new Bin("extra", "_closed");
client.operate(defaultWritePolicy, new RecordListener() {
@Override
public void onSuccess(Key key, Record record) {
if (record.getValue(BIN_NAME) == null){
logger.error("Fail to retrieve {}", requestId);
}
}
@Override
public void onFailure(AerospikeException exception) {
logger.error("Fail to retrieve {} : {}", requestId, exception.getMessage());
}
}, key,
Operation.append(closeExtra), Operation.get());
}
[INFO] [12/01/2016 08:37:16.732] 成功存储379e67dc-945d-4717-97a7-721cc8093c05 [错误] [12/01/2016 08:37:16.736] 无法检索 379e67dc-945d-4717-97a7-721cc8093c05
当有来自 Aerospike 的 Ack 时调用 onSuccess 回调。
主写入时大约 8k QPS 开始失败。
可能正在进行一轮再平衡。该版本中的批处理不会代理到其他节点。
Aerospike Server 3.6.4 有一个可以代理的新批处理实现。