{"id":334,"date":"2019-01-16T23:14:37","date_gmt":"2019-01-16T22:14:37","guid":{"rendered":"http:\/\/discreteempire.pl\/?p=334"},"modified":"2021-02-28T15:17:57","modified_gmt":"2021-02-28T14:17:57","slug":"nie-korzystaj-z-axona-i-tracking-processor","status":"publish","type":"post","link":"https:\/\/discreteempire.pl\/index.php\/2019\/01\/16\/nie-korzystaj-z-axona-i-tracking-processor\/","title":{"rendered":"Nie korzystaj z Axona i Tracking Processor"},"content":{"rendered":"\n<p>Lubi\u0119 placki i Axona. Przez wi\u0119kszo\u015b\u0107 czasu dzia\u0142a szybko, stabilnie i niezawodnie, a problemy, kt\u00f3re sprawia jako\u015b da si\u0119 rozwi\u0105za\u0107. Jednak tym razem b\u0119d\u0119 namawia\u0142 na ca\u0142kowite porzucenie Tracking Processor. Jest to najlepsza funkcjonalno\u015b\u0107 Axona dodana w wersji 3, a zarazem bardzo niedopracowana. Je\u017celi zale\u017cy Ci na pr\u0119dko\u015bci przetwarzania i wielow\u0105tkowo\u015bci to musisz z niej zrezygnowa\u0107. Tracking Processor w Axonie to funkcjonalno\u015b\u0107 \u015bledz\u0105ca przetwarzanie zdarze\u0144 przez metody, kt\u00f3re je obs\u0142uguj\u0105. Daje to \u0142atwe odtworzenie lub dodanie query poniewa\u017c wystarczy usun\u0105\u0107 z bazy danych odpowiednie wiersze dla metody obs\u0142uguj\u0105cej zdarzenie, procesor to wykryje i zaaplikuje je ponownie. Jednak nie dzia\u0142a to tak sprawnie jak by\u015bmy chcieli.<\/p>\n\n\n\n<h2>Problem pr\u0119dko\u015bci przetwarzania<\/h2>\n\n\n\n<p>Tracking Processor przetwarza kilka zdarze\u0144 na sekund\u0119.<\/p>\n\n\n\n<h3>Przyczyna<\/h3>\n\n\n\n<p>Nie dowiedzieli\u015bmy si\u0119 dlaczego tak si\u0119 dzieje, a przyznanie dodatkowego w\u0105tku do Tracking Processor jeszcze zmniejszy\u0142o ilo\u015b\u0107 przetworzonych zdarze\u0144 na sekund\u0119.<\/p>\n\n\n\n<h3>Rozwi\u0105zanie<\/h3>\n\n\n\n<p>Nie korzysta\u0107 z Tracking Procesora. Po prostu usun\u0105\u0107 ca\u0142\u0105 konfiguracj\u0119 z nim zwi\u0105zan\u0105. My tak zrobili\u015bmy i dodali\u015bmy konfiguracj\u0119 Asynchronous Command Bus, co spowodowa\u0142o wzrost przetwarzania rozkaz\u00f3w i zdarze\u0144 z 40 do 400 na sekund\u0119.<\/p>\n\n\n\n<h3>Dodatek 1<\/h3>\n\n\n\n<p>W roku 2018 by\u0142em na Devoxx Poland i z ciekawo\u015bci poszed\u0142em na prelekcj\u0119 o Axonie. Tam us\u0142ysza\u0142em, \u017ce po\u0142\u0105czenie Axona i relacyjnych baz danych nie dzia\u0142a najlepiej. Nie by\u0142o dok\u0142adnie wyja\u015bnione &#8220;co i dlaczego&#8221; ale kole\u015b wydawa\u0142 si\u0119 ogarni\u0119ty. No spoko, hype development, wywalamy Postgresa i korzystamy z MongoDB&#8230; No jednak nie. W <a href=\"https:\/\/docs.axoniq.io\/reference-guide\/v\/3.3\/part-iii-infrastructure-components\/repository-and-event-store#mongodb-event-storage-engine\">dokumentacji <\/a> Axona mo\u017cemy przeczyta\u0107, \u017ce Tracking Processor nie dzia\u0142a efektywnie z MongoDB, smuteczek.<\/p>\n\n\n\n<h3>Dodatek 2<\/h3>\n\n\n\n<p>Axon wyda\u0142 now\u0105 wersj\u0119 4.0. Wymy\u015bli\u0142 co\u015b takiego jak Axon Server (nie jestem fanem tego rozwi\u0105zania) i z tego co widzia\u0142em, wykorzystywana jest w nim funkcjonalno\u015b\u0107 Tracking Processor. Mam tylko cich\u0105 nadziej\u0119, \u017ce chocia\u017c troch\u0119 poprawili t\u0105 funkcjonalno\u015b\u0107, przynajmniej z <a href=\"https:\/\/docs.axoniq.io\/reference-guide\/1.3-infrastructure-components\/repository-and-event-store#mongoeventstorageengine\">nowej dokumentacji<\/a> znikn\u0119\u0142a wzmianka o nieefektywno\u015bci.<\/p>\n\n\n\n<p>Wersja Axona: 3.3<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lubi\u0119 placki i Axona. Przez wi\u0119kszo\u015b\u0107 czasu dzia\u0142a szybko, stabilnie i niezawodnie, a problemy, kt\u00f3re sprawia jako\u015b da si\u0119 rozwi\u0105za\u0107. Jednak tym razem b\u0119d\u0119 namawia\u0142 na ca\u0142kowite porzucenie Tracking Processor. Jest to najlepsza funkcjonalno\u015b\u0107 Axona dodana w wersji&#8230; <a class=\"read-more\" href=\"https:\/\/discreteempire.pl\/index.php\/2019\/01\/16\/nie-korzystaj-z-axona-i-tracking-processor\/\">Read More<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true},"categories":[21],"tags":[26,27,28],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9lLj4-5o","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":297,"url":"https:\/\/discreteempire.pl\/index.php\/2019\/01\/16\/nie-korzystaj-z-axona-i-list\/","url_meta":{"origin":334,"position":0},"title":"Nie korzystaj z Axona i list","date":"2019-01-16","format":false,"excerpt":"To nie jest tak, \u017ce w Axonie w agregatach i sagach nie mo\u017cna korzysta\u0107 z list. Je\u017celi kolekcja zawiera niewielk\u0105 ilo\u015b\u0107 element\u00f3w, oko\u0142o 1000, to nie ma problemu. Je\u017celi jednak wymagana jest obszerniejsza lista to napotykamy problemy pami\u0119ciowe i wydajno\u015bciowe. Co nale\u017cy zrobi\u0107 aby nie mie\u0107 takich problem\u00f3w? Problem pami\u0119ci\u2026","rel":"","context":"In &quot;Nie korzystaj z Axona&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":269,"url":"https:\/\/discreteempire.pl\/index.php\/2018\/10\/16\/nie-korzystaj-z-axon-i-jpa\/","url_meta":{"origin":334,"position":1},"title":"Nie korzystaj z Axon i JPA","date":"2018-10-16","format":false,"excerpt":"Problemy z JPA i Axonem nie zaczynaj\u0105 si\u0119 od razu. Pocz\u0105tki s\u0105 wolne, chcesz aby wykona\u0142 si\u0119 jeden rozkaz, p\u00f3\u017aniej sto rozkaz\u00f3w, wszystko przechodzi swobodnie i szybko, nie wida\u0107 \u017cadnego problemu. Gdy zaczyna si\u0119 robi\u0107 powa\u017cnie i musisz wykona\u0107 np. czterdzie\u015bci tysi\u0119cy rozkaz\u00f3w to wtedy zauwa\u017casz dziwne zachowanie swojego komputera.\u2026","rel":"","context":"In &quot;Nie korzystaj z Axona&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":280,"url":"https:\/\/discreteempire.pl\/index.php\/2018\/10\/14\/wprowadzenie\/","url_meta":{"origin":334,"position":2},"title":"Wprowadzenie","date":"2018-10-14","format":false,"excerpt":"Od czterech lat jestem profesjonalnym klepaczem kodu. Od dw\u00f3ch lat klepi\u0119 ten kod w do\u015b\u0107 nowych technologiach takich jak: Spring BootSpring Boot DataSpring CloudAxon FrameworkPostgresRabbitMQ Przek\u0142ada si\u0119 to na problemy, na kt\u00f3re nawet szesnasta zak\u0142adka z Stack Overflow nie pomaga. \u0179r\u00f3d\u0142em tych problem\u00f3w nie by\u0142 Spring, spokojnie mo\u017cesz korzysta\u0107 dalej,\u2026","rel":"","context":"In &quot;Nie korzystaj z Axona&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":153,"url":"https:\/\/discreteempire.pl\/index.php\/2017\/12\/06\/usprawnienia\/","url_meta":{"origin":334,"position":3},"title":"Usprawnienia","date":"2017-12-06","format":false,"excerpt":"Po cz\u0119\u015bciowej implementacji przyszed\u0142 czas na usprawnienie. Pierwsze na czym si\u0119 skupi\u0142em to agregaty. Nic nowego nie wymy\u015bli\u0142em, po prostu wykona\u0142em metod\u0119 Kopiego Pejsta z Axona. Najwi\u0119ksz\u0105 zalet\u0105 przepisywania tego by\u0142o zrozumienie jak dzia\u0142a metoda apply z\u00a0AggregateLifecycle\u00a0i jest to jedna z ciekawszych implementacji jak\u0105 widzia\u0142em w swoim \u017cyciu. Drugim usprawnieniem\u2026","rel":"","context":"In &quot;Dynamics&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":91,"url":"https:\/\/discreteempire.pl\/index.php\/2017\/11\/05\/lubie-ddd\/","url_meta":{"origin":334,"position":4},"title":"Lubi\u0119 DDD","date":"2017-11-05","format":false,"excerpt":"Na studiach nauczono mnie programowa\u0107 obiektowo, lecz w pracy ta umiej\u0119tno\u015b\u0107 nie bardzo mi si\u0119 przyda\u0142a. Pierwszy du\u017cy projekt, z kt\u00f3rym si\u0119 w niej spotka\u0142em, by\u0142 napisany w architekturze tr\u00f3jwarstwowej. Musia\u0142em zapomnie\u0107 o tym czego si\u0119 wcze\u015bniej nauczy\u0142em i zacz\u0105\u0107 pisa\u0107 strukturalny kod jak w C tylko, \u017ce w Javie.\u2026","rel":"","context":"In &quot;Dynamics&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":133,"url":"https:\/\/discreteempire.pl\/index.php\/2017\/11\/16\/szybki-sprawdzian\/","url_meta":{"origin":334,"position":5},"title":"Szybki sprawdzian","date":"2017-11-16","format":false,"excerpt":"Ju\u017c jaki\u015b czas pisz\u0119 framework Dynamics. Ilo\u015b\u0107 funkcjonalno\u015bci si\u0119 zwi\u0119ksza, wi\u0119c trzeba sprawdzi\u0107 czy to co zosta\u0142o zaimplementowane do czego\u015b si\u0119 przyda. Postanowi\u0142em obs\u0142u\u017cy\u0107 poruszanie si\u0119 Pacmana. Jest to jedna z podstawowych funkcji gry dlatego zdecydowa\u0142em si\u0119 zaimplementowa\u0107 j\u0105 jako pierwsz\u0105. Potrzebne aby posta\u0107 mog\u0142a si\u0119 porusza\u0107: plansza (Gameboard) b\u0119dzie\u2026","rel":"","context":"In &quot;Dynamics&quot;","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/discreteempire.pl\/index.php\/wp-json\/wp\/v2\/posts\/334"}],"collection":[{"href":"https:\/\/discreteempire.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/discreteempire.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/discreteempire.pl\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/discreteempire.pl\/index.php\/wp-json\/wp\/v2\/comments?post=334"}],"version-history":[{"count":1,"href":"https:\/\/discreteempire.pl\/index.php\/wp-json\/wp\/v2\/posts\/334\/revisions"}],"predecessor-version":[{"id":350,"href":"https:\/\/discreteempire.pl\/index.php\/wp-json\/wp\/v2\/posts\/334\/revisions\/350"}],"wp:attachment":[{"href":"https:\/\/discreteempire.pl\/index.php\/wp-json\/wp\/v2\/media?parent=334"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/discreteempire.pl\/index.php\/wp-json\/wp\/v2\/categories?post=334"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/discreteempire.pl\/index.php\/wp-json\/wp\/v2\/tags?post=334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}