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

Олег Докука — Текущее состояние реактивного доступа к базам данных

3fc5b5eb32bd3b48d7810fd67b37f9a1?s=47 Moscow JUG
December 13, 2018

Олег Докука — Текущее состояние реактивного доступа к базам данных

В настоящее время реактивное программирование становится трендом для создания эластичных и устойчивых приложений. Уже более года Spring Framework радует нас практически полным реактивным стеком для построения приложений.
Теперь у нас есть возможность строить полностью асинхронную и не блокирующую обработку и передачу данных, что способствует эффективному использованию ресурсов.

Однако, это значит, что не блокирующее взаимодействие должно поддерживаться
на всех уровнях системы. Одним из этих слоев является база данных.
В этом докладе мы расширим наши познания о реактивном взаимодействии с известными базами данных, рассмотрим, какие базы данных поддерживают реактивный доступ и как он реализован под капотом.

Наконец, мы перейдем к самым важным вопросам нашей беседы:
- Как реактивно взаимодействовать с реляционными базами данных?
- Есть ли у нас реактивный JDBC?
- Является ли ADBA нашим решением и быть может у Pivotal есть решение для нас?

3fc5b5eb32bd3b48d7810fd67b37f9a1?s=128

Moscow JUG

December 13, 2018
Tweet

Transcript

  1. / by Oleh Dokuka & Igor Lozynskyi The state of

    Reactive in the Database’s Access
  2. / by Oleh Dokuka & Igor Lozynskyi The state of

    Reactive in the Database’s Access
  3. 3 For whom this talk: / Reactive programmers / Performance

    geeks / Hibernate lovers/haters (?) / Curious people / We assume, you know what Reactive is
  4. 4

  5. Реактивный Хардкор / Oleh Dokuka 5 5 Igor Lozynskyi

  6. Реактивный Хардкор / Oleh Dokuka 6 6 Oleh Dokuka

  7. None
  8. 8 Agenda / Why Reactive? / Reactive for NoSQL /

    Reactive for SQL / We use Spring Framework a lot
  9. Part 1: Blocking I/O World 9

  10. None
  11. Demo 11

  12. efficient handling of network connections incoming/outgoing What do we want?

  13. Connection per Thread 1-2 MB per Thread bounded Thread Pools

  14. Part 2: NI/O World 14

  15. None
  16. Demo 16

  17. Many Connections per Thread

  18. do not block Thread Rule:

  19. Part 3: Microservices World 19

  20. 20

  21. None
  22. Spring RestTemplate WebFlux

  23. Demo 23

  24. 24 Non-Blocking Clients / NIO (JDK 1.4+) / Netty Client

    (JDK 6+) / Jetty Client (JDK 8+) / JDK Client (JDK 11+)
  25. None
  26. Spring WebClient WebFlux

  27. Demo 27

  28. Part 4: Real World 28

  29. None
  30. Spring Data Reactive

  31. 31

  32. Demo 32

  33. 33

  34. 34

  35. 35 ~X ms - XX s

  36. 36 ~X - XXXX Rows

  37. QueryOptions queryOptions = QueryOptions.builder() .consistencyLevel(ConsistencyLevel.ANY) .retryPolicy(FallthroughRetryPolicy.INSTANCE) .readTimeout(Duration.ofSeconds(10)) .fetchSize(2) .tracing(true) .build();

    .fetchSize(2)
  38. 38 Node .fetchSize(2) 8 7 6 5 4 3 2

  39. Go inside 39

  40. Good: Support async / non-blocking 40

  41. Bad: No Streaming 41

  42. Ugly: Fetch is inflexible 42

  43. 43

  44. Demo 44

  45. 45

  46. Go inside 46

  47. Good: Flexible Fetch 47

  48. Bad: No Streaming 48

  49. Ugly: Just Ugly 49

  50. 50

  51. Demo 51

  52. 52

  53. Go inside 53

  54. Good: Support Streaming 54

  55. Bad: No Backpressure 55

  56. Ugly: Design 56

  57. 57 Honorable Mention

  58. 58 What do we want?

  59. 59

  60. 60

  61. Reactive Spring Data MongoDB Cassandra Couchbase Redis

  62. What about SQL?

  63. 80% of projects use SQL DBs* *source is unknown

  64. Make JDBC Reactive?

  65. Make JDBC Reactive?

  66. Wrap into a Thread Pool? rxjava2-jdbc

  67. Requirements / Non-Blocking / Designed for Streams of Data /

    Backpressure Support
  68. Disclaimer / Experimental / Not for production yet

  69. 69 ADBA

  70. Demo 70

  71. ADBA Criticism / Not reactive / No DSL like with

    Reactor / No Backpressure / Not ideal for data streams
  72. 72 R2DBC

  73. image credits: Pivotal

  74. image credits: Pivotal

  75. image credits: Pivotal

  76. image credits: Pivotal

  77. image credits: Pivotal

  78. R2DBC Drivers / PostgreSQL / MySQL/MariaDB / Microsoft SQL /

    H2
  79. Demo 79

  80. R2DBC Criticism / It is in Alpha / Not validated

    yet / No Hibernate/EclipseLink (JPA) / Transactions
  81. Reactive Spring Data MongoDB Cassandra Couchbase Redis R2DBC

  82. Demo 82

  83. 83 Summary / Reactive enables efficiency / We have reactive

    persistence for NoSQL / We have No reactive persistence for SQL / ADBA vs R2DBC / Stay tuned! It is interesting times!
  84. 84 Takeaways / Web on Reactive Stack (Spring Framework) /

    www.r2dbc.io
  85. /oleh.dokuka /OlegDokuka /OlehDokuka Q&A Thank you! /aigor /siromaha /ihor.lozinsky 2018

    Nov 24 Presentation Code