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

Michael Nitschinger on Building a reactive Couchbase driver for the JVM

Michael Nitschinger on Building a reactive Couchbase driver for the JVM

Transcript

  1. A  Retrospective:     Couchbase  on  the  JVM   or

     how  we’ve  built  the  first  reactive  driver  and  still  love  it       Michael  Nitschinger,  SDK  Engineer  
  2. ©2015  Couchbase  Inc.   2   Some  History  

  3. ©2015  Couchbase  Inc.   3   Memcached  

  4. ©2015  Couchbase  Inc.   4   Memcached  

  5. ©2015  Couchbase  Inc.   5   Membase  +  CouchOne  =

     
  6. ©2015  Couchbase  Inc.   6   =  Couchbase  

  7. ©2015  Couchbase  Inc.   7   Java  SDK  1.x  

    § Extends  Spymemcached   § Adds  Config  &  View  Capabilities   § Stable  &  Mature   § Old  codebase,  difficult  to  maintain  and  evolve   § API  grew  organically  
  8. ©2015  Couchbase  Inc.   8   Spymemcached   §  Initial

     Work  Started  mid  2006  (Java  5)   §  No  Generics   §  Memcached  ASCII  Protocol  
  9. ©2015  Couchbase  Inc.   9   API  Inconsistencies  

  10. ©2015  Couchbase  Inc.   10   Reworking  the  API  

  11. ©2015  Couchbase  Inc.   11   From  Key  Value  to

     Documents   Key   Value   Views   N1QL   Search   mcd   ✔   1.8   ✔   2.0   ✔   ✔   3.0   ✔   ✔   4.0   ✔   ✔   ✔   .next   ✔   ✔   ✔   ✔  
  12. ©2015  Couchbase  Inc.   12   Reworking  the  API  –

     The  Document  
  13. ©2015  Couchbase  Inc.   13   Reworking  the  API  –

     2.x  
  14. ©2015  Couchbase  Inc.   14   Reworking  the  API  

  15. ©2015  Couchbase  Inc.   15   Rx  Semantics   single

      multiple   sync   T   Iterable<T>   async   Future<T>   Observable<T>  
  16. ©2015  Couchbase  Inc.   16   Rx  Semantics   Event

      Iterable<T>   Observable<T>   data  retrieval   T  next()   onNext(T)   discover  error   throws  Exception   onError(Throwable)   complete   returns   onCompleted()  
  17. ©2015  Couchbase  Inc.   17   Consuming  Observables   17

      §  The  Observer  subscribes     and  receives  events.   §  A  cold  Observable   starts  when  subscribed.   §  onNext  can  be  called   0..N  times  
  18. ©2015  Couchbase  Inc.   18   RxJava:  Creating  Observables  

    just 18  
  19. ©2015  Couchbase  Inc.   19   RxJava:  Creating  Observables  

    19  
  20. ©2015  Couchbase  Inc.   20   RxJava:  Creating  Observables  

    20  
  21. ©2015  Couchbase  Inc.   21   RxJava:  Creating  Observables  

    21  
  22. ©2015  Couchbase  Inc.   22   RxJava:  Creating  Observables  

    22  
  23. ©2015  Couchbase  Inc.   23   RxJava:  Creating  Observables  

    23  
  24. ©2015  Couchbase  Inc.   24   RxJava:  Transforming  Observables  

    24  
  25. ©2015  Couchbase  Inc.   25   RxJava:  Transforming  Observables  

    25  
  26. ©2015  Couchbase  Inc.   26   RxJava:  Transforming  Observables  

    26  
  27. ©2015  Couchbase  Inc.   27   RxJava:  Transforming  Observables  

    27  
  28. ©2015  Couchbase  Inc.   28   RxJava:  Transforming  Observables  

    28  
  29. ©2015  Couchbase  Inc.   29   RxJava:  Transforming  Observables  

    29  
  30. ©2015  Couchbase  Inc.   30   RxJava:  Transforming  Observables  

    30  
  31. ©2015  Couchbase  Inc.   31   RxJava:  Transforming  Observables  

    31  
  32. ©2015  Couchbase  Inc.   32   RxJava:  Transforming  Observables  

    32  
  33. ©2015  Couchbase  Inc.   33   RxJava:  Filtering  Observables  

    33  
  34. ©2015  Couchbase  Inc.   34   RxJava:  Filtering  Observables  

    34  
  35. ©2015  Couchbase  Inc.   35   RxJava:  Filtering  Observables  

    35  
  36. ©2015  Couchbase  Inc.   36   RxJava:  Filtering  Observables  

    36  
  37. ©2015  Couchbase  Inc.   37   Simple  Query   37

     
  38. ©2015  Couchbase  Inc.   38   Parameterized  Query   38

      §  Named  Params  
  39. ©2015  Couchbase  Inc.   39   Parametrized  Query   39

      §  Positional  Params  
  40. ©2015  Couchbase  Inc.   40   Conditional  Index  Creation  

    40  
  41. ©2015  Couchbase  Inc.   41   Coordinated  Fallback   41

     
  42. ©2015  Couchbase  Inc.   42   Coordinated  Retry:  Builder  

    42   §  Declarative  API  instead  of  complicated  retryWhen  
  43. ©2015  Couchbase  Inc.   43   Levelling  up  the  Architecture

     
  44. ©2015  Couchbase  Inc.   44   Why  Reactive?   44

     
  45. ©2015  Couchbase  Inc.   45   Java  !=  JVM  

  46. ©2015  Couchbase  Inc.   46   Architecture  

  47. ©2015  Couchbase  Inc.   47   Smart  Batching  

  48. ©2015  Couchbase  Inc.   48   Backpressure  

  49. ©2015  Couchbase  Inc.   49   Netty  

  50. ©2015  Couchbase  Inc.   50   Netty  –  In  the

     next  Session!