reactive data acces with rxjava, including n1ql: couchbase connect 2015

Post on 11-Aug-2015

132 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

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