Jay Pipes wrote:
> Hi Mats!
> 
> Yes, great presentation!
> 
> Question: on slide 17, you write that the transaction position in the
> file is also needed.  I'm wondering why this is the case?  I'm assuming
> by "file" you mean the master's serial transaction log?  If so, why
> should the position of the transaction in that log be required by the
> replicas?

It just serves as a transaction id. It could just as well be a sequence of
numbers assigned when the transactions are committed.

/Matz

> 
> Cheers!
> 
> Jay
> 
> Mats Kindahl wrote:
>> Hi Drizzlelites,
> 
>> Sorry about that, the presentation was larger than I thought. I have put it 
>> up
>> on http://www.kindahl.net/pub/DynamicReplicationTopologies.pdf instead.
> 
>> Best wishes,
>> Mats Kindahl
> 
>> Mats Kindahl wrote:
>>> Adi Alurkar wrote:
>>>> Greetings,
>>>>
>>>> It was great to meet everybody at Developer day. I have been catching up
>>>> with all the docs on the protocol and discussing them with our CTO and in
>>>> the last brainstorm with him we realized that although the proposed 
>>>> protocol
>>>> offers great enhancements in terms of exposing shard id / QUERY / QUERY_RO
>>>> in the protocol itself, the following idea would make it even better.
>>>>
>>>> To simplify and explain the problem consider the following architecture:
>>>> (also note that this would apply to sharded DBD scenario as well)
>>>>
>>>> Master     Slave/Replica
>>>> M1         ---> R1
>>>>            ---> R2
>>>>            ---> R3
>>>> ...
>>>>            ---> R<n>
>>>>
>>>> * R1, R2 use a persistent storage engine (primarily) to serve as backups to
>>>> M1
>>>> * R3...RN use memory based/memcache storage engines and used to handle most
>>>> of the "READ ONLY" traffic.
>>>> * Data is being updated at the M1.
>>>> * Data is being replicated to each of the replicas R1..RN.
>>>> * The replicas can be applying the changes at master at different rates and
>>>> are thus at different consistency state's
>>>> * The application assumes eventual consistency. This implies the following
>>>> all request for data made by a thread should only be serviced with data 
>>>> that
>>>> is at a consistency state higher than or equal to of the previous state.
>>>> Using timestamp as a crude gauge to measure consistency if thread TH1
>>>> requests data at 10:00 all subsequent data request from TH1 should only see
>>>> data that is consistent as of 10:00 or later.
>>>> * In reality timestamp is not the correct way to track consistency, which 
>>>> is
>>>> where we rely on SCN within oracle to achieve consistent reads. The 
>>>> simplest
>>>> definition of SCN is a increasing counter which determines the consistency
>>>> state of the database.
>>>> * C<n> indicates the consistency state.(Needless to say this needs to be
>>>> serialized and determined at the end of a transaction)
>>>>
>>>> Consider the following use case in the above architecture:
>>>>
>>>> * all request where QUERY_RO can be proxied to all servers but all QUERY
>>>> i.e. writes/updates need to be sent to and can be served only by M1.
>>>> * new thread TH1 updates (either, INSERT/UPDATE/DATE/DDL) the data at the
>>>> master, it received a C1 as part of the confirmation of the update and is
>>>> set in the protocol.
>>>> * all subsequent QUERY_RO requests via TH1 include C1 as part of the 
>>>> request
>>>> (set in protocol) thus can be served only by servers that have consistency
>>>> state >=C1. Each satisfied request resets the consistency state in the
>>>> protocol.
>>>> * lets assume TH2 performs multiple updates resulting in the M1 to be at
>>>> C50. R1 is at C45, R2 is at C38, R3 is at R24, etc
>>>> * TH1 request data (QUERY_RO) and is at C24. The request can be routed to
>>>> any of the candidate servers which have consistency state >= C24.
>>>> * a new TH3 requests data (QUERY_RO) with empty consistent state (or 0) and
>>>> thus can be served by the first available server.
>>> This only works if there is a single source of data (i.e., as you note 
>>> below, a
>>> single master).
>>>
>>>> As indicated above adding the concept of SCN and exposing it via the
>>>> protocol would make this a really awesome feature. Some other enhancements
>>>> that would make the SCN concept even more rock solid include:
>>>> * Oracle's SCN is tied to the Oracle instance and is not portable from one
>>>> machine to another, except incase of physical standby. This makes it very
>>>> difficult to implement partial replication(ability to replicate only 
>>>> certain
>>>> objects/schemas), support for multi-master multi-slave replicated
>>>> environment. Not to mention moving a slave from one server to another
>>>> impossible unless the new master is a physical standby of the original
>>>> server.
>>> Exactly.
>>>
>>>> * support manual "override" of the SCN for slaves, this would allow the
>>>> slaves to inherit the SCN from the master per transaction making
>>>> slave->master promotion easier.
>>> This just adds to the confusion, since "faking" consistency can be a good 
>>> source
>>> of problems. The problem is that you assume a total order, but that is not
>>> necessary.
>>>
>>> Use a vector instead (called "version vector" by some), where you have a 
>>> partial
>>> order, but not a total order on the elements. I have attached a short
>>> presentation I did for the replication team at MySQL a few years ago, which
>>> describes this approach.
>>>
>>>> * determine SCN from a central source which uses consensus/paxos, etc
>>> That just adds a single point of failure, which of course can be used, but 
>>> does
>>> not scale very well, since you then need to replicate the SCN central 
>>> source as
>>> well, and then you need to have an SCN for every SCN distributed (assuming 
>>> you
>>> use the same scheme for checking consistency of the SCN server), which is 
>>> kind
>>> of recursive.
>>>
>>>> Does the idea of supporting something like a SCN and exposing it in the
>>>> protocol to support use case such as above seem valid?
>>> Absolutely.
>>>
>>> However, it would be nice to be able to handle a branching temporal model as
>>> well, not just a linear temporal model. There were some mention that slaves 
>>> in
>>> an "alternate future" frequently is a problem, so right now I am thinking of
>>> ways to handle that without introducing an unnecessary overhead.
>>>
>>> Just my few cents,
>>> Mats Kindahl
>>>
>>>
>>> ------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>> Mailing list: https://launchpad.net/~drizzle-discuss
>>> Post to     : [email protected]
>>> Unsubscribe : https://launchpad.net/~drizzle-discuss
>>> More help   : https://help.launchpad.net/ListHelp
> 

-- 
Mats Kindahl
Senior Software Engineer
Database Technology Group
Sun Microsystems

_______________________________________________
Mailing list: https://launchpad.net/~drizzle-discuss
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~drizzle-discuss
More help   : https://help.launchpad.net/ListHelp

Reply via email to