You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "Bill Burcham (JIRA)" <ji...@apache.org> on 2019/04/16 23:00:00 UTC

[jira] [Commented] (GEODE-34) Introduce Reactive Streams and/or Reactor

    [ https://issues.apache.org/jira/browse/GEODE-34?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16819572#comment-16819572 ] 

Bill Burcham commented on GEODE-34:
-----------------------------------

Continuous Query should be added to the list of candidates for reactive-ization. I believe CQ was introduced after this ticket was written. See this 2016 presentation and demo on CQ: https://www.youtube.com/watch?v=ktsmi9E28zM

> Introduce Reactive Streams and/or Reactor
> -----------------------------------------
>
>                 Key: GEODE-34
>                 URL: https://issues.apache.org/jira/browse/GEODE-34
>             Project: Geode
>          Issue Type: Improvement
>          Components: general, querying
>    Affects Versions: 1.0.0-incubating
>            Reporter: Stephane Maldini
>            Priority: Major
>              Labels: gsoc2016
>
> Current threading strategy in various places involve blocking wait, e.g:
> - Put/PutAll
> - Function/ResultCollector
> - CacheListener handling
> There is a couple small projects to help addressing this issue which would tie  very well with Geode distributed nature. 
> A first micro-library is Reactor [1] depending on Reactive Streams [2] to provide for error isolation and latency mitigation wherever it is required. The purpose of Reactor and Reactive Streams is to introduce a reverse non-blocking flow control to any producer:
> - A component using put/putAll should not try accumulating unsafely pending writes in an async queue such as the ones in threadPool executors if there are current put/putAll in process. It should be actually driven by the acknowledgement from a successful write (or the acknowledgement it has been replicated etc). The propagation of the async backpressure would tell this component to not even try, e.g. if it is an HttpServer, stop reading incoming request, serve other requests and resume after put has been done. This gives a predictive memory profile and a better CPU use overall in non blocking applications, which is all the point about Reactive Streams.
> - ResultCollector, Query shouldn't execute more than requested by the consumer in order to avoid accumulating too much pending results. 
> - CacheListener dispatching could benefit from implementing Reactive contract to provide for safe concurrency model (actor-like), error propagation and like in the 2 previous examples, async flow control that avoids pending event to accumulate somewhere in an uncontrolled fashion.
> The issue here is about studying the benefits, experimenting on a branch and report any interesting finding. Other reactive data providers can be found on the vendor side (CouchDB, MongoDB both provide for a Reactive Streams ready query mech) and mapping side (Slick 3.0 is a pure Reactive Streams implementation for data queries).
> [1] http://projectreactor.io/docs/reference/
> [2] http://reactive-streams.org



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)