Apache NIFI — Praktiline ĂŒlevaade vĂ”imalustest

Sissejuhatus

Kuid olen oma praeguses töökohas pidanud selle tehnoloogiaga tutvuma. Alustan vĂ€ikese taustaga. tuntud sĂŒsteemi. All integraatsiooni all mĂ”eldi, et see tuntud sĂŒsteem saadab meile HTTP kaudu pĂ€ringud kindlale lĂ”pp-punktile, ja meie, nagu see ei tundu kummaline, saadame tagasi vastuseid SOAP-sĂ”numina. Tundub, et kĂ”ik on lihtne ja triviaalne. Sellest jĂ€reldub, et on vajalik...

Ülesanne

Loo 3 teenust. Esimene neist on Andmebaasi uuendamise teenus. See teenus uuendab andmeid andmebaasis ja genereerib CSV formaadis faili, kui saavad uued andmed vĂ€listest sĂŒsteemidest, et edastada see jĂ€rgmisesse sĂŒsteemi. KĂ”neleja on teise teenuse — FTP edastamise teenuse lĂ”pp-punkt, mis saab edastatud faili, valideerib selle ja salvestab FTP kaudu failide salvestusse. Kolmas teenus — Andmete edastamise teenus tarbijale, töötab asĂŒnkroonselt kahe esimese teenusega. See vĂ”tab vastu pĂ€ringu vĂ€listest sĂŒsteemidest, et saada ĂŒlal mainitud faili ning vĂ”tab valmis vastusfaili, muudab seda (uuendab id, description, linkToFile vĂ€ljad) ja saadab vastuse SOAP sĂ”numina. Seega on olukord jĂ€rgmine: esimesed kaks teenust alustavad oma tööd ainult siis, kui uuendamiseks on andmed saabunud. Kolmas teenus töötab pidevalt, kuna informatsiooni tarbijaid on palju, umbes 1000 pĂ€ringut andmete saamiseks minutis. Teenused on pidevalt saadaval ja nende instantsid asuvad erinevates keskkondades, nagu test, demo, eeltootmine ja tootmine. Allpool on esitatud nende teenuste töö schema. Selgitan kohe, et mĂ”ned detailid on lihtsustatud, et vĂ€ltida liigset keerukust.

Apache NIFI — Praktiline ĂŒlevaade vĂ”imalustest

Tehniline sĂŒvenemine

Probleemi lahendamise planeerimisel otsustasime esmalt luua Java rakendusi, kasutades Springi raamistikku, Nginx'i koormuse tasakaalustajat, PostgreSQL andmebaasi ja muid tehnilisi ja vÀhem tehnilisi asju. Kuna aega tehnilise lahenduse vÀljatöötamiseks oli, vÔimaldas see kaaluda ka teisi lÀhenemisviise, ja meie tÀhelepanu köitis teatud ringkondades populaarne tehnoloogia Apache NIFI. TÔeliselt, see tehnoloogia aitas meil mÀrgata neid kolme teenust. Selles artiklis kirjeldatakse faili edastamise teenuse ja andmete edastamise teenuse arendamist, kuid kui artikkel meeldib, kirjutan ka andmete uuendamise teenusest andmebaasis.

Mis see on

NIFI on jaotatud arhitektuur kiireks paralleelseks andmete laadimiseks ja töötlemiseks, suure hulgapluginatega allikatelt ja teisendustelt, konfigureerimise versioonimine ja palju muud. Tore boonus on see, et seda on vĂ€ga lihtne kasutada. Lihtsaid protsesse, nagu getFile, sendHttpRequest ja teised, saab kujutada ruutudena. Iga ruut esindab mingit protsessi, mille interaktsiooni saab nĂ€ha alloleval joonisel. TĂ€iendav dokumentatsioon protsesside seadistamise kohta on kirjutatud siit , venekeelsetele kasutajatele — siit. Dokumentatsioonis on suurepĂ€raselt kirjeldatud, kuidas NIFI lahti pakkida ja kĂ€ivitada, samuti kuidas luua protsesse, need ongi ruudud
Artikli kirjutamise idee tuli pÀrast pikaajalist teabe otsimist ja struktureerimist, et muuta see millegiks arusaadavaks, samuti soovist veidi kergendada tulevaste arendajate elu.

NĂ€ide

