Apache NIFI — LĂŒhike ĂŒlevaade vĂ”imalustest praktikas

Sissejuhatus

Minu praeguses töökohas olen pidanud tutvuma selle tehnoloogiaga. Alustan vĂ€ikese taustaga. Ühes jĂ€rgmisel kohtumisel öeldi meie meeskonnale, et peame looma integreerimise tuntud sĂŒsteemiga. Integreerimise all mĂ”istetakse, et see tuntud sĂŒsteem saadab meile HTTP kaudu pĂ€ringuid kindlale lĂ”pp-punktile, ja meie, nagu see ka poleks imelik, saadame tagasi vastuseid SOAP sĂ”numite kujul. Tundub, et kĂ”ik on lihtne ja ilmselge. Selle tulemusena tuleb...

Ülesanne

Luuakse 3 teenust. Esimene neist on Andmebaasi uuendamise teenus. See teenus, kui saabub uusi andmeid kolmandalt sĂŒsteemilt, uuendab andmeid andmebaasis ja genereerib mingi CSV formaadis faili, et edastada see jĂ€rgmisele sĂŒsteemile. Kutsutakse esile teise teenuse, Faili transportimise teenuse, lĂ”pp-punkt, mis saab saadetud faili, valideerib selle ja laadib FTP kaudu failide sĂ€ilitamisesse. Kolmas teenus, Andmete edastamise teenus tarbijale, töötab asĂŒnkroonselt kahe esimese teenusega. See vĂ”tab vastu pĂ€ringu vĂ€liselt sĂŒsteemilt, et saada varem mainitud faili, vĂ”tab valmis vastuse faili, muudab seda (uuendab id, description, linkToFile vĂ€ljad) ja edastab vastuse SOAP sĂ”numina. KokkuvĂ”ttes on olukord jĂ€rgmine: esimesed kaks teenust alustavad oma tööd ainult siis, kui saabuvad andmed uuendamiseks. Kolmas teenus töötab pidevalt, kuna teabe tarbijaid on palju, ligikaudu 1000 pĂ€ringut andmete saamiseks minutis. Teenused on pidevalt kĂ€ttesaadavad ja nende instantsid asuvad erinevates keskkondades, nagu test, demo, ettevalmistus ja tootmine. Allpool on toodud nende teenuste töö skeem. MĂ€rgin kohe, et mĂ”ned detailid on lihtsustatud, et vĂ€ltida liigset keerukust.

Apache NIFI — LĂŒhike ĂŒlevaade vĂ”imalustest praktikas

Tehniline sĂŒvenemine

Probleemi lahendamiseks otsustasime esmalt vĂ€lja arendada rakendusi Java keeles, kasutades Spring Framework'i, Nginx'i koormuse tasakaalustajana, Postgres'i andmebaasi ning muid tehnilisi ja vĂ€hem tehnilisi lahendusi. Kuna tehnilise lahenduse sĂŒvendamine vĂ”imaldas arvesse vĂ”tta ka teisi lĂ€henemisviise, suunati pilk uuenduslikule Apache NIFI tehnoloogiale, mis on ĂŒha populaarsem teatud ringkondades. Pean kohe ĂŒtlema, et see tehnoloogia aitas meil avastada need 3 teenust. Selles artiklis kĂ€sitletakse faili transportimise teenuse ja andmete edastamise teenuse vĂ€ljatöötamist, kuid kui artikkel osutub huvitavaks, kirjutan ka andmete vĂ€rskendamise teenusest andmebaasis.

Mis see on

