SlideShare a Scribd company logo
1 of 57
Integracja systemów
od strony praktycznej
Autor: Marek Horbań
Kontakt: mahh@interia.pl
Czym będzie ten wykład?
 Podzielenie się swoimi doświadczeniami
o integracji systemów
 Co oznacza „od strony praktycznej”?
- praktyczne uwagi w odniesieniu
do styli i wzorców
- problemy, błędy z praktyki
- dobre praktyki
 Czego nie będzie?
- warsztat
- case studies
 Czym jest integracja systemów
 Style integracji
 Wzorce integracji
 Apache Camel i inne technologie
 Przykład – Camel route
 Projekt integracji – co powinien zawierać
 Typowe problemy w integracji
 Błędy popełniane w integracji
Czym jest integracja systemów i
dlaczego jest trudna w realizacji
Integracja systemów to połączenie ze sobą co najmniej
dwóch niezależnych systemów dziedzinowych w taki
sposób, aby mogły wymieniać ze sobą dane lub usługi.
Integracja systemów to połączenie ze sobą co najmniej
dwóch niezależnych systemów dziedzinowych w taki
sposób, aby mogły wymieniać ze sobą dane lub usługi.
Integracja systemów nie jest tematem nowym jednak wciąż
pozostaje w centrum zainteresowania IT.
Jest to obszar trudny, gdyż:
 dziedziczy wszystkie problemy systemów rozproszonych
Jest to obszar trudny, gdyż:
 dziedziczy wszystkie problemy systemów rozproszonych
 połączenie często nieprzystających technologii lub
procedur biznesowych
Jest to obszar trudny, gdyż:
 dziedziczy wszystkie problemy systemów rozproszonych
 połączenie często nieprzystających technologii lub
procedur biznesowych
 czynnik ludzki – uzgadnianie, implementacja i testy muszą
się odbywać w porozumieniu z niezależnymi osobami /
firmami (opóźnienia)
Estymata wdrożenia integracji powinna to uwzględniać
Style integracji
File transfer
- wciąż bardzo popularne
- uniwersalne ze względu na zapis w systemie plików
- odpowiednie przy bardzo dużych danych
- potencjalnie kosztowne
Shared database
- nie zawsze możliwe - security jest problemem
- bardzo wydajne dla dużych danych
- najmniej kłopotliwe w utrzymaniu
- bezpośrednio (dblink) lub z użyciem magistrali danych
- silnie wiązanie systemów
- Oracle DB z AQ (Advanced Queuing) dopełnia możliwości
Remote Procedure Invocation (RPC)
RMI, SOAP (webservices) i inne
- dość skomplikowany
- synchroniczny (async jest kłopotliwe)
- RMI – wspiera transakcje rozproszone
- SOAP wciąż bardzo popularny, standard kontraktu -
WSDL
REST Representational State Transfer
- najpopularniekszy styl architektoniczny (z JSON i HTTP)
- bezstanowy, synchroniczny
- oparty na reprezentacji zasobów
- Swagger (OpenAPI)
Messaging
- podejście „wyślij i zapomnij”
- komunikacja asynchroniczna – luźne wiązanie systemów
- JMS (Java Message Service)
- EIP, Apache Camel
- dość złożone
- nieodpowiednie dla „real time”
Wzorce integracji
EIP – Enterprise Integration Patterns
 Enterprise Integration Patterns, Gregor
Hohpe, Bobby Woolf
- biblia nie tylko wzorców integracji, ale
identyfikująca podstawowe abstrakcje i
charakterystyki integracji, wydane w
2004 roku!
 Książka „zaimplementowana” niemal w
całości przez Apache Camel i Spring
Integration
Message Routing
Podstawowe abstrakcje integracji typu
messaging
 Channel, message, endpoint
Podstawowe abstrakcje integracji typu
messaging
 Exchange
- Event message – inOnly
- Request Reply – inOut
Wybrane wzorce integracji
 Pipes and filters
- sekwencja filtrów i procesorów
- główny wzorzec konstruowania route’y
Wybrane wzorce integracji
 Message router i content based router
- sterowanie przez header / content wiadomości
- istnieje też dynamic router – dynamiczny endpoint
końcowy
Wybrane wzorce integracji
 Splitter
- dzieli jedną wiadomość na wiele osobnych
Wybrane wzorce integracji
 Aggreagator
- najbardziej złożony wzorzec Camel
- stanowy
- wymaga m. in. correlation key, aggregation strategy oraz
completion size/timeout/predicate
Wybrane wzorce integracji
 Message broker
