Wzorzec projektowy Transactional Outbox

Wzorzec projektowy Transactional Outbox
migatotech
  • Rejestracja:około rok
  • Ostatnio:11 miesięcy
  • Postów:12
2

Cześć Wszyscy! 👋🌟

Ostatnio dużo słyszy się o wyzwaniach związanych z niezawodnością i komunikacją między mikroserwisami. Wiem, że dla wielu z Was, tak jak i dla mnie, jest to temat nie tylko ważny, ale i pełen niespodzianek. 🌐💡

Właśnie dlatego postanowiłem pogłębić temat i podzielić się z Wami swoimi odkryciami dotyczącymi wzorca "transactional outbox". 📬✨

🔗 Znalazłem rozwiązanie, które może znacząco poprawić niezawodność naszych systemów. To nie tylko teoria, ale praktyczne podejście, które możemy zaimplementować w naszych projektach. W moim najnowszym wideo na YouTube szczegółowo omawiam:

Jak "transactional outbox" zapewnia atomowość transakcji i niezawodność komunikacji. 📦🔒
Praktyczne wskazówki dotyczące implementacji wzorca w różnych środowiskach. 🛠️
Rozwiązania typowych problemów i wyzwań, które możesz napotkać podczas pracy z tym wzorcem. 🚀

Uważam, że ta wiedza może być dla Was niezwykle cenna, niezależnie od tego, czy dopiero zaczynacie swoją przygodę z mikroserwisami, czy szukacie sposobów na optymalizację istniejących systemów. 📘💼

Zapraszam Was serdecznie do obejrzenia wideo i podzielenia się swoimi doświadczeniami w komentarzach. Wasze opinie i spostrzeżenia są dla mnie niezwykle ważne! 💬🌟

Oto link do wideo: Kliknij

Jeśli znajdziecie wartość w treści, które tworzę, zachęcam do subskrypcji kanału – będzie mi niezmiernie miło. 🙏❤️

Czekam na Wasze opinie i sugestie! Do zobaczenia w sekcji komentarzy! 💬🎉

Grzyboo
Cześć, to nie forum dla upośledzonych. Nie potrzeba 2 emotek na końcu każdego zdania 🙊 🤣💩😂
somekind
Taka treść bardziej pasuje na mikroblog (https://4programmers.net/Mikroblogi) niż forum.
SE
  • Rejestracja:prawie 6 lat
  • Ostatnio:7 dni
  • Postów:321
1

Rozwlekles na 10 minut informacje, ktore byly do przekazania w polowe tego czasu jak nie krocej. Wszystko mowione jednym tonem i tempem, 70 letni wykladowcy na polibudzie ciekawiej przekazuja wiedze. Do tego ten poczatek polegajacy na klepaniu formulki.

Wisienka na torcie bylo omawianie "minusu" outboxa polegajacego na "nadmiarowej tabeli". To nie ma zadnego sensu, bo celem jest przeciez spojnosc danych, wiec pewnego rodzaju "overhead" zawsze musi wystapic.

Niestety nie urzeklo mnie to ani merytorycznie, ani pod wzgledem formy :(.

edit: Do tego nawet nie wspomniales (chyba, ze przegapilem za co przepraszam), ze outbox zapewnia AT LEAST once delivery co jest bardzo wazne w kontekscie przetwarzania danych.

edytowany 2x, ostatnio: Seken
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 9 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10055
1

Ja od siebie powiem tyle, że w 99% przypadków tam gdzie mikroserwisy są wprowadzane - to w ogóle nie są potrzebne. Ludzie jest wprowadzają bo jest hype.

SE
  • Rejestracja:prawie 6 lat
  • Ostatnio:7 dni
  • Postów:321
1

Jednym z pomyslow autora bylo to zeby dwa serwisy (sklep i platnosci) komunikowaly sie przez wspolna tabele w bazie. Takze no, nic wiecej chyba dodawac nie trzeba :P

migatotech
  • Rejestracja:około rok
  • Ostatnio:11 miesięcy
  • Postów:12
0

Niestety, ale nie zrozumiałeś idei tego wzorca. Te dwa serwisy nie komunikują się w żadnym razie za pośrednictwem jednej tabeli, to by przecież nie miało sensu. Do tabeli zapisujesz eventy, po to żeby w ramach jednej lokalnej transakcji wykonać operacje, co gwarantuje ci atomiczną operację.

Odnośnie opinii, że mikroserwisy są niepotrzebne w 99% przypadków to niestety ale też nie mogę się z tym zgodzić. Jest to wzorzec, którzy jest faktycznie popularny, jest drogi w utrzymaniu, ale jest on dedykowany dla dużych rozwiązań, które zakładają potrzebę skalowania.

SE
  • Rejestracja:prawie 6 lat
  • Ostatnio:7 dni
  • Postów:321
1

@migatotech: wzorzec rozumiem doskonale, ponieważ w pracy cały system nad którym pracuję jest oparty na zdarzeniach :).
Odnoszę się do stwierdzenia z 5:30 w nagraniu. Sugerujesz żeby serwis płatności odpytywal bazę danych serwisu sklepu. Co jest dosłownie komunikacja za pomocą bazy danych, bo flow wtedy jest takie:
Sklep - > baza - > płatności.
Powiem więcej, jest to jeden z antywzorcow w architekturze mikroserwisow, ponieważ każdy z nich powinien mieć własną bazę. Serwisy te z definicji powinny cechowac się wysoką spójnością i niskim sprzężeniem. Jeżeli obydwa serwisy muszą korzystać ze wspólnej tabeli to tworzysz niepotrzebne sprzężenie i na 99% źle podzieliłeś system na mikroseriwsy.

WeiXiao
Powiem więcej, jest to jeden z antywzorcow w architekturze mikroserwisow, ponieważ każdy z nich powinien mieć własną bazę. czy jeżeli masz taki system: app1 (frontend, 2 instancje (druga standby), zapisuje taski do policzenia), app2 (wykonuje obliczenia, 50 instancji, wystawia status przetwarzania taska) - czy mamy tutaj mikroserwisy czy nie?
migatotech
  • Rejestracja:około rok
  • Ostatnio:11 miesięcy
  • Postów:12
1

Masz rację. Dziękuję, że obejrzałeś ten film tak dokładnie, zauważyłeś coś czego nawet nie byłem świadom, że powiedziałem.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)