Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Reactive Data Access with RxJava... and N1QL!

Reactive Data Access with RxJava... and N1QL!

This talk, given at JDK.io (recording may be available through them at some point) is a whirlwind introduction to RxJava, N1QL and reactive programming in general. It also talks about resiliency and various patterns you are likely to need.

Michael Nitschinger

September 14, 2016
Tweet

More Decks by Michael Nitschinger

Other Decks in Programming

Transcript

  1. ©2016 Couchbase Inc. 2 § New challenges §  React to user

    load §  React to failure §  Be responsive under load and failure § Need new solutions §  Decoupled, event-driven architectures §  Optimal resource utilization Reactive? 2
  2. ©2016 Couchbase Inc. 4 §  RxJava 1 §  Reactive Streams

    (http://www.reactive-streams.org/) §  RxJava 2 §  Reactor 3 §  Akka Streams The Reactive Landscape 4
  3. ©2016 Couchbase Inc. 5 Detour: N1QL 5 §  Declarative Query

    Language §  Extends SQL for JSON §  Query UI Built-In §  Full SDK Support §  Based on performant Global Secondary Indexes
  4. ©2016 Couchbase Inc. 12 §  Java implementation for Reactive Extensions

    https://github.com/ReactiveX §  A library to compose asynchronous and event-driven programs through observable sequences. RxJava: Introduction single multiple sync T Iterable<T> async Future<T> Observable<T> 12
  5. ©2016 Couchbase Inc. 13 §  Observables are the duals of

    Iterables §  They describe both Latency and Error side effects. RxJava: Introduction event Iterable<T> (pull) Observable<T> (push) data retrieval T next() onNext(T) error discovery throws Exception onError(Exception) completion returns onCompleted() 13
  6. ©2016 Couchbase Inc. 14 Consuming Observables 14 §  The Subscriber

    subscribes and receives events. §  A cold Observable starts when subscribed. §  onNext can be called 0..N times
  7. ©2016 Couchbase Inc. 15 Single 15 §  Behaves like an

    Observable §  Emits only a single successful value or an error
  8. ©2016 Couchbase Inc. 33 § Simple §  Executes a single N1QL

    statement, no options available. § Parameterized §  Executes a parameterized query with positional or named params §  Prepared Query supported through adhoc(false) Query Types 33
  9. ©2016 Couchbase Inc. 34 § (Async) N1qlQueryResult §  Observable<AsyncN1qlQueryRow> rows() § 

    Observable<JsonObject> errors() §  Observable<N1qlMetrics> info() §  Observable<Object> signature() §  Observable<Boolean> finalSuccess() §  Observable<String> status() §  boolean parseSuccess() §  String requestId() §  String clientContextId() Query Response 34
  10. ©2016 Couchbase Inc. 43 § Things will go wrong, so better

    plan for it § Do not trust integration points (including the SDK) § Synchronous retry & fallback is too damn hard § RxJava provides (almost) everything you need to §  fallback §  retry §  fail fast Preparing to Fail 43
  11. ©2016 Couchbase Inc. 44 Timeouts 44 § The network is unreliable

    § Servers fail § The SDK contains bugs § Always specify timeouts and deal with them! § The synchronous wrapper defines them for you all the time.
  12. ©2016 Couchbase Inc. 49 Coordinated Retry 49 §  Fail fast

    §  Don’t let your system get stuck §  Shed load with backpressure § Retry §  immediately won’t help §  either linear or exponential back-off necessary §  have a strategy if retry also doesn’t work (Fallbacks!)