Kuidas ruudud omavahel suhtlevad, on ĂŒksikasjalikult illustreeritud jĂ€rgmistest etappidest. Üldine skeem on ĂŒsna lihtne: saadame HTTP pĂ€ringu (teoorias koos failiga pĂ€ringu Ă”ppusena. NIFI vĂ”imaluste demonstreerimiseks algab selles nĂ€ites pĂ€ring protsessi, mis saadab faili kohalikust failihaldusest), seejĂ€rel saadame tagasi vastuse, et pĂ€ring on saadud, samal ajal kui algab faili hankimise protsess failihaldusest ja seejĂ€rel faili edastamine FTP kaudu teise failihalduse. Oluline on mĂ€rkida, et protsessid suhtlevad ĂŒksteisega tĂ€nu nn flowFile'ile. See on NIFI pĂ”hiolukord, mis salvestab atribuute ja sisu. Sisu tĂ€hendab andmeid, mis esindavad voolufaili. TeisisĂ”nu, kui saate faili ĂŒhest ruudust ja edastate selle teise, on sisuks teie fail.

Apache NIFI — Praktiline ĂŒlevaade vĂ”imalustest

Nagu vĂ”ite mĂ€rgata, on sellel joonisel kujutatud ĂŒldine protsess. HandleHttpRequest — vĂ”tab vastu pĂ€ringud, ReplaceText — genereerib vastuse keha, HandleHttpResponse — edastab vastuse. FetchFile — saab faili failihaldusest ja edastab selle ruudule PutSftp — salvestab selle faili FTP-sse, mÀÀratud aadressile. NĂŒĂŒd rÀÀgime sellest protsessist lĂ€hemalt.

Antud juhul on request kÔikide algus. Vaatame selle konfiguratsiooniparameetreid.

Apache NIFI — Praktiline ĂŒlevaade vĂ”imalustest

Siin on kĂ”ik ĂŒsna banaalne, vĂ€lja arvatud StandartHttpContextMap — see on teenus, mis vĂ”imaldab saata ja vastu vĂ”tta pĂ€ringuid. Üksikasjalikumalt ja isegi nĂ€idetega saab vaadata — siit

JĂ€rgmisena vaatame ReplaceText ruudu konfiguratsiooniparameetreid. Siin on tĂ€helepanu pöörata ReplacementValue'le — see on see, mis kasutajale vastusena tagasi tuleb. Seadetest saab reguleerida logimise taset, logisid saab vaadata {kuhu on Nifi lahti pakitud}/nifi-1.9.2/logs, seal on ka failure/success parameetrid — nende parameetrite pĂ”hjal saab kogu protsessi reguleerida. St, kui teksti töötlemine Ă”nnestub — kutsutakse vĂ€lja vastuse saatmise protsess, ja muul juhul logime lihtsalt ebaĂ”nnestunud protsessi.

Apache NIFI — Praktiline ĂŒlevaade vĂ”imalustest

HandleHttpResponse omadustes pole erilist huvitavat, vÀlja arvatud staatuse olemasolu, kui vastuse loomine Ônnestub.

Apache NIFI — Praktiline ĂŒlevaade vĂ”imalustest

Oleme vastuse kĂŒsimisega selgeks saanud — liigume edasi faili saamise ja selle paigutamise juurde FTP-serverisse. FetchFile — saab faili mÀÀratud seadistustes olevast teest ja edastab selle jĂ€rgmisele protsessile.

Apache NIFI — Praktiline ĂŒlevaade vĂ”imalustest

Ja PutSftp-ruut paigutab faili failihoidlasse. Konfiguratsiooni seaded on allpool.

Apache NIFI — Praktiline ĂŒlevaade vĂ”imalustest

Oluline on mÀrkida, et iga ruut on eraldi protsess, mis tuleb kÀivitada. Oleme vaadanud kÔige lihtsamat nÀidet, mis ei nÔua mingit keerulist kohandamist. JÀrgmisena vaatame veidi keerulisemat protsessi, kus kirjutame natuke gnuud.

Keerulisem nÀide

Andmete edastus teenus osutus veidi keerulisemaks SOAP sĂ”numi muutmisprotsessi tĂ”ttu. Üldine protsess on nĂ€idatud alloleval joonisel.

Apache NIFI — Praktiline ĂŒlevaade vĂ”imalustest

Siin on idee samuti mitte eriti keeruline: saime tarbijalt pÀringu, et ta vajab andmeid, saatsime vastuse, et oleme sÔnumi saanud, kÀivitasime vastuse faili saamise protsessi, seejÀrel redigeerisime seda teatud loogika jÀrgi ja edastasime faili tarbijale SOAP sÔnumina serverisse.

