[OPEN-ILS-DEV] Which OpenSRF gateway should I use?

Mike Rylander mrylander at gmail.com
Thu Sep 22 10:23:08 EDT 2016


On Wed, Sep 21, 2016 at 3:36 PM, Bill Erickson <berickxx at gmail.com> wrote:
>
> On Wed, Sep 21, 2016 at 1:01 PM, Mike Rylander <mrylander at gmail.com> wrote:
>>
>> On Wed, Sep 21, 2016 at 11:51 AM, Bill Erickson <berickxx at gmail.com>
>> wrote:
>> >
>> > On Wed, Sep 21, 2016 at 10:44 AM, Bill Erickson <berickxx at gmail.com>
>> > wrote:
>> >>
>> >>
>> >> /osrf-http-translator provides a lower level OpenSRF API and supports
>> >> streaming responses, but its use is no longer encouraged, because the
>> >> underlying mechanism (multipart/x-mixed-replace) is deprecated and only
>> >> works with our old version of XULRunner.  This interface will likely be
>> >> deprecated along with the XUL client.
>> >>
>> >
>> > Couple of additional comments for those following along...
>> >
>> > 1. The multipart/x-mixed-replace part of the translator only affects its
>> > ability to stream results.  Without this, it's less efficient / fast,
>> > but
>> > still works.  You just can't use it for API calls that return large
>> > result
>> > sets or for real-time use of individual results.  The OpenSRF
>> > API/session
>> > support works regardless.
>> >
>> > 2. Various HTML interfaces outside of the XUL client proper (primarily
>> > ACQ
>> > and admin UI's) use the translator.  All of these would have to be
>> > ported to
>> > websockets before we could consider deprecation.
>> >
>>
>> Meaning, in the end, it'll be a while before the translator goes away,
>> or is even deprecated except for streaming.
>>
>> In addition to the core users, it's simpler (admin- and code-wise) on
>> both ends than WebSockets for little things and has the benefit of
>> being able to supply transactional semantics even in a clustered
>> environment, which I don't think our WebSockets implementation can do
>> today (though, if it can, please do correct me!).
>
>
> Clustered transactions should work much the same way with Websockets with a
> few caveats.
>
> 1. Apache KeepAlive does not affect WS connections, so clients will not be
> required to bounce between Apache servers mid-session after a (default) 1
> second timeout.  There is a WS idle timeout setting, but it's intended to
> drop clients after minutes of inactivity, not seconds.
>

Well, that's configurable on the server, right?  I can imagine cases
where it would be beneficial to have a shorter inactivity timeout.
Even with the much smaller RAM requirements, a large site could have
1500+ essentially quiescent connections.

> 2. If a client is disconnected from an Apache WS backend, it will connect to
> another Apache backend automatically and should be able to resume its
> transaction (for "migratable" sessions), the same as an HTTP translator
> client.  At this point, I don't remember testing this specifically, but I
> can't think of any reason it wouldn't work.  Note to self: test this.
>

Right, it's the migratable session part I was unsure of.  However,
looking at the code, I don't think the websockets gateway handles
that.  It looks like it just uses an apache hash object, which (IIUC)
is process-local.  Am I misreading?

--miker

> The main difference between the HTTP and WS translator is how you gracefully
> remove them from service in a clustered setup.  For HTTP you "detach" from
> the load balancer and give it time for any active requests to finish before
> stopping Apache.  For WS, you detach then issue a graceful Apache stop (or
> restart), which tells the WS translator to kick off clients as soon as all
> active requests are completed.  When all clients are disconnected, the
> shut-down completes.
>
>>
>> Some background on the technology: even though some browsers don't
>> support multipart/x-mixed-replace (most, other than IE, do at least
>> for images -- it's used for simple webcam apps) we were far from the
>> first to use it, and it's fairly trivial to implement on the client
>> side.  FWIW, curl supports it, so I wouldn't be too surprised to find
>> clients in the wild using it.
>
>
> Yes, all good points.  I should have clarified that mixed/replace in
> combination with XMLHttpRequest is the real issue here.  That specifically
> was only ever supported by FF, and eventually deprecated.
>
>>
>>
>> All that said, WebSockets is way better and if you write a new
>> (future) client that uses the translator and multipart/x-mixed-replace
>> for streaming then you are a bad person and you should feel bad. :)
>>
>
> And pinesol_green will blame you for stealing all the tux dolls.
>
> -b
>


More information about the Open-ils-dev mailing list