- centralna konfiguracja integracji
- jednolite reguły bezpieczeństwa
- może być wąskim gardłem
Wybrane wzorce integracji
 Message bus (ESB)
- model kanoniczny – jedna implementacja reguł
biznesowych
- łączy wiele systemów wej/wyj za pomocą adapterów
- można włączać/odłączać systemy
Apache Camel i inne popularne
technologie integracji
 Implementacje EIP
- Apache Camel
- Spring Integration
 Enterprise Service Bus (ESB)
- Mule ESB
- Apache ServiceMix (ActiveMQ, Camel)
- IBM Integration Bus
 Implementacje kolejek i nie tylko
- Active MQ (included Camel)
- IBM MQ
- RabbitMQ (message broker)
Apache Camel - wprowadzenie
Apache Camel jest lekką (camel core
to tylko 5MB) biblioteką opensource
implementującą EIP. Oprócz tego
dostarcza ponad 200 adapterów do
różnych
protokołów/interfejsów/systemów.
Posiada kilkadziesiąt konwerterów
formatów. Nie potrzebuje żadnego
serwera do działania. Świetnie
integruje się zarówno ze Spring jak i
CDI.
Apache Camel główne koncepcje
Apache Camel główne koncepcje
routes – fluent builder (lub XML)
Apache Camel główne koncepcje
- components
- endpoint consumer i producer
- consumer standardowy i poll consumer
Camel – przykład route’y
Pełen przykład na: https://github.com/mahhoz/camel-twitter
public class TwitterSearchRoute extends RouteBuilder {
private String searchTerm = "Poland OR Polska";
private String outputFileEnglish = "C:/out/en";
private String outputFilePolish = "C:/out/pl";
private String outputFilethers = "C:/out/others";
@Override
public void configure() throws Exception {
// setup Twitter component
TwitterSearchComponent tc = getContext().getComponent("twitter-search",
TwitterSearchComponent.class);
//removed component configuration ...
TwitterSearchEndpoint twitterEndpoint = (TwitterSearchEndpoint) tc.createEndpoint("twitter-
search://" + searchTerm);
twitterEndpoint.setDelay(4000);
// poll twitter search for new tweets
from(twitterEndpoint)
.to("log:tweet")
.process(new TwitterSearchProcessor())
.filter(onlyWellKnownUserPredicate(200))
.choice() //content base router
.when(langPredicate("PL"))
.to(getFileEndpoint(getContext(), outputFilePolish))
.when(or(langPredicate("EN"), langPredicate("EN-GB")))
.to(getFileEndpoint(getContext(), outputFileEnglish))
.otherwise()
.to(getFileEndpoint(getContext(), outputFileOthers))
.end();
}
//removed implementation of predicates...
public class AnonymizedRoute extends RouteBuilder {
public static final String DIRECT_URI = "direct:service1";
private static final String OUT_SERVICE_URI = ServiceUriBuilder.cxfUri()
.withProtocolProperty(Properties.PROTOCOL)
.withHostProperty(Properties.HOST)
.withPortProperty(Properties.PORT)
.withPathProperty("servicePath")
.build();
@EndpointInject(uri = "string-template:ws/templates/anonymized.xml")
private Endpoint stringTemplate;
@Override
public void configure() throws Exception {
Endpoint outEndpoint = CxfEndpointBuilder.createCxfEndpoint(getContext(),
OUT_SERVICE_URI)
.withEndpointConfigurer()
.withUsernameAndPassword()
.withStandardProperties(AnonymizedService.class)
.build();
// Set up general validation exception handling
onException(ValidationException.class)
.handled(true)
.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(SC_BAD_REQUEST))
.setHeader(Exchange.CONTENT_TYPE, constant("text/plain"))
.setBody(exceptionMessage())
.to(loggerEndpointFor(SYSTEM, ERROR).build());
// Set up rest configuration for these services.
restConfiguration().component("jetty").host("{{" +
CommonProperties.LOCAL_REST_HOST + "}}")
.port(CommonProperties.LOCAL_REST_INTERNAL_PORT).bindingMode(RestBindingMode.off);
rest(ROOT)
.post("incomePath").route()
.to(DIRECT_URI)
.routeId(this.getClass().getName())
.autoStartup(true)
.endRest();
from(DIRECT_URI).streamCaching()
//convert message json -> xml
.unmarshal().json(Jackson, RequestMessage.class)
.to("bean-validator:validator")
.to(stringTemplate)
.removeHeaders("*")
.marshal().jaxb(true)
.process(new StringToCxfPayloadDispatcher())
.setHeader(OPERATION_NAME, new SimpleExpression("operation"))
.to(outEndpoint)
//convert message xml -> json
.bean(ResponseMessageConverter.class)
.marshal().json(Jackson, ResponseMessage.class)
.removeHeaders("*");
}
}
Projekt integracji – dlaczego ważny
 W którym miejscu integracji jesteśmy i co z tego wynika
- oba integrowane systemy oraz komponent integracji jest
naszą / firmy własnością
- jeden z systemów jest naszą własnością i próbujemy
zintegrować się z drugim
- jesteśmy tylko integratorem – nie mamy wpływu na
integrowane systemy
Projekt integracji – dlaczego ważny
 Dlaczego projekt integracji jest tak ważny?
- potencjalnie duża liczba stron
- projekt integracji jest jedną z najczęściej czytanych
dokumentacji
- wersjonowanie
- aprobata stron
Projekt integracji – co powinien
zawierać
 Cel
 Opis
Projekt integracji – co powinien
zawierać
 Cel
 Opis
 Wskazanie systemu inicjującego
 Mapowanie modeli (osobny załącznik)
Projekt integracji – co powinien
zawierać
 Cel
 Opis
 Wskazanie systemu inicjującego
 Mapowanie modeli (osobny załącznik)
 Diagram sekwencji
 Opis kroków (opcjonalnie)
Projekt integracji – co powinien
zawierać
 Cel
 Opis
 Wskazanie systemu inicjującego
 Mapowanie modeli (osobny załącznik)
 Diagram sekwencji
 Opis kroków (opcjonalnie)
 Obsługa błędów!
- kto jest odpowiedzialny
za rozwiązanie błędnych sytuacji
Projekt integracji – co powinien
zawierać
 Cel
 Opis
 Wskazanie systemu inicjującego
 Mapowanie modeli (osobny załącznik)
 Diagram sekwencji
 Opis kroków (opcjonalnie)
 Obsługa błędów!
- kto jest odpowiedzialny
za rozwiązanie błędnych sytuacji
 Security
Projekt integracji – co powinien
zawierać
 Cel
 Opis
 Wskazanie systemu inicjującego
 Mapowanie modeli (osobny załącznik)
 Diagram sekwencji
 Opis kroków (opcjonalnie)
 Obsługa błędów!
- kto jest odpowiedzialny
za rozwiązanie błędnych sytuacji
 Security
 Wolumetria!
Typowe problemy integracji
 Wydajność
- łatwa skalowalność bezstanowych aplikacji
- Apache Kafka – superwydajny message broker
- protokoły binarne?
- a może streaming zamiast messaging (Spark
Streaming, Flink)
Typowe problemy integracji
 Transakcyjność
- XA transaction największa gwarancja w
rozproszonych systemach, wspierana przez RMI,
JMS (w pewnej mierze)
- jak zapewnić możliwie najwyższą gwarancję
transakcji w rozproszonym systemie?
- przykład systemu bankowego i przelewów
Typowe problemy integracji
 Idempotentność
- obsługa messageId w systemie docelowym
- wsparcie Camel - Idempotent Consumer wraz z
IdempotentRepository opartym na memory, file,
jdbc, jpa i inne
Typowe problemy integracji
 Synchroniczność / asynchroniczność
- kolejki (JMS)
- Camel – komponent SEDA
- w ograniczonych warunkach można zbudować
symulację synchroniczności
Typowe problemy integracji
 Zarządzanie konfiguracją
- jedna integracja może mieć od 10 do
kilkudziesięciu parametrów
- narzędzia: puppet, docker
Typowe problemy integracji
 Zarządzanie konfiguracją
- jedna integracja może mieć od 10 do
kilkudziesięciu parametrów
- narzędzia: puppet, docker
 Mapowania modeli
- przy dużej ilości mapowań - MapStruct.
Błędy popełniane w integracji
 Zbyt obszerne usługi
Błędy popełniane w integracji
 Zbyt obszerne usługi
 Ograniczenia architektoniczne pogarszające wydajność
Błędy popełniane w integracji
 Zbyt obszerne usługi
 Ograniczenia architektoniczne, pogarszające wydajność
 Bardzo sztywne wiązanie między systemami
Błędy popełniane w integracji
 Zbyt obszerne usługi
 Ograniczenia architektoniczne, pogarszające wydajność
 Bardzo sztywne wiązanie między systemami
 Niewłaściwe użycie stylu integracji RPC lub messaging
dla bardzo dużej ilości danych
Błędy popełniane w integracji
 Zbyt obszerne usługi
 Ograniczenia architektoniczne, pogarszające wydajność
 Bardzo sztywne wiązanie między systemami
 Niewłaściwe użycie stylu integracji RPC lub messaging
dla bardzo dużej ilości danych
 Implementacja integracji oparta na własnych
rozwiązaniach zamiast użyć dedykowanych technologii
jak Camel
Błędy popełniane w integracji
 Zbyt obszerne usługi
 Ograniczenia architektoniczne, pogarszające wydajność
 Bardzo sztywne wiązanie między systemami
 Niewłaściwe użycie stylu integracji RPC lub messaging
dla bardzo dużej ilości danych
 Implementacja integracji oparta na własnych
rozwiązaniach zamiast użyć dedykowanych technologii
jak Camel
 Użycie niestandardowych technologii / protokołów
Błędy popełniane w integracji
 Zbyt obszerne usługi
 Ograniczenia architektoniczne, pogarszające wydajność
 Bardzo sztywne wiązanie między systemami
 Niewłaściwe użycie stylu integracji RPC lub messaging
dla bardzo dużej ilości danych
 Implementacja integracji oparta na własnych
rozwiązaniach zamiast użyć dedykowanych technologii
jak Camel
 Użycie niestandardowych technologii / protokołów
 Zbyt skomplikowana, błędogenna sekwencja integracji
Przykład zbyt skomplikowanej sekwencji
Dziękuję za uwagę!
Pytania?

More Related Content

Similar to Integracja systemow od strony praktycznej

Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyqbeuek
 
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVC
Wzorce Repository, Unity of Work, Devexpress MVC  w architekturze Asp.net MVCWzorce Repository, Unity of Work, Devexpress MVC  w architekturze Asp.net MVC
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVCQuick-Solution
 
Nowe Trendy W Projektowaniu Aplikacji Webowych
Nowe Trendy W Projektowaniu Aplikacji WebowychNowe Trendy W Projektowaniu Aplikacji Webowych
Nowe Trendy W Projektowaniu Aplikacji WebowychMarcin Daczkowski
 
GET.NET - Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...
GET.NET -  Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...GET.NET -  Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...
GET.NET - Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...Michal Furmankiewicz
 
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Natalia Stanko
 
Integration framework dla SAP Business One
Integration framework dla SAP Business OneIntegration framework dla SAP Business One
Integration framework dla SAP Business OneAnna Lewandowska
 
Architektura aplikacji android
Architektura aplikacji androidArchitektura aplikacji android
Architektura aplikacji androidSages
 
Poland- Smart Client Technology - MTS 2005
Poland- Smart Client Technology - MTS 2005Poland- Smart Client Technology - MTS 2005
Poland- Smart Client Technology - MTS 2005Tomasz Cieplak
 
My littlemvc 2008 official
My littlemvc 2008 officialMy littlemvc 2008 official
My littlemvc 2008 officialskowronkow
 
Datapolis Process System PL
Datapolis Process System PLDatapolis Process System PL
Datapolis Process System PLDatapolis
 
Modele i metodyki wdrażania i zarządzania projektami eai
Modele i metodyki wdrażania i zarządzania projektami eaiModele i metodyki wdrażania i zarządzania projektami eai
Modele i metodyki wdrażania i zarządzania projektami eaiJaroslaw Zelinski
 
Budowanie przewagi konkurencyjnej BPM
Budowanie przewagi konkurencyjnej BPMBudowanie przewagi konkurencyjnej BPM
Budowanie przewagi konkurencyjnej BPMAlicja Sieminska
 
Podstawy SEO w Drupalu 7 - Jarosław Sobiecki
Podstawy SEO w Drupalu 7 - Jarosław SobieckiPodstawy SEO w Drupalu 7 - Jarosław Sobiecki
Podstawy SEO w Drupalu 7 - Jarosław SobieckiGrzegorz Bartman
 

Similar to Integracja systemow od strony praktycznej (20)

Platforma SOA
Platforma SOAPlatforma SOA
Platforma SOA
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVC
Wzorce Repository, Unity of Work, Devexpress MVC  w architekturze Asp.net MVCWzorce Repository, Unity of Work, Devexpress MVC  w architekturze Asp.net MVC
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVC
 
Nowe Trendy W Projektowaniu Aplikacji Webowych
Nowe Trendy W Projektowaniu Aplikacji WebowychNowe Trendy W Projektowaniu Aplikacji Webowych
Nowe Trendy W Projektowaniu Aplikacji Webowych
 
GET.NET - Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...
GET.NET -  Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...GET.NET -  Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...
GET.NET - Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...
 
Sql day2015 fts
Sql day2015 ftsSql day2015 fts
Sql day2015 fts
 
Scala
ScalaScala
Scala
 
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2
 
Integration framework dla SAP Business One
Integration framework dla SAP Business OneIntegration framework dla SAP Business One
Integration framework dla SAP Business One
 
NET flow
NET flowNET flow
NET flow
 
Architektura aplikacji android
Architektura aplikacji androidArchitektura aplikacji android
Architektura aplikacji android
 
Poland- Smart Client Technology - MTS 2005
Poland- Smart Client Technology - MTS 2005Poland- Smart Client Technology - MTS 2005
Poland- Smart Client Technology - MTS 2005
 
JavaEE + OSGi
JavaEE + OSGiJavaEE + OSGi
JavaEE + OSGi
 
Testowanie na 101 sposobów
Testowanie na 101 sposobówTestowanie na 101 sposobów
Testowanie na 101 sposobów
 
My littlemvc 2008 official
My littlemvc 2008 officialMy littlemvc 2008 official
My littlemvc 2008 official
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
Datapolis Process System PL
Datapolis Process System PLDatapolis Process System PL
Datapolis Process System PL
 
Modele i metodyki wdrażania i zarządzania projektami eai
Modele i metodyki wdrażania i zarządzania projektami eaiModele i metodyki wdrażania i zarządzania projektami eai
Modele i metodyki wdrażania i zarządzania projektami eai
 
Budowanie przewagi konkurencyjnej BPM
Budowanie przewagi konkurencyjnej BPMBudowanie przewagi konkurencyjnej BPM
Budowanie przewagi konkurencyjnej BPM
 
Podstawy SEO w Drupalu 7 - Jarosław Sobiecki
Podstawy SEO w Drupalu 7 - Jarosław SobieckiPodstawy SEO w Drupalu 7 - Jarosław Sobiecki
Podstawy SEO w Drupalu 7 - Jarosław Sobiecki
 

Integracja systemow od strony praktycznej

