On 6/17/2011 10:31 AM, Eric tamme wrote:
What I don't like about NTS is I would have to have more replicas than I
need. {DC1=2, DC2=2}, RF=4 would be the minimum. If I felt that 2 local
replicas was insufficient, I'd have to move up to RF=6 which seems like a
waste... I'm predicting data in the TB range so I'm trying to keep replicas
to a minimum.
My goal is to have 2-3 replicas in a local data center and 1 replica in
another dc. I think that would be enough barring a major catastrophe. But,
I'm not sure this is possible. I define "local" as in the same data center
as the client doing the insert/update.
Yes, not being able to configure the replication factor differently
for each data center is a bit annoying. Im assuming you basically
want DC1 to have a replication factor of {DC1:2, DC2:1} and DC2 to
have {DC1:1,DC2:2}.
Yes. But, the more I think about it, the more I see issues. Here is
what I envision (Issues marked with *):
Three or more dc's, each serving as fail-overs for the others with 1
maximum unavailable dc supported at a time.
Each dc is a production dc serving users that I choose.
Each dc also stores 0-1 replicas from the other dc's.
Direct customers to their "home" dc of my choice.
Data coming from the client local to the dc is replicated X times in the
local dc and 1 time in any other dc (randomly).
In the even a dc becomes unreachable by users, an arbitrary fail-over dc
can serve their requests albeit with increased latency.
*There will only be 1 replica left amongst the remaining fail-over dc's,
so this could be a problem depending on the CL used other than CL.ONE.
*During the fail-over state, the cluster needs to know that the real
"home" of the replicas belongs to the currently unavailable dc. But, as
of now, I don't think that's possible and so new writes will start to be
replicated in the current dc as if the currently-used fail-over dc is
the home dc.
Maybe these goals can be achieve with a kind of ordered asymmetrical
replication strategy like you illustrated above. The hard part will be
to figure out a simple and elegant way to do this w/o undermining C*.
I would very much like that feature as well, but I dont know the
feasibility of it.
-Eric