Tuesday 26 December 2017

System handlu przedsiębiorstwami


LETS są rewitalizującymi społecznościami w całej Wielkiej Brytanii Jako inicjatywy podstawowe są otwarte dla wszystkich - ludzi w każdym wieku, umiejętności i umiejętności lokalnych klubów i stowarzyszeń grup wolontariackich, organizacji charytatywnych, inicjatyw społecznościowych, spółdzielni mieszkaniowych, małych firm i lokalnych usług - pomagających wszystkim dać i podejmowania, łączyć się z nowymi zasobami i znaleźć prawdziwą tożsamość społeczności. LEKCJE oferują równe szanse wszystkim - niezależnie od tego, czy są zatrudnieni, czy bezrobotni, finansowo zabezpieczeni, czy niskim dochodzie, czarno-biała, zdolna lub niepełnosprawna LETS korzystają z systemu kredytów wspólnotowych, bezpośrednia wymiana nie musi być zarabiana Ludzie zarabiają punkty LETS świadcząc usługi, a następnie mogą wydawać kredyty na rzecz oferowane przez inne osoby w ramach programu np. opieka nad dziećmi, transport, żywność, naprawy domu lub wynajem narzędzi i sprzętu. Badania w połowie lat dziewięćdziesiątych wskazywały, że co najmniej 40 000 osób uczestniczyło w około 450 programach LETS, z których większość została utworzona zgodnie z zasadami demokracji i współpracy, operatywny model LETS opracowany w Wielkiej Brytanii przez LETSLINK UK, który rozpoczął pracę w 1991 r. Nasza obecna lista kontaktów powyżej 300 wskazuje, że ich niewielki skurcz - jeśli powiedzieliśmy, że wynosi 100 członków na program, oznacza to około 30 000 lub mniej członków w Wielkiej Brytanii Towarzyszyły temu wzrost inicjatyw powiązanych, takich jak: Timebanks, Freecycle, Commercial Barter, Fairtrade Campaigns i Community Networks we wszystkich rodzajach, co potwierdza ciągłe zainteresowanie ludźmi w tworzeniu rzeczy w ich społeczności. trwający projekt badawczy, zainaugurowany we wrześniu 2003 r., ma na celu ustalenie obecnego stanu LETS w Wielkiej Brytanii i potrzeb organizatorów programu LETS Obecnie staramy się uzyskać znaczne finansowanie na rzecz ożywienia i wspierania naszej organizacji, abyśmy mogli zapewnić lepsze zasoby naszej firmie członkowie i będą informować o postępach na tej stronie - obejrzyj to miejsce. Wzorce Integracji Wzorców W praktyce Case Study System Obrotu Obligacjami. Jonathan Simon. Jest łatwiejszy dystans do siebie z dużej kolekcji wzorów lub języka wzorcowego Wzorce są abstrakcją idei w formie wielokrotnego użytku Często, bardzo ogólny charakter wzorców, które czynią je tak użytecznymi, sprawia, że ​​trudno im zrozumieć Czasami najlepszą rzeczą do zrozumienia wzorców jest prawdziwy przykład świata Nie jest to wymyślony scenariusz tego, co może się zdarzyć, ale co się naprawdę dzieje i co się zdarzy. Ten rozdział stosuje wzorce do rozwiązywania problemów przy użyciu procesu wykrywania. System, który omówimy to handel obligacjami system, który pracowałem przez dwa lata od początkowego projektowania poprzez produkcję Zbadamy scenariusze i problemy, które napotkano i jak je rozwiązać za pomocą wzorców Wiąże się to z procesem decyzyjnym wyboru wzorca, a także jak połączyć i wyregulować wzorce, potrzeby systemu I to wszystko odbywa się biorąc pod uwagę siły napotykane w rzeczywistych systemach, w tym wymagania biznesowe, decyzje klientów, ar wymagań architektonicznych i technicznych, jak również integracji systemów starszych Intencją tego podejścia jest lepsze zrozumienie wzorców poprzez praktyczne zastosowanie. Budowa systemu. Najważniejszy portfel inwestycyjny w Wall Street planuje budowę systemu wyceny obligacji w Wysiłek w celu usprawnienia przepływu pracy ich biura handlowego obligacji Obecnie inwestorzy obligacji muszą przesyłać ceny dużej liczby obligacji do kilku różnych punktów obrotu, każdy z własnym interfejsem użytkownika Celem systemu jest minimalizacja szczegółów związanych z ceną wszystkich ich obligacje w połączeniu z zaawansowaną funkcjonalnością analityczną specyficzną dla rynku obligacji w pojedynczym pakiecie z ujętym interfejsem użytkownika Oznacza to integrację i komunikację z kilkoma komponentami w różnych protokołach komunikacyjnych Wysoki poziom przepływu systemu wygląda następująco: pierwsze dane rynkowe wchodzą w skład systemu Rynek dane są danymi dotyczącymi ceny i innych cech obligacji, które reprezentują ludzi g do kupna i sprzedaży obligacji na wolnym rynku Dane rynkowe są natychmiast wysyłane do silnika analitycznego zmieniającego dane Analytics odnosi się do funkcji matematycznych dla aplikacji finansowych, które zmieniają ceny i inne atrybuty obligacji Są to ogólne funkcje wykorzystujące dane wejściowe aby dostosować wyniki danej funkcji do określonego powiązania Aplikacja kliencka, która będzie działać na każdym pulpicie handlowym, skonfiguruje silnik analityki na zasadzie pertradera, kontrolując specyfikę analityki dla każdej wiązki, którą przedsiębiorca ustala po przeprowadzeniu analizy stosowane do danych rynkowych, zmodyfikowane dane są wysyłane do różnych miejsc obrotu, w których handlowcy z innych firm mogą kupować lub sprzedawać obligacje. Architektura z wzorami. Z omówieniem przepływu pracy systemu możemy podejść do niektórych problemów architektonicznych napotykamy podczas procesu projektowania Spójrzmy na to, co dotychczas wiedzie handlowcy potrzebują bardzo elastycznej aplikacji zarówno dla systemu Windows NT, jak i d Stacje robocze Solaris W związku z tym postanowiliśmy wdrożyć aplikację kliencką jako klient o grubości Java, ze względu na niezależność platformy i możliwość szybkiego reagowania na dane wprowadzane przez użytkownika i dane rynkowe Po stronie serwera dziedziczymy starsze komponenty C, które nasz system wykorzysta Komponenty danych rynkowych komunikują się z infrastrukturą TIBCO Information Bus TIB. Są dziedziczone następujące składniki. Market Data Price Feed Server Publikuje dane o rynkach przychodzących do TIB. Analytics Engine Przeprowadza analizę danych dotyczących przychodzących rynków i emituje zmodyfikowane dane rynkowe do Serwer TIB. Contribution Służy do komunikacji z lokalami handlowymi Punkty sprzedaży są elementami stron trzecich, które nie są kontrolowane przez bank. Podsystem danych rynkowych z dziedziny dostępu do danych. Podsystem współdziałania z legitymacją. Musimy zdecydować, jak poszczególne podsystemy Java są grube klientów, danych rynkowych i wkładu będzie komunikować Moglibyśmy mieć grubego klienta komunikować się bezpośrednio z le ale wymaga to zbyt dużej logiki biznesowej dla klienta Zamiast tego budujemy parę bram Java, aby komunikować się z starszymi serwerami Gateway wyceny danych rynkowych Brama Contribution dla wysyłania cen do centrów handlowych Zapewnia to ładną kapsułkowanie logiki biznesowej związanej z tymi obszarami Obecne składniki systemu są pokazane poniżej. Połączenia oznaczone jako wskazujące, że wciąż nie wiadomo, jak niektóre elementy będą komunikować. System i jego składniki. Pierwsze pytanie o komunikację polega na tym, jak zintegrować Java gruby klient i dwa komponenty serwera Java w celu wymiany danych Spójrzmy na cztery style integracji sugerowane w tej książce Przenoszenie plików Shared Database Zdalne wywołanie procedur i wiadomości Możemy wykluczyć Shared Database, ponieważ chcemy stworzyć warstwę abstrakcja pomiędzy klientem a bazą danych i nie chce mieć kodu dostępu do bazy danych w kliencie Transfe r podobnie można wykluczyć, ponieważ minimalne opóźnienie jest wymagane w celu zapewnienia, że ​​ceny bieżące są wysyłane do centrów handlowych To pozostawia nam wybór pomiędzy zdalną procedurą wywołania lub Messaging. The platformy Java zapewnia wbudowaną obsługę zarówno zdalnej procedury Invocation i Messaging Integracja w stylu RPC może być osiągnięta przy użyciu metod zdalnego wywoływania metod RMI, CORBA lub Enterprise Java Beans EJB Usługa jawności Java JMS jest wspólnym interfejsem API dla integracji w stylu wiadomości Do obu stylów integracji można łatwo wdrożyć w języku Java. So, które będą działały lepiej dla tego projektu Remote Procedure Invocation lub Messaging There jest tylko jedna instancja Gateway wyceny i jedna instancja Gateway Contribution w systemie, ale zwykle wiele Thick Clients jednocześnie łączy się z tymi usługami dla każdego handlarza obligacjami, który się zaloguje w określonym czasie Ponadto bank chciałby, aby był to ogólny system cen, który może być wykorzystany w innych aplikacjach poza niewiadomą liczbą Think Clients, może istnieć nieznana liczba innych aplikacji używających danych dotyczących cen pochodzących z Klienta Thick Gateway firmy Gateways. A lub innej aplikacji korzystającej z danych dotyczących cen może dość łatwo używać RPC do wykonywania połączeń z Bramkami, aby uzyskać dane o cenach i wywoływanie przetwarzania Jednak dane o cenach będą stale publikowane, a niektórzy klienci zainteresowani tylko pewnymi danymi, a zatem uzyskiwanie trafnych danych do właściwych klientów w odpowiednim czasie może być trudne Klientzy mogliby odpytywać bramy, ale to będzie stworzyć wiele napowietrznych Byłoby lepiej, gdyby bramy udostępniały dane klientom tak szybko, jak to jest dostępne To będzie wymagało, aby każda brama śledziła, które klienci są aktualnie aktywne, a które chcą, jakie konkretne dane wtedy, gdy nowy fragment danych stanie się dostępny, co zdarzy się wiele razy na sekundę, Gateway będzie musiało wykonać RPC dla każdego zainteresowanego klienta, aby przekazać dane do klinu nt Idealnie informujemy wszystkich klientów, więc każdy RPC musi zostać utworzony w swoim własnym wątku, co może działać, ale staje się bardzo skomplikowane bardzo szybko. Komunikat znacznie upraszcza ten problem Dzięki aplikacji Messaging możemy zdefiniować oddzielne kanały dla różnych typów danych o cenach Następnie, gdy Gateway dostanie nowy kawałek danych, doda wiadomość zawierającą te dane do kanału Publish-Subscribe Channel dla tego typu danych W międzyczasie wszyscy klienci zainteresowani określonym typem danych będą nasłuchiwać na kanale tego typu W ten sposób bramy mogą łatwo wysyłać nowe dane osobom zainteresowanym, bez konieczności posiadania informacji o liczbie wniosków słuchaczy i tym, czym są. Klienci muszą jeszcze móc powoływać się na zachowanie w bramach, a także od są kiedykolwiek tylko dwie bramki, a klient może prawdopodobnie blokować, gdy metoda jest wywoływana synchronicznie, te wywołania incydentu od klienta do bramy mogą być dość łatwo implementowane przy użyciu protokołu RPC już używają komunikowania się w komunikacji typu Gateway-to-client, wiadomości są prawdopodobnie dobrymi sposobami implementacji komunikacji między klientami i bramą. Dlatego też komunikacja między bramami i klientami odbywa się poprzez komunikację. komponenty są napisane w Javie, JMS prezentuje łatwy wybór jako system komunikacyjny To skutecznie tworzy magistralę komunikacyjną lub architekturę, która umożliwi integrację przyszłych systemów z obecnym systemem z niewielką lub bez zmian w infrastrukturze przesyłania wiadomości sposób funkcjonalność aplikacji może być łatwa do wykorzystania przez inną aplikację, którą bank rozwija. Komponenty Java Komunikacja z JMS. JMS to po prostu specyfikacja i musimy zdecydować się na system komunikacyjny zgodny z JMS. Zdecydowaliśmy się na użycie IBM MQSeries JMS, ponieważ bank jest sklepem IBM, używając serwerów aplikacji WebSphere i wielu innych produktów IBM W rezultacie będziemy używać MQSeries, ponieważ już mamy ave infrastruktury wsparcia w miejscu i licencja na miejsce produktu. Następnym pytaniem jest, jak połączyć system powiadamiania MQSeries z autonomicznym serwerem C Contribution i serwerami danych rynkowych i serwerów Google Analytics bazujących na TIBCO Potrzebujemy sposobu, w jaki konsumenci MQSeries mają dostęp do komunikatów TIB Ale jak Być może moglibyśmy użyć wzorca Tłumaczeń komunikatów do przetłumaczenia komunikatów TIB na wiadomości MQSeries Chociaż klient C dla MQSeries służy jako tłumacz tekstowy, który poświęciłby niezależność serwera JMS i chociaż TIBCO ma interfejs Java API, architekta klienta i menedżer odrzuciły to w wyniku tego podejście do programu Message Translator musi zostać porzucone. Most z serwera TIB do serwera MQSeries wymaga komunikacji między C i Javą Możemy użyć CORBA, ale co z komunikacją Bliżej spójrz na wzór tłumacza komunikatów, informuje, że jest związany z adapterem kanału w używaniu protokołów komunikacyjnych Sercem kanału Adapter ma łączyć systemy niekomunikacyjne z systemami komunikacyjnymi Pary adapterów kanałów łączących dwa systemy komunikacyjne to Most Wiadomości. Celem mostu Messaging jest przesyłanie wiadomości z jednego systemu komunikacyjnego do drugiego Jest to dokładnie to, co robimy z dodatkowa złożoność wewnątrzgabarytowej komunikacji Java do C Możemy wdrożyć Most Wiadomości Messaging Cross Language Channel za pomocą kombinacji Adapterów Kanałowych i CORBA Budujemy dwa lekkie serwery Adapterów Kanałowych, jeden w komunikacji zarządzającej C z TIB, a drugi w Java zarządzająca komunikacją z JMS Te dwa adaptery kanału, które same są punktami końcowymi komunikatów, będą komunikować się ze sobą za pośrednictwem protokołu CORBA Podobnie jak nasz wybór dla MQSeries, będziemy używać protokołu CORBA, a nie JNI, ponieważ jest to standard firmy Morski mostek komunikacyjny implementuje skutecznie symulowany komunikat tłumaczenie między pozornie niezgodnymi systemami wiadomości i różnymi językami. Message Translator przy użyciu kanału Adapte rs. Następny schemat przedstawia bieżący projekt systemu, w tym bramy i inne składniki Jest to dobry przykład aplikacji wzorcowej W celu wdrożenia wzorca Tłumacza, skojarzono dwa kanały adaptera z protokołem nie zawierającym komunikatów, skutecznie wykorzystując jeden wzór do wdrożenia innego wzór Ponadto zmieniliśmy kontekst kontekstowy adaptera kanału w celu łączenia dwóch systemów komunikacyjnych z protokołem translacji międzysługowej nie zawierającym komunikatów, a nie łączeniem systemu komunikacyjnego z systemem non-messaging. Obecny system z kanałem Adapters Channel. Structuring Channels. A do pracy z wzorami to nie tylko wiedza, kiedy używać tego wzorca, ale także jak najskuteczniej go używać. Każda implementacja wzorca musi uwzględniać specyfikę platformy technologicznej, a także inne kryteria projektowe Ta sekcja stosuje ten sam proces wykrywania, aby znaleźć najbardziej efektywne wykorzystanie Kanału Publikującego Subskrybowanie w kontekście serwera danych rynkowych nawiązującego kontakt z t silnik analityczny. Realne dane rynkowe pochodzą z kanału danych rynkowych, serwera C, który emituje dane rynkowe na TIB Kanał danych rynkowych wykorzystuje oddzielny kanał Publish-Subscribe dla każdej obligacji, która publikuje ceny Może to wydawać się skrajne każda nowa obligacja potrzebuje własnego nowego kanału. Ale to nie jest tak poważne, ponieważ nie trzeba tworzyć kanałów w TIBCO Raczej, kanały są odsyłane przez hierarchiczny zestaw nazw tematów nazywanych tematami. Serwer TIBCO filtruje pojedynczy przepływ wiadomości według tematu , przesyłając każdemu unikatowemu tematowi do pojedynczego kanału wirtualnego. Rezultatem tego jest bardzo lekki kanał. Możemy utworzyć system, który publikuje się na kilku kanałach, a subskrybenci mogą słuchać tylko za interesujące ceny, co wymaga, aby abonenci używali Filtru wiadomości lub selektywnego konsumenta, aby filtrować cały przepływ danych w celu uzyskania interesujących cen obligacji, decydując o tym, czy każda wiadomość powinna być przetwarzana w miarę otrzymania. e dane rynkowe są publikowane na kanałach przeznaczonych dla pasaży, abonenci mogą rejestrować aktualizacje szeregu obligacji, co skutecznie pozwala subskrybentom filtrować poprzez selektywne subskrybowanie kanałów i odbierać tylko aktualizacje odsetek, a nie podejmowanie decyzji po otrzymaniu wiadomości. Ważne jest, aby pamiętaj, że korzystanie z wielu kanałów w celu uniknięcia filtrowania jest niestandardowym wykorzystaniem kanałów komunikacyjnych W kontekście technologii TIBCO zdecydowanie decydujemy się wdrożyć lub posiadać filtry lub wykorzystać filtrowanie kanałów wbudowanych w TIBCO - zamiast tego, czy używać tak wiele kanały. Następnym składnikiem, który musimy zaprojektować, jest silnik analityki, inny serwer CIB TIB, który zmodyfikuje dane rynkowe i przekaże go ponownie do TIB. Chociaż jest to poza zakresem rozwoju naszego JMS, współpracujemy ściśle z C aby zaprojektować ten projekt, ponieważ jesteśmy najważniejszym klientem analityki. Problemem jest znalezienie struktury kanałów, która najskuteczniej odbędzie się t nowo zmodyfikowanych danych rynkowych. Ponieważ mamy już jeden dedykowany kanał wiadomości na obligację odziedziczony po danych cen rynkowych, logiczne byłoby modyfikowanie danych rynkowych i ponowna transmisja zmodyfikowanych danych rynkowych na temat powiązanego pasma wiadomości, ale nie będzie to praca odkąd analityczne modyfikowanie cen obligacji jest specyficzne dla handlowców Jeśli odtworzymy zmodyfikowane dane na kanale wiadomości wiążących, zniszczymy integralność danych zastępując ogólne dane rynkowe danymi specyficznymi dla przedsiębiorcy Z drugiej strony możemy mieć inny typ wiadomości dla które publikujemy na tym samym kanale, co pozwala subskrybentom decydować o tym, która wiadomość jest zainteresowana, aby uniknąć niszczenia integralności danych, a następnie klienci będą musieli wdrożyć własne filtry, aby oddzielić wiadomości od innych podmiotów gospodarczych. wzrost wiadomości otrzymywanych przez subskrybentów, wprowadzanie na nich niepotrzebnych obciążeń. Istnieją dwie możliwości. One kanały za przedsiębiorcę Każdy handlowiec ma wyznaczony kanał modyfikowanych danych rynkowych W ten sposób oryginalne dane rynkowe pozostają nienaruszone, a każda aplikacja handlowa może posłuchać konkretnych handlowców kanału wiadomości o modyfikowanych aktualizacjach cen. Jeden kanał na przedsiębiorcę na obligację utworzyć jeden kanał wiadomości Na przykład dane dotyczące obligacji ABC zostaną opublikowane na kanale ABC Bond, a zmodyfikowane dane rynkowe dla przedsiębiorcy A zostaną opublikowane na kanale Trader A, Bond ABC , zmodyfikowane dane rynkowe dla przedsiębiorcy B na Trader B, Bond ABC, itd. Jeden kanał na przedsiębiorcę. Jeden kanał na obligację na przedsiębiorcę. Są zalety i wady każdego podejścia. Podejście typu "na wiążę" przykłada wiele więcej kanału wiadomości W najgorszym scenariuszu numer kanału wiadomości będzie liczbą łączonych obligacji pomnożoną przez liczbę podmiotów gospodarczych Możemy umieścić górne granice liczby kanałów, które zostaną utworzone od wiemy, że jest tylko około 20 podmiotów gospodarczych i nigdy nie płacą więcej niż kilkaset obligacji To stawia górną granicę poniżej zakresu 10.000, co nie jest tak dziwaczne w porównaniu do prawie 100 000 kanałów wiadomości, ponieważ korzystamy z TIB i Message Channel są dość tanie, liczba komunikatów nie jest poważnym problemem Z drugiej strony, sama liczba kanałów wiadomości może być problemem z punktu widzenia zarządzania Każdym razem dodaje się wiązanie musi być utrzymany kanał dla każdego przedsiębiorcy Może to być bardzo groźne w bardzo dynamicznym systemie Nasz system jest zasadniczo statyczny Posiada również infrastrukturę do automatycznego zarządzania kanałami komunikacyjnymi s W połączeniu z odziedziczoną architekturą starszego składnika przy użyciu podobnego podejścia minimalizuje to, że nie ma co liczyć To nie znaczy, że powinniśmy nadrobić niepotrzebnie dużo nadawców kanału wiadomości, możemy wdrożyć podejście architektoniczne, duża liczba kanałów z komunikatem, gdy jest jakiś powód. W tym przypadku jest powodem, że sprowadza się do lokalizacji logiki Jeśli podejmiemy podejście dla każdego handlowca, silnik Analytics potrzebuje logiki do grupowania kanałów wejściowych i wyjściowych kanały wejściowe z mechanizmu Analytics są powiązane, a wyjściowe kanały wiadomości będą dla każdego przedsiębiorcy, co wymaga, aby silnik Analytics trasował wszystkie dane analityczne z wielu powiązań dla określonego podmiotu gospodarczego do konkretnego dostawcy. Kanał wiadomości Skutecznie włącza silnik analityki do routera opartego na zawartości, aby wdrożyć niestandardową logikę trasowania dla naszej aplikacji. Po przeprowadzeniu struktury magistrali komunikatów silnik Analytics jest rodzajowym serwerem, który może być używany przez kilka innych systemów w tym celu nie chcemy go ukrywać z funkcjonalnością systemu Z drugiej strony, podejście per-bond działa, ponieważ pomysł przedsiębiorcy posiadającego analitykę cen obligacji jest akceptowaną przez spółkę praktyką. pproach utrzymuje nienaruszalność separacji kanału danych w serwisie Message Channel, a dodanie kilku innych kanałów wiadomości. Zanim dotrzemy do klienta, chcemy, aby router Content-Based łączył te kilka kanałów w łatwą do zarządzania liczbą kanałów. Nie chcemy, aby klient aplikacja działająca na pulpicie handlowym, aby odsłuchać tysiące lub dziesiątki tysięcy kanałów wiadomości. Teraz pytanie brzmi, gdzie umieścić router internetowy. Po prostu możemy mieć kartę kanału C TIB przekazać wszystkie wiadomości do bramki cenowej na jednym kanale wiadomości To niedobrze z dwóch powodów, dla których rozdzieliłbyśmy logikę biznesową między C i Javą, a utraciliśmy korzyść z oddzielnego kanału komunikacyjnego po stronie TIB, co pozwoli nam uniknąć filtrowania później w przepływie danych Patrząc na nasze komponenty Java możemy umieścić je w Gateway wyceny lub utworzyć pośredni komponent między Gateway wyceny a klientem. W teorii, jeśli utrzymywaliśmy więź opartej na zasadzie oddzielenia kanałów komunikacyjnych do klienta, brama cenowa ponownie przekazuje informacje o cenach o tej samej strukturze kanału, co brama cenowa i silnik Analytics. Oznacza to powielanie wszystkich powiązanych kanałów TIB w systemie JMS utworzyć pośredni komponent pomiędzy bramą cenową a klientem, bramka cenowa będzie nadal musiała powielać wszystkie kanały w JMS Z drugiej strony, wdrożenie logiki bezpośrednio w bramie cenowej pozwala uniknąć duplikowania dużej liczby kanałów w JMS umożliwiając nam utworzenie znacznie mniejszej liczby kanałów w kolejności jednego dostawcy Gateway wyceny rejestruje się za pośrednictwem adaptera kanału C TIB jako konsumenta dla każdej wiązki każdego handlowca w systemie Następnie Gateway wyceny przekaże tylko konkretnego klienta wiadomości związane z tym konkretnym przedsiębiorcą W ten sposób używamy tylko niewielkiej liczby komunikatów na końcu JMS, maksymalizując jednocześnie Efektywność rozdziału na końcu TIB. Kompletny przepływ danych rynkowych do klienta. Dyskusja o układzie kanałów dyskusyjnych jest dobrym przykładem, jak istotne są wzorce integracyjne. Celem było określenie skuteczności korzystania z kanału wiadomości Saying you użyj wzoru wystarczająco dużo Musisz zrozumieć, jak najlepiej go wdrożyć i włączać do swojego systemu, aby rozwiązać problemy pod ręką Poza tym, przykład pokazuje siły biznesowe działające Jeśli moglibyśmy wdrożyć logikę biznesową w dowolnym z naszych składników, moglibyśmy poszedł z podejściem dla każdego przedsiębiorcy i zastosował ogólne, bardziej proste podejście z wieloma mniej kanałami. Wybieranie kanału wiadomości. Teraz poznajemy mechanikę komunikacji między komponentami Java JMS a komponentami C TIBCO, a my zobaczyliśmy jakąś wiadomość Struktura kanału, musimy zdecydować, który typ kanału wiadomości JMS należy do komponentów Java, aby komunikować się. Zanim zdecydujemy się na różne kanały wiadomości av ailable w JMS, spójrzmy na wysoki poziom przepływu wiadomości w systemie Mamy dwie bramy Pricing and Contribution komunikujące się z klientem Przepływ danych rynkowych do klienta z Gateway wyceny, który wysyła go do bramy Contribution Aplikacja kliencka wysyła wiadomość do bramy cenowej, aby zmieniać dane analityczne stosowane do każdej z nich. Bramka Contribution wysyła również wiadomości do aplikacji Klienta, przekazując stan aktualizacji cen do różnych systemów obrotu. Komunikat o przepływie systemu. Specyfikacja JMS opisuje dwa typy kanałów wiadomości, Punkt kolejowy JMS w kolejce i publikowanie-subskrybcja Temat JMS Temat Przypomnijmy, że w przypadku korzystania z subskrypcji publish-up jest umożliwienie wszystkim zainteresowanym konsumentom otrzymywania wiadomości, podczas gdy przy użyciu punktu-punkt jest zapewnienie, że tylko jeden kwalifikowany odbiorca otrzyma konkretną wiadomość. Wiele systemów wystarczyło, że rozsyła wiadomości do wszystkich aplikacji klienckich, pozostawiając każdą indywidualną aplikację klienta sam decydują się, czy przetwarzać konkretną wiadomość Nie będzie to działało dla naszej aplikacji, ponieważ w każdej aplikacji klienckiej jest duża liczba wiadomości rynkowych przesłanych do każdego klienta Jeśli transmisujemy aktualizacje danych rynkowych nieinteresownym przedsiębiorcom, niepotrzebnie marnujemy cykle procesora klienta decydują o tym, czy przetwarzać aktualizację danych rynkowych. Poczta głosowa typu punkt-punkt początkowo brzmi jak dobry wybór, ponieważ klienci wysyłają wiadomości do unikatowych serwerów i odwrotnie. Ale to było wymaganie biznesowe, które może być rejestrowane przez handlowców w połączeniu z wieloma komputerami jednocześnie Jeśli po zalogowaniu się na dwóch stacjach roboczych jednocześnie z serwerem zostanie wysłana aktualizacja punktu-punkt, tylko jeden z dwóch aplikacji klienckich otrzyma wiadomość Ponieważ tylko jeden odbiorca Kanał Point-to-Point może otrzymać określoną wiadomość Zauważ, że tylko jedna z każdej aplikacji korporacyjnej klienta korporacyjnego otrzyma wiadomość. Komunikat Point-to-Point dla Pri ce Updates. Możemy rozwiązać ten problem za pomocą wzorca listy odbiorców, który publikuje wiadomości na liście adresatów, gwarantując, że tylko klienci z listy adresatów otrzymają wiadomości. Za pomocą tego wzorca system może tworzyć listy adresatów ze wszystkimi instancjami aplikacji klienta do każdego przedsiębiorcy Wysyłanie wiadomości odnoszącej się do określonego przedsiębiorcy z kolei przesłałoby wiadomość do każdej aplikacji z listy odbiorców, co gwarantuje, że wszystkie aplikacje klienckie związane z konkretnym przedsiębiorcą otrzymają wiadomość Z wadą tego podejścia jest to, że wymaga dość bit implementacji logiki, aby zarządzać adresatami i wysyłać wiadomości. Listę rekomendowanych aktualizacji cenowych. Choć można wykonać punkt-punkt w pracy, zobaczmy, czy jest lepszy sposób Korzystanie z kanału Subskrypcja-Publikowanie, system mógłby wysyłanie wiadomości na kanałach specyficznych dla danego przedsiębiorcy, a nie konkretnych kanałów aplikacji klienta W ten sposób wszystkie aplikacje klienckie przetwarzające wiadomości aby pojedynczy przedsiębiorca otrzymywałby i przetworzył komunikat. Publish-Subscription Messaging for Updates Price. Jednakże korzystanie z Publish-Subscription Channel s polega na tym, że unikalne przetwarzanie wiadomości nie jest gwarantowane przez składniki serwera Może to być możliwe w wielu instancjach serwera składnik, który ma zostać zainicjowany, a każda instancja przetwarza tę samą wiadomość, prawdopodobnie wysyłając nieprawidłowe ceny. Zachowując przepływ informacji systemowych, tylko jeden kierunek komunikacji jest zadowalający, przy czym każda komunikacja między Serwerem a komunikacją z klientem jest zgodna z subskrypcją publish-subscribe, komunikacja z serwerem nie jest możliwa, a komunikacja klient-serwer z punktem zwrotnym jest satysfakcjonująca, podczas gdy klient-serwer nie jest. Ponieważ nie ma potrzeby używania tego samego kanału wiadomości w obu kierunkach, możemy używać każdego kanału wiadomości tylko w jednym kierunku Klient Komunikacja między serwerami będzie realizowana z punktu do punktu, podczas gdy komunikacja między serwerem a klientem zostanie wdrożona z subskrypcją publikowania Korzystając z tej kombinacji programu Message Channel s, system korzysta z bezpośredniej komunikacji z komponentami serwerów przy użyciu komunikatów punkt-punkt oraz multiemisji w celu publikowania i subskrypcji bez żadnych wad. Przepływ wiadomości z typami kanałów. Rozwiązanie problemu z wzorcami. Wzory są narzędziami i kolekcjami wzorców są skrzynkami narzędziowymi Pomagają rozwiązywać problemy Niektórzy uważają, że wzorce są użyteczne tylko podczas projektowania Po analogicznym zestawieniu narzędzi, jest to powiedzenie, że narzędzia są użyteczne tylko przy budowie domu, a nie po jego naprawieniu. że wzorce są użytecznym narzędziem w całym projekcie, gdy są dobrze stosowane W poniższych sekcjach będziemy używać tego samego procesu wyszukiwania wzorców, który użyliśmy w poprzedniej sekcji, aby rozwiązać problemy w naszym obecnie działającym systemie. Flashing Aktualizacje danych rynkowych. Tradery chcą, aby komórki tabeli migały gdy otrzymane są nowe dane rynkowe dla obligacji, wyraźnie wskazujące na zmiany Klient Java otrzymuje wiadomości z nowymi danymi, które powodują dane klienta ca che update i ostatecznie migające w tabeli Problem polega na tym, że aktualizacje są dość często Stos wątków GUI staje się przeciążony i ostatecznie zamrażanie klienta, ponieważ nie może odpowiedzieć na interakcje z użytkownikiem Zakładamy, że miganie jest zoptymalizowane i koncentruje się na przepływie danych wiadomości w procesie aktualizacji Aktualizacja danych o wydajności pokazuje, że aplikacja kliencka otrzymuje kilka aktualizacji w ciągu kilku sekund, a niektóre aktualizacje wystąpiły w odległości mniejszej niż milisekundę. Dwa wzorce, które wydają się być przyczyną spowolnienia przepływu wiadomości, są Aggregator i Message Filter. A first pomyślałem, aby wdrożyć filtr wiadomości, aby kontrolować szybkość przepływu wiadomości, wyrzucając aktualizacje otrzymane niewielką ilość czasu po wysłaniu komunikatu referencyjnego Na przykład, powiedzmy, że będziemy ignorować wiadomości w ciągu 5 milisekund od siebie Wiadomość Filtr mógłby skracać czas ostatniej akceptowalnej wiadomości i wyrzucić cokolwiek otrzymane w ciągu najbliższych 5 milliseco nds Chociaż inne aplikacje mogą nie wytrzymać utraty danych w takim stopniu, jest to całkowicie akceptowalne w naszym systemie ze względu na częstotliwość aktualizacji cen. Filtr wiadomości w czasie. Problem z tym podejściem polega na tym, że nie wszystkie pola danych są aktualizowane w tym samym czasie Każde więzy ma około 50 pól danych wyświetlanych użytkownikowi, w tym ceny Uświadamiamy sobie, że nie każde pole jest aktualizowane w każdej wiadomości Jeśli system ignoruje kolejne wiadomości, może to być wyrzucenie ważnych danych. Innym wzorem zainteresowania jest Aggregator Agregator jest używany do zarządzania uzgodnieniem wielu wiadomości powiązanych w pojedynczą wiadomość, potencjalnie redukując przepływ komunikatów Aggregator może przechowywać kopię danych obligacji z pierwszego zagregowanego komunikatu, a następnie aktualizować tylko nowe lub zmienione pola kolejne komunikaty Ostatecznie agregowane dane obligacji zostaną przekazane w wiadomości do klienta Na razie przyjmijmy, że Aggregator wyśle ​​wiadomość co 5 mil liseconds, jak Filter Message później, zbadamy kolejną alternatywę. Grupator z częściowymi kolejnymi aktualizacjami. Gregator podobnie jak każdy inny wzorzec nie jest srebrną kulą ma plusy i minusy, które trzeba zbadać Jednym z potencjalnych minusów jest wdrożenie Aggregator zmniejszy ruch komunikatów o wiele więcej w naszym przypadku tylko wtedy, gdy wiele wiadomości przychodzi w stosunkowo krótkim czasie, jeśli chodzi o tę samą wiązkę Z drugiej strony nic by nie osiągnęliśmy, gdyby klient Java otrzymywał aktualizacje tylko jednego pola na wszystkich obligacje dla przedsiębiorców Na przykład, jeśli otrzymamy 1000 wiadomości w określonym przedziale czasowym z 4 obligacjami będącymi przedmiotem zainteresowania, zredukowano przepływ wiadomości od 1000 do 4 wiadomości w tym czasie. Alternatywnie, jeśli otrzymamy 1000 wiadomości w tym samym czasie, z 750 więzi odsetek, zmniejszymy przepływ wiadomości od 1000 do 750 komunikatów stosunkowo niewielki zysk dla kwoty wysiłku Szybka analiza aktualizacji wiadomości udowodniła kapelusz klient Java otrzymuje wiele wiadomości aktualizujących pola tej samej wiązki, a więc powiązane komunikaty Więc Aggregator jest w rzeczywistości dobrą decyzją. Pozostało to, aby określić, w jaki sposób Agregator będzie wiedział, kiedy wysłać wiadomość, która została agregowana. Wzorzec opisuje kilka algorytmów dla Agregatora, aby wiedzieć, kiedy wysłać wiadomość Są to algorytmy powodujące, że agregator wysyła jego zawartość po upływie określonego czasu, po zakończeniu wszystkich wymaganych pól w zestawie danych i innych problem ze wszystkimi tymi podejściami polega na tym, że agregator kontroluje przepływ komunikatów, a nie klienta. I klient jest głównym wąskim gardłem w tym przypadku, a nie przepływem komunikatów. Ponieważ Aggregator przyjmuje odbiorców swoich oczyszczonych wiadomości klient application in this case are Event-Driven Consumer s, or consumers that rely on events from an external source We need to turn the client into a Polling Consumer or a consumer that continu ously checks for messages, so the client application can control the message flow We can do this by creating a background thread that continuously cycles through the set of bonds and updates and flashes any changes that have occurred since the last iteration This way, the client controls when messages are received and as a result, guarantees that it will never become overloaded with messages during high update periods We can easily implement this by sending a Command Message to the Aggregator initiating an update The Aggregator will respond with a Document Message containing the set of updated fields that the client will process. The choice of Aggregator over Message Filter is clearly a decision based solely on the business requirements of our system Each could help us solve our performance problems, but using the Message Filter would solve the problem at cost of the system data integrity. Major Production Crash. With the performance of the flashing fixed, we are now in production One day the entire system goes down MQSeries crashes, bringing several components down with it We struggle with the problem for a while and finally trace it back to the MQSeries dead letter queue an implementation of the Dead Letter Channel The queue grows so large that it brings down the entire server After exploring the messages in the dead letter queue we find they are all expired market data messages This is caused by slow consumers, or consumers that do not process messages fast enough While messages are waiting to be processed, they time out see the Message Expiration pattern and are sent to the Dead Letter Channel The excessive number of expired market data messages in the dead letter queue is a clear indication that the message flow is too great messages expire before the target application can consume them We need to fix the message flow and we turn to patterns for help slowing down the message flow. A reasonable first step is to explore solving this problem with the Aggregator as we recently used this pattern to solve the similar flashing market data control rate problem The system design relies on the client application to immediately forward market data update messages to the trading venues This means the system cannot wait to collect messages and aggregate them So the Aggregator must be abandoned. There are two other patterns that deal with the problem of consuming messages concurrently Competing Consumers and Message Dispatcher Starting with Competing Consumers the benefit of this pattern is the parallel processing of incoming messages This is accomplished using several consumers on the same channel Only one consumer processes each incoming message leaving the others to process successive messages Competing Consumers however, will not work for us since we are using Publish-Subscribe Channel s in server-to-client communication Competing Consumers on a Publish-Subscribe Channel channel means that all consumers process the same incoming message This results in mo re work without any gain and completely misses the goal of the pattern This approach also has to be abandoned. On the other hand, the Message Dispatcher describes an approach whereby you add several consumers to a pool Each consumer can run its own execution thread One main Message Consumer listens to the Channel and delegates the message on to an unoccupied Message Consumer in the pool and immediately returns to listening on the Message Channel This achieves the parallel processing benefit of Competing Consumers but works on Publish-Subscribe Channel s. The Message Dispatcher in context. Implementing this in our system is simple We create a single JMSListener called the Dispatcher, which contains a collection of other JMSListener s called Performers When the onMessage method of the Dispatcher is called, it in turn picks a Performer out of the collection to actually process the message The result of which is a Message Listener the Dispatcher that always returns immediately This guarantee s a steady flow of message processing regardless of the message flow rate Additionally, this works equally well on a Publish-Subscribe Channel s as it does on a Point-to-Point Channel s With this infrastructure, messages can be received by the client application at almost any rate If the client application is still slow to process the message after receiving them, the client application can deal with the delayed processing and potentially outdated market data rather than the messages expiring in the JMS Message Channel. The crash discussed in this section and the fix using the Message Dispatcher is an excellent example of the limits of applying patterns We encountered a performance problem based on a design flaw not allowing the client to process messages in parallel This greatly improved the problem, but did not completely fix it This is because the real problem was the client becoming a bottleneck This couldn t be fixed with a thousand patterns We later addressed this problem by refac toring the message flow architecture to route messages directly from the Pricing Gateway to the Contribution Gateway So patterns can help design and maintain a system, but don t necessarily make up for poor upfront design. Throughout this chapter, we have applied patterns to several different aspects of a bond trading system including solving initial upfront design problems and fixing a nearly job threatening production crash with patterns We also saw these patterns as they already exist in third party product, legacy components, and our JMS and TIBCO messaging systems Most importantly, these are real problems with the same types of architectural, technical and business problems we experience as we design and maintain our own systems Hopefully reading about applying patterns to this system helps give you a better understanding of the patterns as well as how to apply them to your own systems. Want to keep up-to-date Follow My Blog. Want to read more in depth Check out My Articles. Want to s ee me live See where I am speaking next. Find the full description of this pattern in Enterprise Integration Patterns Gregor Hohpe and Bobby Woolf ISBN 0321200683 650 pages Addison-Wesley. From Enterprise Integration to Enterprise Transformation. My new book describes how architects can play a critical role in IT transformation by applying their technical, communication, and organizational skills with 37 episodes from large-scale enterprise IT. Parts of this page are made available under the Creative Commons Attribution license You can reuse the pattern icon, the pattern name, the problem and solution statements in bold , and the sketch under this license Other portions of the text, such as text chapters or the full pattern text, are protected by copyright. Messaging Patterns Integration Patterns in Practice Case Study Bond Trading System. Imagine Trading System. Since 1993, Imagine Software has been a leading provider of investment management solutions for the global financial industry Its a ward-winning enterprise product, the Imagine Trading System and its on-demand cloud-based ASP version, is a real-time integrated trading, portfolio, and risk management solution employed by thousands of buy-side and sell-side end-users across the globe. Imagine Software s reputation of delivering competitive advantage is based upon its long track record of delivering institutional-grade functionality, broad cross-asset instrument support, and the ability to handle any trading strategy The firm consistently satisfies the diverse portfolio and risk processing, market data, regulatory, and reporting requirements of the largest global hedge funds, fund-of-funds, pension funds, asset management companies, and major brokerage firms and banks Imagine provides users with everything they need for their day-to-day operations advanced software functionality, comprehensive data management consisting of the myriad live market, credit, static data, and other elements necessary for real-time trading i n today s global markets , and end-of-day and start-of-day processing services. Maximizing Investment Returns and Managing Risk Investment decision-makers reap immediate benefits with Imagine s robust, real-time portfolio and risk management functionality, which supports their activities across all trading strategies and asset classes Key portfolio functionality includes unlimited portfolio drilldowns, real-time pricing, limits monitoring and control, plus live views of P L values and greeks, and securities tracking Risk functionality spans stress testing and historical Monte Carlo, plus intra-day portfolio VaR, factor analysis, and much more Users can easily examine exposure to shifting market prices, interest rates, volatility, yield-curve assumptions and other risks. Achieve Transparency Imagine s status as a trusted industry-standard provider of risk and portfolio reporting capabilities make it a must have resource for a wide array of financial businesses ranging from institutional i nvestment firms to start-up hedge funds Superior reporting capabilities plus complete historical data archiving enables the transparency today s investors and regulator agencies demand. Gain Operational Efficiencies clients concentrate solely on managing assets because the critical components underpinning their business processes software, market data, global security masters, corporate actions, etc are managed efficiently at Imagine s secure, high-performance data center The operational risk and cost benefits of fast implementation, automation of manual processes, seamless integration with other third-party systems, and elimination of IT support requirements are undeniable. Appears on these sections. Product and service specifications.

No comments:

Post a Comment