NIFI esindab enda all jaotatud arhitektuuri kiireks paralleelseks andmete laadimiseks ja töötlemiseks, seal on suur hulk pistikprogramme allikatele ja teisendustele, konfigureerimise versioonimine ja palju muud. Meeldiv boonus on see, et see on vĂ€ga lihtne kasutada. Triviaalset protsessi, nĂ€iteks getFile, sendHttpRequest ja teised, saab kujutada ruutudena. Iga ruut esindab mingit protsessi, mille vahelisi seoseid saab nĂ€ha alloleval joonisel. Üksikasjalikum dokumentatsioon protsesside seadistamisest ja koostamisest on kirjutatud siin , nende jaoks, kes rÀÀgivad vene keelt — siin. Dokumentatsioonis on suurepĂ€raselt selgitatud, kuidas NIFI lahti pakkida ja kĂ€ivitada ning samuti, kuidas luua protsesse, mida nimetatakse ruutudeks.
Artikli kirjutamise idee tekkis pÀrast pikaajalisi otsinguid ja saadud teabe struktureerimist millekski mÔistetavaks, samuti soovist natuke kergendada tulevaste arendajate elu.

NĂ€ide

Vaatame, kuidas ruudud omavahel suhtlevad. Üldine skeem on ĂŒsna lihtne: saame HTTP pĂ€ringu (teoreetiliselt failiga pĂ€ringu kehas. NIFI vĂ”imaluste demonstreerimiseks algab kĂ€esolevas nĂ€ites pĂ€ring faili saamise protsessi kohalikust failihaldusest), seejĂ€rel saadame vastuse tagasi, et pĂ€ring on saadud, samal ajal kĂ€ivitub faili saamise protsess failihalduses ja seejĂ€rel tuleb faili edastamine FTP kaudu. On oluline mĂ€rkida, et protsessid suhtlevad omavahel nn flowFile'i kaudu. See on NIFI pĂ”hielement, mis salvestab atribuute ja sisu. Sisu tĂ€hendab andmeid, mis esindavad voofaili. TeisisĂ”nu, kui saad faili ĂŒhest ruudust ja edastad selle teise, on sisu see fail.

Apache NIFI — LĂŒhike ĂŒlevaade vĂ”imalustest praktikas

Nagu nĂ€ete — sellel joonisel on kujutatud ĂŒldine protsess. HandleHttpRequest — töötab pĂ€ringute vastuvĂ”tjana, ReplaceText — genereerib vastuse keha, HandleHttpResponse — saadab vastuse. FetchFile — saadab faili failihaldusest ja edastab selle ruudule PutSftp — asetab selle faili FTP-sse, mÀÀratud aadressile. NĂŒĂŒd vaatame seda protsessi pĂ”hjalikumalt.

Antud juhul on kÔik algus pÀringust. Vaatame selle konfiguratsiooniparameetreid.

Apache NIFI — LĂŒhike ĂŒlevaade vĂ”imalustest praktikas

Siin on kĂ”ik ĂŒsna triviaalne, vĂ€lja arvatud StandartHttpContextMap — see on teenus, mis vĂ”imaldab pĂ€ringute saatmist ja vastuvĂ”ttu. TĂ€iendavaid ĂŒksikasju ja nĂ€iteid saab vaadata — siin

JĂ€rgmisena vaatame ReplaceText ruudu konfiguratsiooniparameetreid. Siin tasub tĂ€helepanu pöörata ReplacementValue'le — see on see, mis naaseb kasutajale vastusena. Seadetest saab reguleerida logimise taset, logisid saab vaadata {kuhu pakkisite nifi}/nifi-1.9.2/logs seal on ka failure/success parameetrid — nende pĂ”hjal saad reguleerida protsessi ĂŒldiselt. St juhul, kui teksti sĂ€ilitamine on Ă”nnestunud — kĂ€ivitatakse protsess kasutajale vastuse saatmiseks, vastasel juhul lihtsalt logime ebaĂ”nnestunud protsessi.

Apache NIFI — LĂŒhike ĂŒlevaade vĂ”imalustest praktikas

HandleHttpResponse omadustes pole erilist huvitavat, vÀlja arvatud staatus, kui vastus on edukalt loodud.

Apache NIFI — LĂŒhike ĂŒlevaade vĂ”imalustest praktikas

Oleme aru saanud pĂ€ringu ja vastuse osast — liikume edasi faili saamise ja selle paigaldamise juurde FTP-serverisse. FetchFile — saadab faili mÀÀratud tee jĂ€rgi ja edastab selle jĂ€rgmisele protsessile.

