I gave this talk at Couchbase Connect 2015 in Santa Clara. Check out the couchbase website for the recording!
REACTIVE DATA ACCESS WITH RXJAVA … INCLUDING N1QL! Michael Nitschinger, Couchbase @daschl
View Slide
©2015 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 Why Reactive? 2
©2015 Couchbase Inc. 3 Why Reactive? 3
©2015 Couchbase Inc. 4 Detour: Async Java Client Stack 4
©2015 Couchbase Inc. 5 Detour: Smart Batching Source: http://mechanical-‐sympathy.blogspot.co.at/2011/10/smart-‐batching.html 5
©2015 Couchbase Inc. 6 Detour: Smart Batching Source: http://mechanical-‐sympathy.blogspot.co.at/2011/10/smart-‐batching.html 6
RxJava 101 A Gentle Introduction
©2015 Couchbase Inc. 8 § 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 async Future Observable 8
©2015 Couchbase Inc. 9 § Observables are the duals of Iterables § They describe both Latency and Error side effects. RxJava: Introduction event Iterable (pull) Observable (push) data retrieval T next() onNext(T) error discovery throws Exception onError(Exception) completion returns onCompleted() 9
©2015 Couchbase Inc. 10 Consuming Observables 10 § The Observer subscribes and receives events. § A cold Observable starts when subscribed. § onNext can be called 0..N times
©2015 Couchbase Inc. 11 RxJava: Creating Observables just11
©2015 Couchbase Inc. 12 RxJava: Creating Observables 12
©2015 Couchbase Inc. 13 RxJava: Creating Observables 13
©2015 Couchbase Inc. 14 RxJava: Creating Observables 14
©2015 Couchbase Inc. 15 RxJava: Creating Observables 15
©2015 Couchbase Inc. 16 RxJava: Creating Observables 16
©2015 Couchbase Inc. 17 RxJava: Transforming Observables 17
©2015 Couchbase Inc. 18 RxJava: Transforming Observables 18
©2015 Couchbase Inc. 19 RxJava: Transforming Observables 19
©2015 Couchbase Inc. 20 RxJava: Transforming Observables 20
©2015 Couchbase Inc. 21 RxJava: Transforming Observables 21
©2015 Couchbase Inc. 22 RxJava: Transforming Observables 22
©2015 Couchbase Inc. 23 RxJava: Transforming Observables 23
©2015 Couchbase Inc. 24 RxJava: Transforming Observables 24
©2015 Couchbase Inc. 25 RxJava: Transforming Observables 25
©2015 Couchbase Inc. 26 RxJava: Filtering Observables 26
©2015 Couchbase Inc. 27 RxJava: Filtering Observables 27
©2015 Couchbase Inc. 28 RxJava: Filtering Observables 28
©2015 Couchbase Inc. 29 RxJava: Filtering Observables 29
Reactive N1QL Cranking Queries up to Eleven!
©2015 Couchbase Inc. 31 § Simple § Executes a single N1QL statement, no options available. § Parameterized § Executes a parameterized query with positional or named params § Prepared § Executed a previously prepared statement Query Types 31
©2015 Couchbase Inc. 32 § (Async) QueryResult § Observable rows() § Observable errors() § Observable info() § Observable signature() § Observable finalSuccess() § boolean parseSuccess() § String requestId() § String clientContextId() Query Response 32
©2015 Couchbase Inc. 33 Simple Query 33
©2015 Couchbase Inc. 34 Parameterized Query 34 § Named Params
©2015 Couchbase Inc. 35 Parametrized Query 35 § Positional Params
©2015 Couchbase Inc. 36 Prepared Query 36
©2015 Couchbase Inc. 37 Index Handling 37
©2015 Couchbase Inc. 38 Index Handling 38
©2015 Couchbase Inc. 39 Conditional Index Creation 39
Error Handling with RxJava
©2015 Couchbase Inc. 41 § 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 41
©2015 Couchbase Inc. 42 Timeouts 42 § 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.
©2015 Couchbase Inc. 43 Timeouts: Simple 43
©2015 Couchbase Inc. 44 Timeouts: Synchronous API 44
©2015 Couchbase Inc. 45 Timeouts: Complex Example 45
©2015 Couchbase Inc. 46 Coordinated Retry 46 § 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!)
©2015 Couchbase Inc. 47 Coordinated Fallback 47
©2015 Couchbase Inc. 48 Coordinated Retry: Builder 48 § Declarative API instead of complicated retryWhen
Thank you.