Re: paper on Prevayler

Klaus Wuestefeld <[email protected]> Wed, 6 Aug 2014 21:09:16 -0300
Newsgroups gmane.comp.java.prevayler
Message-ID <CAMAooZFHJuvKQ=giDGzhs14SJTvd=_wy_HbBguWh1cnMdoPPTw@mail.gmail.com>
The transaction:query ratio is very high in SCADA systems and the "internet
of things" seems to be going that way.

Klaus
On Aug 6, 2014 8:30 PM, "Justin Sampson" <[email protected]> wrote:

> Ralph Johnson wrote:
>
> > Thanks a lot for your comments! I hadn't connected prevalence
> > with consensus, but of course they are closely related. My PhD
> > work 30 years ago was on distributed consensus but I quit
> > paying much attention to that area after the 80s were over. I
> > studied Lamport's work closely for awhile, but never figured
> > out Paxos.
>
> The fact that so many people have "never figured out Paxos" was
> the primary motivation behind Raft. :) You  might enjoy checking
> it out. I haven't had a chance to use it yet, but I'm starting up
> a study group here at work.
>
> > One of the reasons I didn't connect them was that the prevalent
> > systems I have built have never been distributed. The only
> > system using prevalence that I have used and that was
> > replicated was Croquet (which I plan to include as an example).
> > I'm working on a system now that will become replicated, but
> > prevalence is just a tiny part of this system, and (for me) not
> > the most interesting. One of the big advantages of prevalence
> > is that it is so simple. "Simple" means you can ignore it most
> > of the time.
>
> Yeah, my own usage of Prevayler has only been for prototype or
> early-stage start-up apps, where "simple" is hugely valuable.
> Prevayler's appeal in that context is less about how fast it is
> at run-time and more about how delightful it is to program with!
> However, for serious production usage I really want true
> clustering (not just master-slave mirroring), which has made it
> hard for me to advocate strongly for Prevayler.
>
> > Distributed consensus tends to focus on fault-tolerance. When
> > people talk about "prevalence" they usually mean making things
> > fast and simple by avoiding disk. So, though these have a lot
> > in common, they tend to emphasize different aspects.
>
> Sure -- not so much avoiding disk altogether, but journaling to
> disk in parallel with in-memory processing. Paxos (in practice)
> and Raft (in theory and practice) are all about distributed logs,
> so they seem a very natural "next step" for Prevayler, simply
> replacing the local-disk journal with a replicated one. It's not
> _quite_ so easy as that; Prevayler's internals would need some
> rearrangement. But conceptually it's very close.
>
> I kept hoping that some day I'd be able to incorporate Paxos into
> Prevayler, but there were never any good open-source Java
> implementations of Paxos available and I never had the time to
> write one myself. Raft is exciting because it's designed to be
> implementable, and therefore there are already a bunch of decent
> open-source implementations popping up.
>
> > I agree that the need for nondeterminism is as important as the
> > limitation on memory. One of my weaknesses when writing is a
> > tendency to give priorities, such as "the main limitation",
> > when they are not real. On most of the projects that I used
> > prevalence, memory wasn't a problem. I ran a server for years
> > that always ran on the oldest machine in my lab, and when it
> > started to get slow because it was running out of memory, I'd
> > move it to a somewhat newer machine with more memory, and throw
> > out the old server. When it was obvious that we had more data
> > than would fit in memory, we would usually use a real database.
>
> I didn't mean to pick on you for it, but the focus on memory was
> always a pet peeve of mine back when Prevayler was getting heated
> attention. To me, the two biggest _actual_ practical problems
> with Prevayler are (a) the difficulty of determinism and (b) the
> lack of true clustering -- both of which are solvable with a bit
> of R&D. But _no one_ among Prevayler's detractors ever seemed to
> care about those issues; they all focused on "you're stupid if
> you think you can fit in memory" or "encapsulating transactions
> as objects is silly."
>
> I think history has shown (and your own experience seems to
> agree!) that memory is _not_ a problem -- _everyone_ in serious
> distributed apps is keeping everything in memory these days --
> and the Transaction Pattern fits in very nicely with the growing
> emphasis on event-based architectures, asynchronous messaging,
> and eventual consistency. Those early architectural principles of
> Prevayler have been totally vindicated in the intervening decade.
> And that's why I don't think it's fair to describe memory as even
> "a limitation," much less "the main limitation"! :)
>
> > > The statement in the draft that "not writing queries in the
> > > journal saves a little time when the query is executed, and
> > > saves a lot of time when the journal is replayed," seems
> > > backwards to me. Executing a query is usually tiny
> > > (nanoseconds), whereas writing it to disk is huge
> > > (centiseconds). Is your point that _lots_ of queries bloat
> > > the journal?
> >
> > I'm not sure exactly what my point was. When I said "executing
> > a query" I meant to include the time to write it to the
> > journal. Usually there are a lot more queries than there are
> > transactions that change state. I think what I really meant was
> > that the time saved would probably be more noticeable when
> > replaying the journal than when creating it in the first place,
> > but right now I don't remember why I thought that.
>
> Yeah, I expect the ratio of queries to transactions to be
> something like 10:1 or 100:1 (though I'm not sure if that's
> empirical or just intuitive).
>
> Of course, "noticeable" depends on who's doing the noticing. :)
>
> Unnecessarily journaling queries will definitely be noticed
> during recovery, because the journal will be 10x or 100x the size
> it needs to be, which will slow down both reading from the file
> and deserializing the transactions. Whether that's actually a
> problem depends on how often you're taking snapshots. End-users
> won't notice unless it keeps the system off-line at a time when
> they're actually trying to use it!
>
> When a client first submits a query, whether it's noticeable
> (subjectively) depends on how fast the rest of the system is. But
> journaling a query always adds significant latency in the
> multi-centisecond range (used to be 100-200ms with hard disk
> drives; might be 10ms with solid-state drives). Prevayler batches
> transactions to achieve higher throughput, but that latency is
> unavoidable. Users _expect_ >200ms for _writes_ -- I seem to
> remember some usability studies actually showing users getting
> _worried_ if clicking a "save" button took much less than that!
> But users expect navigating around an app (triggering queries
> along the way) to be snappy, ~100ms per click. If you're serving
> up a web app, the network latency alone is already eating up that
> much, or close to it, so adding another 100ms to journal each
> query can definitely mean the difference between "this app feels
> pretty snappy" and "this ... app ... is ... so ... slow ...".
>
> Cheers,
> Justin
>
>
> ------------------------------------------------------------------------------
> Infragistics Professional
> Build stunning WinForms apps today!
> Reboot your WinForms applications with our WinForms controls.
> Build a bridge from your legacy apps to the future.
>
> http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.clktrk
> _______________________________________________
> To unsubscribe go to the end of this page:
> http://lists.sourceforge.net/lists/listinfo/prevayler-discussion
> _______________________________________________
> "Databases in Memoriam" -- http://www.prevayler.org
>

------------------------------------------------------------------------------
Infragistics Professional
Build stunning WinForms apps today!
Reboot your WinForms applications with our WinForms controls. 
Build a bridge from your legacy apps to the future.
http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.clktrk

_______________________________________________
To unsubscribe go to the end of this page: http://lists.sourceforge.net/lists/listinfo/prevayler-discussion
_______________________________________________
"Databases in Memoriam" -- http://www.prevayler.org