Apache NIFI — LĂŒhike ĂŒlevaade vĂ”imalustest praktikas

Ja jÀrgmine ruut PutSftp - paigutab faili failihoidlasse. Konfiguratsiooni mÀÀrangud on allpool nÀhtavad.

Apache NIFI — LĂŒhike ĂŒlevaade vĂ”imalustest praktikas

Tasub pöörata tĂ€helepanu sellele, et iga ruut on eraldi protsess, mis peab olema kĂ€ivitatud. Vaatasime ĂŒle kĂ”ige lihtsama nĂ€ite, mis ei vaja mingit keerulist kohandamist. JĂ€rgmine on veidi keerulisem protsess, kus kirjutame natuke groovi.

TÀpsem nÀide

Andmete edastamise teenus osutus veidi keerulisemaks kuna see hĂ”lmas SOAP-sĂ”numi muutmise protsessi. Üldine protsess on kujutatud alloleval joonisel.

Apache NIFI — LĂŒhike ĂŒlevaade vĂ”imalustest praktikas

Siin pole idee eriti keeruline: saime tarbijalt pÀringu, et tal on andmeid vaja, saatsime vastuse, et oleme sÔnumi kÀtte saanud, kÀivitasime faili vastuse saamise protsessi, seejÀrel redigeerisime seda teatud loogika kohaselt, pÀrast mida edastatud fail tarbijale SOAP-sÔnumina serverisse.

Ma arvan, et ei ole vaja uuesti kirjeldada neid ruute, mida me nÀgime eespool - liigume kohe uute juurde. Kui teil on vaja redigeerida mÔnda faili ja tavalised ruudud nagu ReplaceText ei sobi, peate kirjutama enda skripti. Seda saab teha ExecuteGroogyScript ruudu abil. Selle seadistused on allpool esitatud.

Apache NIFI — LĂŒhike ĂŒlevaade vĂ”imalustest praktikas

On this square, there are two options for uploading a script. The first is by uploading a file with the script. The second is by inserting the script into scriptBody. As far as I know, the executeScript square supports multiple programming languages — one of them being Groovy. I must disappoint Java developers — scripts cannot be written in such squares using Java. For those who are very eager — you need to create your custom square and integrate it into the NIFI system. This entire operation is accompanied by quite lengthy sacrifices, which we won't cover in this article. I chose the Groovy language. Below is a test script that simply increments the ID in the SOAP message. It is important to note that you take the file from flowFile, update it, and do not forget to place it back there, updated. Also, it is worth noting that not all libraries are connected. It may turn out that you have to import one of the libs. Another downside is that debugging the script in this square is quite difficult. There is a way to connect to the NIFI JVM and start the debugging process. Personally, I ran a local application and mimicked receiving a file from a session. I also debugged locally. The errors that pop up during the script upload can be easily googled and are logged by NIFI itself.

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)
}

This is where the customization of the square ends. The updated file is then sent to the square that handles sending the file to the server. Below are the settings for this square.

Apache NIFI — LĂŒhike ĂŒlevaade vĂ”imalustest praktikas

We describe the method that will be used to send the SOAP message. We specify where. Next, we need to indicate that this is specifically SOAP.

Apache NIFI — LĂŒhike ĂŒlevaade vĂ”imalustest praktikas

Lisame mÔned omadused, nagu host ja tegevus(soapAction). Salvestame ja kontrollime. Soodsamate SOAP-pÀringute saatmise kohta saab lÀhemalt lugeda. siit

Oleme uurinud mitmeid viise NIFI protsesside kasutamiseks. Kuidas need omavahel suhtlevad ja milline on nende tegelik kasu. Uuritud nĂ€ited on katse olemuselt ja veidi erinevad sellest, mis tegelikult tootmises toimub. Loodan, et see artikkel on arendajatele mĂ”nevĂ”rra kasulik. AitĂ€h tĂ€helepanu eest. Kui teil on kĂŒsimusi, kirjutage julgelt. Proovin vastata.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster