
Komunikacja po REST czy systemie kolejkowym?
W świecie mikroserwisów pojawia się temat sposobu ich integracji, aby wymienić wiedzę i udostępnić usługi pomiędzy domenami. Dwa popularne podejścia to komunikacja synchroniczna (np. HTTP, REST) oraz integracja przez system kolejkowy typu Apache Kafka, RabbitMQ czy JMS (Java Message Service np. Tibco).
Każde podejście ma szereg wad i zalet, dlatego przed podjęciem decyzji należy zrozumieć przypadek użycia, poznać kontekst biznesoowy i wymagania niefunkcjonalne oraz przeprowadzić analizę za i przeciw cechom każdego z rozwiązań.

Apache Kafka – producent wiadomości
Apache Kafka to bardzo rozbudowany system umożliwiający dostosowanie się pod praktycznie każdą potrzebę biznesową. Jeśli chcemy wysokiej przepustowości i zezwalamy na utratę komunikatów (np. logi, metryki) – proszę bardzo – Kafka przygotowuje dla nas ustawienia producentów. Jeśli zależy nam na jak największej spójności danych (np. przelewy, geolokalizacja) – proszę bardzo mamy inne ustawienia. W dzisiejszym artykule na tapetę weźmiemy producenta w systemie Apache Kafka.

Transakcje w Java i Spring – jak to działa?
Transakcje są potężnym narzędziem, pozwalają nam na zaaplikowanie zmian w rozproszonej logice w jednym momencie. Zapewniają to, że wszystkie zmiany w danych zostaną zaaplikowane razem albo wcale. Modyfikując dane w wielu krokach, narazimy się na ryzyko posiadania niespójnych danych, jeżeli nie użyjemy transakcji. Jednakże transakcji należy używać świadomie i z rozsądkiem.

Retry Pattern – mechanizm odporności aplikacji
Podczas komunikacji pomiędzy zintegrowanymi systemami może dojść do krótkotrwałej awarii. Dobrą praktyką jest, aby aplikacja działająca w środowisku rozproszonym była odporna i przygotowana na wystąpienie tymczasowych awarii i ponawiała operację, zamiast zatrzymywać proces biznesowy.

Apache Avro
W praktycznych projektach, kiedy komunikujemy się pomiędzy mikrousługami za pomocą kolejki – musimy uzgodnić w Teamie, w jaki sposób będziemy serializowali i deserializowali dane na kolejce. W jaki sposób zostanie rozwiązane wersjonowanie struktury komunikatów? To kluczowe pytania, z którymi musi zmierzyć się każdy zespół przy projektowaniu komunikacji pomiędzy mikroserwisami.

Jak uzyskać elastyczność mikroserwisów na poziomie komunikacji?
Jednym z korzyści zorientowania organizacji na dobrze wydzielone, zorientowane na wycinek domeny mikrousługi jest ich niezależność, a tym samym zwinność. Nawet gdy mamy wrażenie, że ta niezależność została osiągnięta za pomocą architektury mikroserwisów, może okazać się, że biblioteki komunikacji skutecznie ją ograniczają. Jak wykorzystana technologia ma wpływ na niezależność zespołów?

Apache Kafka – wprowadzenie
Tym artykułem rozpoczynamy kolejną serię - kolejki wiadomości. Dzisiejszym tematem będzie Apache Kafka. Na wstępie omówimy czym są i do czego są nam w ogóle potrzebne systemy kolejkowe. W końcu zajmiemy się tytułowym bohaterem i omówimy architekturę oraz sposób...

Circuit Breaker Pattern
Podczas komunikacji synchronicznej może nastąpić szereg problemów z połączeniem do innego systemu. Problem może szybko się samoistnie rozwiązać lub trwać dłuższą chwilę powodując awarię. Sprawdź czym jest Circuit Breaker Pattern, który pomaga zapobiec awariom systemów i jak on działa.

Ważne parametry JVM, o których powinieneś wiedzieć przed wyjściem na produkcję
Podczas przygotowywania aplikacji przed wyjściem na produkcję dobrze jest zwrócić uwagę na to, z jakimi java opts jest ona uruchamiana. Włączenie kluczowych z nich pozwala na spełnienie wymagań niefunkcjonalnych, takich jak stabilność systemu, szybkość działania (inicjalizacji), diagnostyka. Z tego artykułu dowiesz się o opcjach m.in.: -Xms i -Xmx (oraz ich działaniu w kontekście kontenerów Docker), -XX:+HeapDumpOnOutOfMemoryError, -Duser.timezone, -Djava.security.egd, -server, -Xloggc.

Jak działa Garbage Collector – zarządzanie pamięcią JVM
Powód istnienia odśmiecacza pamięci, jakim jest Garbage Collector jest zaskakująco prosty i oczywisty. Programiści wolą bawić się nowymi frameworkami, niż dbać o zwalnianie pamięci, której potrzebują aplikacje. Pamięć z reguły ma ograniczony rozmiar i nie da się jej...