  • 1. Integracja systemów od strony praktycznej Autor: Marek Horbań Kontakt: mahh@interia.pl
  • 2. Czym będzie ten wykład?  Podzielenie się swoimi doświadczeniami o integracji systemów  Co oznacza „od strony praktycznej”? - praktyczne uwagi w odniesieniu do styli i wzorców - problemy, błędy z praktyki - dobre praktyki  Czego nie będzie? - warsztat - case studies
  • 3.  Czym jest integracja systemów  Style integracji  Wzorce integracji  Apache Camel i inne technologie  Przykład – Camel route  Projekt integracji – co powinien zawierać  Typowe problemy w integracji  Błędy popełniane w integracji
  • 4. Czym jest integracja systemów i dlaczego jest trudna w realizacji
  • 5. Integracja systemów to połączenie ze sobą co najmniej dwóch niezależnych systemów dziedzinowych w taki sposób, aby mogły wymieniać ze sobą dane lub usługi.
  • 6. Integracja systemów to połączenie ze sobą co najmniej dwóch niezależnych systemów dziedzinowych w taki sposób, aby mogły wymieniać ze sobą dane lub usługi. Integracja systemów nie jest tematem nowym jednak wciąż pozostaje w centrum zainteresowania IT.
  • 7. Jest to obszar trudny, gdyż:  dziedziczy wszystkie problemy systemów rozproszonych
  • 8. Jest to obszar trudny, gdyż:  dziedziczy wszystkie problemy systemów rozproszonych  połączenie często nieprzystających technologii lub procedur biznesowych
  • 9. Jest to obszar trudny, gdyż:  dziedziczy wszystkie problemy systemów rozproszonych  połączenie często nieprzystających technologii lub procedur biznesowych  czynnik ludzki – uzgadnianie, implementacja i testy muszą się odbywać w porozumieniu z niezależnymi osobami / firmami (opóźnienia) Estymata wdrożenia integracji powinna to uwzględniać
  • 10. Style integracji File transfer - wciąż bardzo popularne - uniwersalne ze względu na zapis w systemie plików - odpowiednie przy bardzo dużych danych - potencjalnie kosztowne
  • 11. Shared database - nie zawsze możliwe - security jest problemem - bardzo wydajne dla dużych danych - najmniej kłopotliwe w utrzymaniu - bezpośrednio (dblink) lub z użyciem magistrali danych - silnie wiązanie systemów - Oracle DB z AQ (Advanced Queuing) dopełnia możliwości
  • 12. Remote Procedure Invocation (RPC) RMI, SOAP (webservices) i inne - dość skomplikowany - synchroniczny (async jest kłopotliwe) - RMI – wspiera transakcje rozproszone - SOAP wciąż bardzo popularny, standard kontraktu - WSDL
  • 13. REST Representational State Transfer - najpopularniekszy styl architektoniczny (z JSON i HTTP) - bezstanowy, synchroniczny - oparty na reprezentacji zasobów - Swagger (OpenAPI)
  • 14. Messaging - podejście „wyślij i zapomnij” - komunikacja asynchroniczna – luźne wiązanie systemów - JMS (Java Message Service) - EIP, Apache Camel - dość złożone - nieodpowiednie dla „real time”
  • 15. Wzorce integracji EIP – Enterprise Integration Patterns  Enterprise Integration Patterns, Gregor Hohpe, Bobby Woolf - biblia nie tylko wzorców integracji, ale identyfikująca podstawowe abstrakcje i charakterystyki integracji, wydane w 2004 roku!  Książka „zaimplementowana” niemal w całości przez Apache Camel i Spring Integration
  • 17. Podstawowe abstrakcje integracji typu messaging  Channel, message, endpoint
  • 18. Podstawowe abstrakcje integracji typu messaging  Exchange - Event message – inOnly - Request Reply – inOut
  • 19. Wybrane wzorce integracji  Pipes and filters - sekwencja filtrów i procesorów - główny wzorzec konstruowania route’y
  • 20. Wybrane wzorce integracji  Message router i content based router - sterowanie przez header / content wiadomości - istnieje też dynamic router – dynamiczny endpoint końcowy
  • 21. Wybrane wzorce integracji  Splitter - dzieli jedną wiadomość na wiele osobnych
  • 22. Wybrane wzorce integracji  Aggreagator - najbardziej złożony wzorzec Camel - stanowy - wymaga m. in. correlation key, aggregation strategy oraz completion size/timeout/predicate
  • 23. Wybrane wzorce integracji  Message broker - centralna konfiguracja integracji - jednolite reguły bezpieczeństwa - może być wąskim gardłem
  • 24. Wybrane wzorce integracji  Message bus (ESB) - model kanoniczny – jedna implementacja reguł biznesowych - łączy wiele systemów wej/wyj za pomocą adapterów - można włączać/odłączać systemy
  • 25. Apache Camel i inne popularne technologie integracji  Implementacje EIP - Apache Camel - Spring Integration  Enterprise Service Bus (ESB) - Mule ESB - Apache ServiceMix (ActiveMQ, Camel) - IBM Integration Bus  Implementacje kolejek i nie tylko - Active MQ (included Camel) - IBM MQ - RabbitMQ (message broker)
  • 26. Apache Camel - wprowadzenie Apache Camel jest lekką (camel core to tylko 5MB) biblioteką opensource implementującą EIP. Oprócz tego dostarcza ponad 200 adapterów do różnych protokołów/interfejsów/systemów. Posiada kilkadziesiąt konwerterów formatów. Nie potrzebuje żadnego serwera do działania. Świetnie integruje się zarówno ze Spring jak i CDI.
  • 28. Apache Camel główne koncepcje routes – fluent builder (lub XML)
  • 29. Apache Camel główne koncepcje - components - endpoint consumer i producer - consumer standardowy i poll consumer
  • 30. Camel – przykład route’y Pełen przykład na: https://github.com/mahhoz/camel-twitter public class TwitterSearchRoute extends RouteBuilder { private String searchTerm = "Poland OR Polska"; private String outputFileEnglish = "C:/out/en"; private String outputFilePolish = "C:/out/pl"; private String outputFilethers = "C:/out/others"; @Override public void configure() throws Exception { // setup Twitter component TwitterSearchComponent tc = getContext().getComponent("twitter-search", TwitterSearchComponent.class); //removed component configuration ... TwitterSearchEndpoint twitterEndpoint = (TwitterSearchEndpoint) tc.createEndpoint("twitter- search://" + searchTerm); twitterEndpoint.setDelay(4000); // poll twitter search for new tweets from(twitterEndpoint) .to("log:tweet") .process(new TwitterSearchProcessor()) .filter(onlyWellKnownUserPredicate(200)) .choice() //content base router .when(langPredicate("PL")) .to(getFileEndpoint(getContext(), outputFilePolish)) .when(or(langPredicate("EN"), langPredicate("EN-GB"))) .to(getFileEndpoint(getContext(), outputFileEnglish)) .otherwise() .to(getFileEndpoint(getContext(), outputFileOthers)) .end(); } //removed implementation of predicates...
  • 31. public class AnonymizedRoute extends RouteBuilder { public static final String DIRECT_URI = "direct:service1"; private static final String OUT_SERVICE_URI = ServiceUriBuilder.cxfUri() .withProtocolProperty(Properties.PROTOCOL) .withHostProperty(Properties.HOST) .withPortProperty(Properties.PORT) .withPathProperty("servicePath") .build(); @EndpointInject(uri = "string-template:ws/templates/anonymized.xml") private Endpoint stringTemplate; @Override public void configure() throws Exception { Endpoint outEndpoint = CxfEndpointBuilder.createCxfEndpoint(getContext(), OUT_SERVICE_URI) .withEndpointConfigurer() .withUsernameAndPassword() .withStandardProperties(AnonymizedService.class) .build(); // Set up general validation exception handling onException(ValidationException.class) .handled(true) .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(SC_BAD_REQUEST)) .setHeader(Exchange.CONTENT_TYPE, constant("text/plain")) .setBody(exceptionMessage()) .to(loggerEndpointFor(SYSTEM, ERROR).build());
  • 32. // Set up rest configuration for these services. restConfiguration().component("jetty").host("{{" + CommonProperties.LOCAL_REST_HOST + "}}") .port(CommonProperties.LOCAL_REST_INTERNAL_PORT).bindingMode(RestBindingMode.off); rest(ROOT) .post("incomePath").route() .to(DIRECT_URI) .routeId(this.getClass().getName()) .autoStartup(true) .endRest(); from(DIRECT_URI).streamCaching() //convert message json -> xml .unmarshal().json(Jackson, RequestMessage.class) .to("bean-validator:validator") .to(stringTemplate) .removeHeaders("*") .marshal().jaxb(true) .process(new StringToCxfPayloadDispatcher()) .setHeader(OPERATION_NAME, new SimpleExpression("operation")) .to(outEndpoint) //convert message xml -> json .bean(ResponseMessageConverter.class) .marshal().json(Jackson, ResponseMessage.class) .removeHeaders("*"); } }
  • 33. Projekt integracji – dlaczego ważny  W którym miejscu integracji jesteśmy i co z tego wynika - oba integrowane systemy oraz komponent integracji jest naszą / firmy własnością - jeden z systemów jest naszą własnością i próbujemy zintegrować się z drugim - jesteśmy tylko integratorem – nie mamy wpływu na integrowane systemy
  • 34. Projekt integracji – dlaczego ważny  Dlaczego projekt integracji jest tak ważny? - potencjalnie duża liczba stron - projekt integracji jest jedną z najczęściej czytanych dokumentacji - wersjonowanie - aprobata stron
  • 35. Projekt integracji – co powinien zawierać  Cel  Opis
  • 36. Projekt integracji – co powinien zawierać  Cel  Opis  Wskazanie systemu inicjującego  Mapowanie modeli (osobny załącznik)
  • 37. Projekt integracji – co powinien zawierać  Cel  Opis  Wskazanie systemu inicjującego  Mapowanie modeli (osobny załącznik)  Diagram sekwencji  Opis kroków (opcjonalnie)
  • 38. Projekt integracji – co powinien zawierać  Cel  Opis  Wskazanie systemu inicjującego  Mapowanie modeli (osobny załącznik)  Diagram sekwencji  Opis kroków (opcjonalnie)  Obsługa błędów! - kto jest odpowiedzialny za rozwiązanie błędnych sytuacji
  • 39. Projekt integracji – co powinien zawierać  Cel  Opis  Wskazanie systemu inicjującego  Mapowanie modeli (osobny załącznik)  Diagram sekwencji  Opis kroków (opcjonalnie)  Obsługa błędów! - kto jest odpowiedzialny za rozwiązanie błędnych sytuacji  Security
  • 40. Projekt integracji – co powinien zawierać  Cel  Opis  Wskazanie systemu inicjującego  Mapowanie modeli (osobny załącznik)  Diagram sekwencji  Opis kroków (opcjonalnie)  Obsługa błędów! - kto jest odpowiedzialny za rozwiązanie błędnych sytuacji  Security  Wolumetria!
  • 41.
  • 42.
  • 43. Typowe problemy integracji  Wydajność - łatwa skalowalność bezstanowych aplikacji - Apache Kafka – superwydajny message broker - protokoły binarne? - a może streaming zamiast messaging (Spark Streaming, Flink)
  • 44. Typowe problemy integracji  Transakcyjność - XA transaction największa gwarancja w rozproszonych systemach, wspierana przez RMI, JMS (w pewnej mierze) - jak zapewnić możliwie najwyższą gwarancję transakcji w rozproszonym systemie? - przykład systemu bankowego i przelewów
  • 45. Typowe problemy integracji  Idempotentność - obsługa messageId w systemie docelowym - wsparcie Camel - Idempotent Consumer wraz z IdempotentRepository opartym na memory, file, jdbc, jpa i inne
  • 46. Typowe problemy integracji  Synchroniczność / asynchroniczność - kolejki (JMS) - Camel – komponent SEDA - w ograniczonych warunkach można zbudować symulację synchroniczności
  • 47. Typowe problemy integracji  Zarządzanie konfiguracją - jedna integracja może mieć od 10 do kilkudziesięciu parametrów - narzędzia: puppet, docker
  • 48. Typowe problemy integracji  Zarządzanie konfiguracją - jedna integracja może mieć od 10 do kilkudziesięciu parametrów - narzędzia: puppet, docker  Mapowania modeli - przy dużej ilości mapowań - MapStruct.
  • 49. Błędy popełniane w integracji  Zbyt obszerne usługi
  • 50. Błędy popełniane w integracji  Zbyt obszerne usługi  Ograniczenia architektoniczne pogarszające wydajność
  • 51. Błędy popełniane w integracji  Zbyt obszerne usługi  Ograniczenia architektoniczne, pogarszające wydajność  Bardzo sztywne wiązanie między systemami
  • 52. Błędy popełniane w integracji  Zbyt obszerne usługi  Ograniczenia architektoniczne, pogarszające wydajność  Bardzo sztywne wiązanie między systemami  Niewłaściwe użycie stylu integracji RPC lub messaging dla bardzo dużej ilości danych
  • 53. Błędy popełniane w integracji  Zbyt obszerne usługi  Ograniczenia architektoniczne, pogarszające wydajność  Bardzo sztywne wiązanie między systemami  Niewłaściwe użycie stylu integracji RPC lub messaging dla bardzo dużej ilości danych  Implementacja integracji oparta na własnych rozwiązaniach zamiast użyć dedykowanych technologii jak Camel
  • 54. Błędy popełniane w integracji  Zbyt obszerne usługi  Ograniczenia architektoniczne, pogarszające wydajność  Bardzo sztywne wiązanie między systemami  Niewłaściwe użycie stylu integracji RPC lub messaging dla bardzo dużej ilości danych  Implementacja integracji oparta na własnych rozwiązaniach zamiast użyć dedykowanych technologii jak Camel  Użycie niestandardowych technologii / protokołów
  • 55. Błędy popełniane w integracji  Zbyt obszerne usługi  Ograniczenia architektoniczne, pogarszające wydajność  Bardzo sztywne wiązanie między systemami  Niewłaściwe użycie stylu integracji RPC lub messaging dla bardzo dużej ilości danych  Implementacja integracji oparta na własnych rozwiązaniach zamiast użyć dedykowanych technologii jak Camel  Użycie niestandardowych technologii / protokołów  Zbyt skomplikowana, błędogenna sekwencja integracji

Editor's Notes

  1. Tendencja wzrostowa
  2. Przykład wielu iteracji wdrożenia trwający 4 tyg, a implementacja tylko 1 tydzień
  3. Niedoceniany styl integracji
  4. Krótkie porównanie SOAP i REST
  5. Brakuje jednego z najważniejszych wzroców – message broker ServiceActivator – jeden z przykładów niepotrzebnego wzorca
  6. Wydaje się że to tylko odwrotność splittera, ale złożoność jest znacznie, znacznie większa
  7. Kilka message brokerów dla różnych zastosowań (stanowe, bezstanowe, wewnętrzne systemy, zewnętrzne systemy)
  8. Przykład ESB z 4 systemami dziedzinowymi i modelem kanonicznym + system raportowy + frontend
  9. Bardzo duża ilośc technologii i ich konfiguracji Mule (connectors, routing, transaction, management, transformation, message broker, queuing, visual tools)
  10. Intuicja Camela. Różni się od innych bibliotek javowych
  11. Realny przykład - zanonimizowany
  12. Drugi -(częsty przypadek)
  13. Przykłady diagramu sekwencji - zanonimizowane
  14. Kafka – dostarczenie wiadomości „przynajmniej raz” protokoły binarne: Apache Avro, Apache Thrift, Google Protocol Buffer
  15. Wyjaśnić po co asynchroniczność
  16. - typowe parametry konfiguracyjne dla integracji: parametry endpointów (host, port, path + dodatkowe opcje), credentials: username, password, tokens, certificates itp, parametry techniczne: timeout, retry count, parametry biznesowe. - szacunkowa liczba parametrów = ilość integracji x ilość środowisk x śr. Ilość parametrów integracji – piekło zarządzania konfiguracją
  17. Szczególnie dotyczy SOAP
  18. Przykład komunikacja binarna z wersjonowaniem niezależnie od interfejsu
  19. Szczególnie bolesne w integracjach
  20. Przykład na następnej stronie