/ / Czy RX Java jest czymś, czego potrzebuje inżynier po stronie serwera? - rx-java, programowanie reaktywne, system.reactive, rx-java2

Czy RX Java jest czymś, czego potrzebuje inżynier po stronie serwera? - rx-java, programowanie reaktywne, system.reactive, rx-java2

Widzę, że RX jest dobre dla Androida i obsługi zdarzeń interfejsu użytkownika. Staram się zobaczyć, jakie korzyści zapewnia RX na zapleczu.

Czy Java RX została zaprojektowana do przetwarzania zaplecza, czy ta koncepcja została podjęta zbyt daleko?

Odpowiedzi:

8 dla odpowiedzi № 1

W rzeczywistości RxJava został po raz pierwszy zaimplementowanyrozwiązywać problemy po stronie serwera. Rozszerzenia reaktywne pochodzą ze świata .NET i zostały przeniesione do Java na zapleczu przez Netflix. RxJava stał się czymś na serwerze Java programowania lat przed przyjęciem na Androida.

Wówczas synchroniczne i nie blokującePrzetwarzanie okazało się znacznie poprawić wydajność serwera. Aby to osiągnąć, można użyć wywołań zwrotnych, ale wywołania zwrotne nie są dobrze skomponowane, a to prowadzi do piekła wywołania zwrotnego. RxJava z jego funkcjonalnym stylem łączenia połączeń oferuje (dobre) rozwiązanie i zaczyna widzieć adopcję.

Następnie rozprzestrzenił się na Androida, aby poradzić sobie z sieciąpołączenia lub zdarzenia interfejsu użytkownika. Kiedy używam go i cieszę się nim na Androidzie, zawsze uważam, że RxJava jest mniej w domu na Androida niż na serwerze. Ze względu na ogólny projekt, który czuję się bardziej zainspirowany technologiami innych serwerów, nawet jeśli wiem, że reaktywne rozszerzenia były używane po stronie klienta od samego początku w świecie .NET. Ale także dlatego, że użycie RxJava w systemie Android ma wadę Context jeśli nie śledzisz swoich subskrypcji i musisz dodać .observeOn(AndroidSchedulers.mainThread()) prawie wszędzie, od czasu do czasu zapominasz i doprowadzasz do wypadku. Założę się, że to powód, który poprowadził zespół z Androidem do własnego podejścia do wzorca Observer Dane na żywo na Elementy architektury.

Poza rozwiązaniem piekła oddzwaniania, RxJava oferuje deweloperowi:

  • Wzorzec obserwatora: ten wzór jest świetny do ujawnienia danych innym modułom. Daje on umowę między producentem a konsumentem, z określonym i standardowym zachowaniem, obsługą wypowiedzenia i sposobem kontrolowania producenta na konsumenta (anulowanie, presja zwrotna). Oczywiście nie potrzebujesz RxJava do implementacji tego wzorca, ale RxJava przeniesie go na inny poziom.
  • Obsługa błędów: w systemie asynchronicznym obsługa błędów jest trudna.
  • Kompletny zestaw operatorów: ponad stu operatorów do transformacji, filtrowania i łączenia strumieni. Kiedy masz do czynienia z manipulacją danymi, a zazwyczaj obraca się wokół niej back-end, RxJava sprowadza twój kod do kilku standardowych, jawnych operatorów.

Wszystko w jednym, RxJava doskonale nadaje się do back-enduprzetwarzanie, nawet więcej niż w Androidzie IMHO. Możesz dowiedzieć się więcej o tym, dlaczego Netflix wdrożył reaktywne rozszerzenia w Javie i jakie są zalety ich zaplecza tutaj.

Mówiąc o tym, czy jest to potrzebne po stronie serweraPowiedziałbym, że to nie jest wymagane, ale wiedząc, że to znacznie poprawi twój zestaw narzędzi. Obecnie trend jest coraz bardziej asynchroniczny, z coraz większą liczbą middleware, bibliotek i frameworków oferujących tylko asynchroniczny interfejs API. na przykład na RxJava, a reaktywne rozszerzenie to nie tylko Java, będziesz mógł wykorzystać tę wiedzę w większości języków.


0 dla odpowiedzi nr 2

Używam RxJava w pracy zarówno na bramie APIoraz w bardziej tradycyjnych mikrousługach. To, co Rx czyni trywialnym, ma zarówno lokalne, jak i globalne ograniczenia dla obliczeń równoległych (lub wywołań I / O), i nie znalazłem niereaktywnego rozwiązania, które również działa.

To powiedziawszy, żadna mikroserwacja nie żyje w izolacji i wszyscy muszą skontaktować się z czymś innym - a modernizacja + rx czyni to trywialnym.

Z mojego doświadczenia wynika, że ​​testowanie nie jest szczególnie zaangażowane; potrzebujesz dodatkowych narzędzi, ale to jednorazowa inwestycja.

Zauważyłem, że większość tutoriali rx skupia się na pokazywaniu ci, jak to zrobić subscribe; Uważam, że jest to niewłaściwy poziom abstrakcji, a myślenie i testowanie na poziomie operatora IMO są znacznie bardziej użyteczne.