在 SOFAJRaft 中提倡一次线性同等读哀求的代码展示:
- // KV 存储实现线性同等读
- public void readFromQuorum(String key, AsyncContext asyncContext) {
- // 哀求 ID 作为哀求上下文传入
- byte[] reqContext = new byte[4];
- Bits.putInt(reqContext, 0, requestId.incrementAndGet());
- // 挪用 readIndex 要领, 守候回调执行
- this.node.readIndex(reqContext, new ReadIndexClosure() {
- @Override
- public void run(Status status, long index, byte[] reqCtx) {
- if (status.isOk()) {
- try {
- // ReadIndexClosure 回调乐成,可以从状态机读取最新数据返回
- // 假如你的状态实现有版本观念,可以按照传入的日记 index 编号做读取
- asyncContext.sendResponse(new ValueCommand(fsm.getValue(key)));
- } catch (KeyNotFoundException e) {
- asyncContext.sendResponse(GetCommandProcessor.createKeyNotFoundResponse());
- }
- } else {
- // 特定环境下,好比产生推举,该读哀求将失败
- asyncContext.sendResponse(new BooleanCommand(false, status.getErrorMsg()));
- }
- }
- });
- }
应用场景
- Leader 推举;
- 漫衍式锁处事,好比 Zookeeper,在 SOFAJRaft 中的 RheaKV 模块提供了完备的漫衍式锁实现;
- 高靠得住的元信息打点,可直接基于 SOFAJRaft-RheaKV 存储;
- 漫衍式存储体系,如漫衍式动静行列、漫衍式文件体系、漫衍式块体系等等。
行使案例
- RheaKV:基于 SOFAJRaft 实现的嵌入式、漫衍式、高可用、强同等的 KV 存储类库。
- AntQ Streams QCoordinator:行使 SOFAJRaft 在 Coordinator 集群内做推举、行使 SOFAJRaft-RheaKV 做元信息存储等成果。
- Schema Registry:高靠得住 schema 打点处事,相同 kafka schema registry,存储部门基于 SOFAJRaft-RheaKV。
- SOFA 处事注册中心元信息打点模块:IP 数据信息注册,要求写数据到达各个节点同等,而且在少数派节点挂掉时担保不影响数据正常存储。
实践
一、基于 SOFAJRaft 计一律个简朴的 KV Store
二、基于 SOFAJRaft 的 RheaKV 的计划
成果名词
PD
- 全局的中心总控节点,认真整个集群的调治,不必要自打点的集群可不启用 PD (一个 PD 可打点多个集群,基于 clusterId 断绝)。
Store
- 集群中的一个物理存储节点,一个 Store 包括一个或多个 Region。
Region
- 最小的 KV 数据单位,每个 Region 都有一个左闭右开的区间 [startKey, endKey), 可按照哀求流量/负载/数据量巨细等指标自动破碎以及自动副本迁居。
特点
- 嵌入式
- 强同等性
- 自驱动
- 自诊断, 自优化, 自决定
以上几点(尤其2、3) 根基都是依托于 SOFAJRaft 自身的成果来实现,具体先容请参考 SOFAJRaft 文档 。
叩谢
感激 braft、etcd、tikv 孝顺了优越的 Raft 实现,SOFAJRaft 受益良多。 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|