Arvan, et pole mĂ”tet uuesti kirjeldada neid ruute, mida me varem nĂ€gime — liigume otse uute juurde. Kui peate redigeerima mĂ”nda faili ja tavalised ruudud, nagu ReplaceText, ei sobi, peate kirjutama oma skripti. Selle saab teha ruudu ExecuteGroogyScript abil. Selle seadistused on toodud allpool.

Apache NIFI — Praktiline ĂŒlevaade vĂ”imalustest

On kaks varianti skripti laadimiseks selle kuubiku sisse. Esimene on failiga, kus skript on laaditud. Teine — skripti kopeerimine scriptBody sisse. Teatavasti toetab kuubik executeScript mitut programmeerimiskeelt — ĂŒks neist on groovy. Java arendajatele pettumuseks — java keeles ei saa kirjutada skripte sellistes kuubikutes. Neile, kes tahavad vĂ€ga, tuleb luua oma eritellimusel kuubik ja see NIFI sĂŒsteemi lisada. Kogu see operatsioon kaasneb ĂŒsna pika tantsuga trikolo, millega me selle artikli raames tegelema ei hakka. Valisin keeleks groovy. Allpool on testskript, mis lihtsalt inkrementeerib id SOAP sĂ”numis. On oluline mĂ€rkida, et te vĂ”tate faili flowFile-st, uuendate seda, kuid Ă€rge unustage, et see tuleb uuendatuna tagasi sinna panna. Samuti on oluline mĂ€rkida, et mitte kĂ”iki raamatukogusid ei ole ĂŒhendatud. VĂ”ib juhtuda, et peate siiski importima mĂ”ne raamatukogu. Puuduseks on ka see, et skripti on sellel kuubikul ĂŒsna raske siluda. On vĂ”imalus ĂŒhendada JVM NIFI-ga ja alustada silumist. Isiklikult kĂ€ivitasin kohaliku rakenduse ja simuleerisin faili saamist sessioonist. Silumisega tegelesin samuti kohalikult. Vead, mis ilmnevad skripti laadimisel, on ĂŒsna lihtsalt guugeldatavad ja NIFI kirjutab need logisse.

import org.apache.commons.io.IOUtils
import groovy.xml.XmlUtil
import java.nio.charset.*
import groovy.xml.StreamingMarkupBuilder

def flowFile = session.get()
if (!flowFile) return
try {
    flowFile = session.write(flowFile, { inputStream, outputStream ->
        String result = IOUtils.toString(inputStream, "UTF-8");
        def recordIn = new XmlSlurper().parseText(result)
        def element = recordIn.depthFirst().find {
            it.name() == 'id'
        }

        def newId = Integer.parseInt(element.toString()) + 1
        def recordOut = new XmlSlurper().parseText(result)
        recordOut.Body.ClientMessage.RequestMessage.RequestContent.content.MessagePrimaryContent.ResponseBody.id = newId

        def res = new StreamingMarkupBuilder().bind { mkp.yield recordOut }.toString()
        outputStream.write(res.getBytes(StandardCharsets.UTF_8))
} as StreamCallback)
     session.transfer(flowFile, REL_SUCCESS)
}
catch(Exception e) {
    log.error("Error during processing of validate.groovy", e)
    session.transfer(flowFile, REL_FAILURE)
}

Kohapeal lÔpeb ruudu kohandamine. SeejÀrel edastatakse uuendatud fail ruudule, mis vastutab faili saatmise eest serverisse. Allpool on esitatud selle ruudu seaded.

Apache NIFI — Praktiline ĂŒlevaade vĂ”imalustest

Kirjeldame meetodit, mille abil edastatakse SOAP sĂ”num. Ütleme, kuhu see lĂ€heb. Edasi tuleb mĂ€rkida, et tegemist on just SOAP-iga.

Apache NIFI — Praktiline ĂŒlevaade vĂ”imalustest

Lisame mÔned omadused, nÀiteks host ja tegevus (soapAction). Salvestame, kontrollime. TÀpsemat teavet SOAP pÀringute saatmise kohta vÔib vaadata. siin

Oleme arutanud mitmeid NIFI protsesside rakendamisvĂ”imalusi. Kuidas nad omavahel suhestuvad ja milline on nende tegelik kasu. Arutatud nĂ€ited on testversioonid ja pisut erinevad sellest, mis toimub reaalsetes tingimustes. Loodan, et see artikkel on arendajatele veidi kasulik. AitĂ€h tĂ€helepanu eest. Kui teil on kĂŒsimusi, siis kirjutage. PĂŒĂŒan vastata.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster