reactive data acces with rxjava, including n1ql: couchbase connect 2015
Post on 11-Aug-2015
132 Views
Preview:
TRANSCRIPT
REACTIVE DATA ACCESS WITH RXJAVA… INCLUDING N1QL!
Michael Nitschinger, Couchbase@daschl
©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.html5
©2015 Couchbase Inc. 6
Detour: Smart Batching
Source: http://mechanical-sympathy.blogspot.co.at/2011/10/smart-batching.html6
RxJava 101A 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<T>
async
Future<T>
Observable<T>
8
©2015 Couchbase Inc. 9
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()
9
©2015 Couchbase Inc. 10
Consuming Observables
10
The Observer subscribes and receives events.
A cold Observablestarts when subscribed.
onNext can be called0..N times
©2015 Couchbase Inc. 11
RxJava: Creating Observables
just
11
©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 N1QLCranking 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<AsyncQueryRow> rows() Observable<JsonObject> errors() Observable<QueryMetrics> info() Observable<Object> signature() Observable<Boolean> 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 Handlingwith 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.
top related