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

More Decks by Enterprise Java User Group Austria

Other Decks in Technology

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  

    View Slide

  2. ©2015  Couchbase  Inc.   2  
    Some  History  

    View Slide

  3. ©2015  Couchbase  Inc.   3  
    Memcached  

    View Slide

  4. ©2015  Couchbase  Inc.   4  
    Memcached  

    View Slide

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

    View Slide

  6. ©2015  Couchbase  Inc.   6  
    =  Couchbase  

    View Slide

  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  

    View Slide

  8. ©2015  Couchbase  Inc.   8  
    Spymemcached  
    §  Initial  Work  Started  mid  2006  (Java  5)  
    §  No  Generics  
    §  Memcached  ASCII  Protocol  

    View Slide

  9. ©2015  Couchbase  Inc.   9  
    API  Inconsistencies  

    View Slide

  10. ©2015  Couchbase  Inc.   10  
    Reworking  the  API  

    View Slide

  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   ✔   ✔   ✔   ✔  

    View Slide

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

    View Slide

  13. ©2015  Couchbase  Inc.   13  
    Reworking  the  API  –  2.x  

    View Slide

  14. ©2015  Couchbase  Inc.   14  
    Reworking  the  API  

    View Slide

  15. ©2015  Couchbase  Inc.   15  
    Rx  Semantics  
    single   multiple  
    sync   T   Iterable  
    async   Future   Observable  

    View Slide

  16. ©2015  Couchbase  Inc.   16  
    Rx  Semantics  
    Event   Iterable   Observable  
    data  retrieval   T  next()   onNext(T)  
    discover  error   throws  Exception   onError(Throwable)  
    complete   returns   onCompleted()  

    View Slide

  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  

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  37. ©2015  Couchbase  Inc.   37  
    Simple  Query  
    37  

    View Slide

  38. ©2015  Couchbase  Inc.   38  
    Parameterized  Query  
    38  
    §  Named  Params  

    View Slide

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

    View Slide

  40. ©2015  Couchbase  Inc.   40  
    Conditional  Index  Creation  
    40  

    View Slide

  41. ©2015  Couchbase  Inc.   41  
    Coordinated  Fallback  
    41  

    View Slide

  42. ©2015  Couchbase  Inc.   42  
    Coordinated  Retry:  Builder  
    42  
    §  Declarative  API  instead  of  complicated  retryWhen  

    View Slide

  43. ©2015  Couchbase  Inc.   43  
    Levelling  up  the  Architecture  

    View Slide

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

    View Slide

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

    View Slide

  46. ©2015  Couchbase  Inc.   46  
    Architecture  

    View Slide

  47. ©2015  Couchbase  Inc.   47  
    Smart  Batching  

    View Slide

  48. ©2015  Couchbase  Inc.   48  
    Backpressure  

    View Slide

  49. ©2015  Couchbase  Inc.   49  
    Netty  

    View Slide

  50. ©2015  Couchbase  Inc.   50  
    Netty  –  In  the  next  Session!  

    View Slide