Školení pro architekty a vývojáře konzumentů služeb Červen 2018
Účel školení Metodická podpora návrhářů a vývojářů systémů konzumujících služby NSN Vysvětlení principů architektury NSN Základní vlastnosti a role sběrnice ESB v NSN Přehled použitých komponent pro ESB Principy a přehled sdílených služeb na ESB Metodika modelování služeb Proces registrace systému jakožto konzumenta služby Způsob definice požadavků na nové služby Odkazy na dokumentaci NSN
Výchozí předpoklady Školení je určeno pro: Softwarové architekty systémů konzumujících služby do NSN Vedoucí vývojáře systémů konzumujících služby NSN Předpokládané znalosti a zkušenosti: Architekt Principy SOA Standardní integrační patterny (EAI) Znalost protokol a standardů http(s), SOAP, JMS, WS-S, OAuth2, LDAP UML + Enterprise Architect Vývojář OOP WS/SOAP/JMS XML, XSD
Vlastnosti NSN Podpora modularity systému Bezpečné doručování zpráv Rozšiřitelnost, univerzální systém Škálovatelnost Snadná konfigurace Snadné monitorování
Diagram konzumování služeb NSN Nový systém NDIC Diagram konzumování služeb NSN
Obecný účel ESB
Špagetový anti-pattern Monolitické vs. modulární aplikace Rozpad původního NSN na moduly poskytující služby Možnost zapojení dalších modulů (konzumenti dat, poskytovatelé služeb) Princip SOA Exponencielní počet spojů bez ESB Zprostředkování komunikace s vnějším světem (lineární nárůst) Vzájemná komunikace modulů (exponenciální nárůst)
Špagetový anti-pattern Externí systémy Stávající NDIC
Špagetový anti-pattern Externí systémy NSN Modul 1 Modul 2 Modul 3 Modul 4 Modul 5 Modul N
Špagetový anti-pattern Externí systémy NSN ESB Ext/Int Mod 1 Mod 2 Mod3 Mod 4 Mod 5 Mod N
Formáty, protokoly, jazyky Otevřenost vůči vnějšímu i vnitřnímu světu NSN SOAP vs REST JSON vs XML ESB Ext/Int HTTP(s), JMS, MQTT… Java, C#, SQL, Typescript, R…
Fronty nedoručitelných zpráv Integrační patterny Message routing Publish/subscribe Obohacování zpráv Garantované doručení Fronty nedoručitelných zpráv
Role ESB v NSN
Role ESB v NSN Technická integrace – zajištění přenosu zpráv Podpora modularity systému – HUB, PIPE, CED Bezpečné doručování zpráv Správa a konfigurovatelnost Monitoring datových toků – metriky služeb, procesů, front
Zajištění přenosu zpráv Cluster pro ESB Ext i ESB Int Řízení toků zpráv Asynchronní doručení datových vstupů Implementace proxy služeb
HUB, PIPE, CED HUB PIPE CED (Custom endpoint delivery) Distribuce dat na více endpointů Customizovatelné seznamy adresátů PIPE Zpráva zpracování sadou po sobě jdoucích služeb Customizovatelné flow volání CED (Custom endpoint delivery) Endpoint definován v hlavičce zprávy Umožňuje modulu oslovit list adresátů se specifickými daty Dva kroky: Získání listu z konfigurace Odeslání na endpoint pomocí reference
Garantované doručení zpráv Fronta příchozích zpráv (mezi ESB Ext a ESB Int) Vlastní zpracování zprávy Fronta odchozích zpráv per endpoint Konfigurovatelný počet opakování
Centrální konfigurace WSO2 Governance Registry pro centrální správu konfigurace ESB Služby Zdroje (WSDL, XSD) Endpointy Sekvence Řízení konfigurace v rámci nasazení Ad-hoc změny pomocí GUI Zprostředkování GR modulům Seznamy Nastavení
Monitorování datových toků Služby Četnost, časy Fronty Naplnění, čištění Procesy Počty, časy, chyby
Platforma WSO2
Platforma WSO2 Platforma a produkty v rámci ní ESB EI – podporované formáty, protokoly, patterny
WSO2 WSO2 je plně open source řešení. Produktové portfolio měnící se v čase podle aktuálních trendů Java based Produktová roadmap plánovaná cca na 6 měsíců dopředu
Použité produkty platformy WSO2 Enteprise Integrator (ESB) Enteprise Integrator tvoří kostru celého navrhovaného řešení Identity server Slouží pro správu identit (jako jsou zaměstnanci, dodavatelé, partneři a zákazníci) pro systémy poskytující služby nebo aplikace Governance registry Slouží k ukládání konfiguračních dat (např. endpoint, wsdl, xsd), které se sdílejí mezi několika instancemi WSO2 produktu Stream processor Slouží pro statistické vyhodnocování provozu ESB sběrnic (četnosti, objemy a odezvy služeb)
Komunikace s ESB
ESB Ext, Int Zabezpečení systému vůči vnějším hrozbám Propojení vnitřních modulů
Použití EI v rámci NDIC
Externí komunikace
Interní komunikace
SoapUI: Autorizace volání EI: Nastavení policy PÚ Autorizace WS Služby jsou zabezpečeny pomocí standardu Web Service Security (WSS) s využitím prostého usernameToken patternu, nebo pomocí http-basic autentizace (přeloží se na WSS) Formátové kontroly jsou dány WSDL a policy soubory definující službu
Autorizace WS
Autorizace WS Oprávněné účty jsou udržovány v centrálním user-store v AD infrastruktury ŘSD, na který je napojen Identity Server. Autentizace probíhá prostřednictvím Identity serveru (SAML), nebo přímo AD (WS) Přístup k webovým službám je spravován na úrovni rolí uživatelů - tzv. role based policy
Uživatelé, role a oprávnění Typy uživatelských rolí Operátor Technický dohled Manažer – externí uživatel Administrátor systému NDIC Deployer Administrátor ESB
Zajištění dostupnosti Active-Active komponenty Active-Passive komponenty
Load balancing Load balancing s následujícími požadavky na funkčnost: Odolnost/robustnost Ochranu proti DDOS útokům HTTPS terminace Load balancing (minimálně round-robin algoritmus) Detekce nedostupnosti endpoint (minimálně na základě opakovaných negativních odpovědí serveru) Reverse proxy – mapování URL služeb
Load balancing ESB
Load balancing ESB je load-balancováno na dvou úrovních Externí ESB - Externí load-balancer zajišťuje směrování trafficu přicházejícího zejména z externích systémů Vnitřní komponenty ESB - Interní load-balancer zajišťuje směřování trafficu přicházejícího z interních systémů NDIC, Funkčních modulů, ale obsluhuje i komunikaci komponent ESB mezi sebou
Záložní lokalita Infrastruktura lokality pro přechod do sekundární lokality se skládá z Diskové pole Servery (fyzický HW) Virtualizační centrum, konfigurace a recovery management
Bezpečné doručování zpráv Bezpečné doručení zprávy je zaručeno užitím EIP patternu "Guaranteed Delivery" Odesílatel neodešle zprávu přímo příjemci. Namísto toho odesílatel uloží zprávu do jms queue v rámci ActiveMQ brokera. Zpráva je typu persistent. Tato zpráva je nejprve uložena do jdbc ActiveMQ. Tam je do té doby, dokud není úspěšně odeslána koncovému příjemci
Přehled patternů a jejich význam Async data transform (ServerInput) Tento pattern představuje transformaci dat vstupní zprávy, kterou asynchronně rozešle k určeným adresátům HUB - External data publish/Internal Message Tento pattern představuje požadavek "nějaké externí služby" (může jí být policie - například omezení v provozu) na rozeslání notifikace. Tato notifikace má obecně více adresátů Pipe Služby implementující tento pattern přijatou zprávu uloží do JMS fronty, potvrdí přijetí a odešlou zprávu na backend systém
Přehled patternů a jejich význam Simple proxy (EXT, INT) Tento pattern představuje čistě přeposílač vstupní zprávy bez transformace dat CED – Custom Endpoint Delivery Tento pattern představuje přeposílač vstupní zprávy bez transformace dat. Zpráva se posílá na endpoint na základe identifikátoru v http hlavičce
Logy – ELK mechanismus
Kibana – přehledy, filtry Monitorovací dashboard (Kibana) obsahuje web aplikaci pro administrátory. Webová aplikace bude obsahovat grafické zobrazení vybraných statistik Z tohoto dashboardu bude možné získat mimo jiné tyto informace Kolikrát byla služba volána v daném časovém intervalu a jakým uživatelem Který uživatel a kolikrát se přihlašoval se špatnými přihlašovacími údaji Jako skončilo volání služby Výpis volaní služeb, které skončily chybou Kterými částmi procesu (aktivitami) volání prošlo a kde skončilo Jaká je průměrná délka volání služby nebo její části
Kibana
CorrelationId Logy aplikací jsou unifikovány do jednotného formátu tak, aby bylo následně možné v nich vyhledávat napříč systémy, nebo sledovat zpracování konkrétní události v čase Vlastní message pak vždy obsahuje údaje zaznamenané vlastním producentem logu Jedním z těchto údajů je correlationId (pro události iniciované mimo ESB)
Sledované metriky PÚ Základní metriky Stav služeb, front Kibana: Sledování logů Monitoring Dashboard: Procesy, fronty PÚ Sledované metriky Základní metriky Stav služeb, front Sledované procesy Monitoring Dashboard
Registrace nového konzumenta
Interface agreement Model služby WSDL Anotované XSD Ukázka request/response SoapUI/JMeter projekt pro otestování
Proces registrace pro konzumováni WS Nastavení sítové infrastruktury Vytvoření systémového účtu Zařazení do skupiny Získání certifikátu pro komunikaci pomocí SSL
Proces registrace do publish/subscribe služeb Implementace WS pro dané rozhraní dle interface agreement Poskytnutí URL a WSDL pro kontrolu Přidělení systémového účtu pro ESB Poskytnutá SSL certifikátu pro komunikaci s WS Konfigurace HUB služby
Požadavek na novou službu
Specifikace služby Odůvodnění Zdrojový systém dat Povaha dat (binární, textová, strukturovaná) Protokol komunikace Formát komunikace Odhad počtu volání
Praktická ukázka vytvoření klienta služby
Příprava vzorového projektu Vývoj klienta služby EI PÚ Příprava vzorového projektu Git repository Příprava vývojového prostředí – IDE Příprava podkladů pro volání služby Stažení WSDL Ověření systémového účtu SoapUI test
Vytvoření klienta služby Vygenerování klienta dle WSDL Implementace jednoduchého requestu a zpracování response Ověření funkce
Build a nasazení Příprava balíčku Publikace balíčku do artifactory ŘSD Nasazení balíčku do TST prostředí
Integrační test Vytvoření testu Příprava testovacích dat Integrace testu do CI Realizace testu
Děkujeme za pozornost