You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kudu.apache.org by "shenxingwuying (Jira)" <ji...@apache.org> on 2022/07/20 04:05:00 UTC
[jira] [Assigned] (KUDU-3382) About strong consistency read
[ https://issues.apache.org/jira/browse/KUDU-3382?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
shenxingwuying reassigned KUDU-3382:
------------------------------------
Assignee: shenxingwuying
> About strong consistency read
> -----------------------------
>
> Key: KUDU-3382
> URL: https://issues.apache.org/jira/browse/KUDU-3382
> Project: Kudu
> Issue Type: Improvement
> Reporter: shenxingwuying
> Assignee: shenxingwuying
> Priority: Major
>
> h1. Background && Motivation
> Java client has supported two replica selective strategies:
>
> {{public enum ReplicaSelection
> { LEADER_ONLY, CLOSEST_REPLICA }
> }}
> LEADER_ONLY can provide a strong consistency read.
> Closest replica can reduce brandwidth cost and speed scan but the data may be not the latest. Some users may want to both advantages.
> h1. Problem Analysis
> h2. linearizability read
> If kudu need strong consistency read(linearizability read), read leader is not enough, because double leader may be exist at a very small period time. During that time, it's not liearizability read. So kudu should avoid double leader at any time, pay the corresponding cost is no leader at a small time. Kudu should make a choice. For user usally need linearizability, so I think kudu should support it. During a very small time no leader's unavailability can avoid by client's fault tolerance.
>
> {{The problem can talk about at another issue, that's a sub problem.}}
> {{At this I view it no problem by read leader.}}
> h2.
> h1. Solution
> At Raft, there is a scheme for the scene.
> Kudu's raft implements is a strong leader, leader's state machine is not older than followers, and only timeout/ leader transfer can switch leader. About this, someone can make sure it or I can do a experiment to prove it.
> Suppose kudu read leader is linearizability, we can trust the leader's result.
> # Read Log, read request is also duriable to wal by raft. The method can solve the problem but it's performance (read and write) is worse.
> # Read Index. If leader, scan directly. If follower, follower should request to leader to get last_committed_opid then wait local replica's apply opid(committed_opid) >= the opid.
> At follower, I want to use Read Index.
> h1. My conclusions
> Kudu can support read followers and keep strong consistency(linearizability).
>
> I will create another issue to talk about linearizability read from leader.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)