Apache NIFI - Ħarsa ġenerali fil-qosor tal-karatteristiċi fil-prattika

Introduzzjoni

Ġara li fil-post tax-xogħol attwali tiegħi kelli niffamiljarizza ruħi ma 'din it-teknoloġija. Nibda bi ftit sfond. Fil-laqgħa li jmiss, it-tim tagħna qalulna li għandna bżonn noħolqu integrazzjoni magħhom sistema magħrufa. B'integrazzjoni kien ifisser li din is-sistema magħrufa sew tibgħatilna talbiet permezz HTTP għal endpoint speċifiku, u aħna, stramba, nibagħtu lura tweġibiet fil-forma ta 'messaġġ SAPUN. Kollox jidher sempliċi u trivjali. Minn dan jirriżulta li għandek bżonn...

Kompitu

Oħloq 3 servizzi. L-ewwel wieħed minnhom huwa s-Servizz tal-Aġġornament tad-Database. Dan is-servizz, meta tasal data ġdida minn sistema ta’ parti terza, jaġġorna d-data fid-database u jiġġenera fajl f’format CSV biex jittrasferih għas-sistema li jmiss. L-endpoint tat-tieni servizz jissejjaħ - is-Servizz tat-Trasport FTP, li jirċievi l-fajl trasferit, jivvalidah, u jpoġġih fil-ħażna tal-fajls permezz tal-FTP. It-tielet servizz, is-servizz tat-trasferiment tad-dejta tal-konsumatur, jaħdem b'mod asinkroniku mal-ewwel tnejn. Jirċievi talba minn sistema esterna ta’ parti terza biex jirċievi l-fajl diskuss hawn fuq, jieħu l-fajl ta’ rispons lest, jimmodifikah (jaġġorna l-id, id-deskrizzjoni, l-oqsma linkToFile) u jibgħat ir-rispons fil-forma ta’ messaġġ SOAP. Jiġifieri, l-istampa ġenerali hija kif ġej: l-ewwel żewġ servizzi jibdew ix-xogħol tagħhom biss meta d-dejta għall-aġġornament tkun waslet. It-tielet servizz jaħdem kontinwament minħabba li hemm ħafna konsumaturi ta 'informazzjoni, madwar 1000 talba għal data kull minuta. Is-servizzi huma disponibbli kontinwament u l-istanzi tagħhom jinsabu f'ambjenti differenti, bħal test, demo, pre-produzzjoni u prod. Hawn taħt hawn dijagramma ta' kif jaħdmu dawn is-servizzi. Ħa niċċara mill-ewwel li xi dettalji ġew issimplifikati biex tiġi evitata kumplessità bla bżonn.

Apache NIFI - Ħarsa ġenerali fil-qosor tal-karatteristiċi fil-prattika

Approfondiment Tekniku

Meta nippjanaw soluzzjoni għall-problema, l-ewwel iddeċidejna li nagħmlu applikazzjonijiet f'Java billi tuża l-qafas tar-Rebbiegħa, Nginx balancer, database Postgres u affarijiet oħra tekniċi u mhux daqshekk tekniċi. Peress li ż-żmien li niżviluppaw soluzzjoni teknika ppermettilna nikkunsidraw approċċi oħra biex insolvu din il-problema, il-ħarsa tagħna waqgħet fuq it-teknoloġija Apache NIFI, li hija moda f'ċerti ċrieki. Ngħid mill-ewwel li din it-teknoloġija ppermettietna ninnutaw dawn it-3 servizzi. Dan l-artikolu se jiddeskrivi l-iżvilupp ta 'servizz ta' trasport ta 'fajls u servizz ta' trasferiment ta 'dejta lill-konsumatur, iżda jekk l-artikolu huwa utli, se nikteb dwar is-servizz għall-aġġornament tad-dejta fid-database.

X'hemm dan

NIFI hija arkitettura distribwita għal tagħbija u pproċessar paralleli veloċi ta 'data, numru kbir ta' plugins għal sorsi u trasformazzjonijiet, verżjonijiet ta 'konfigurazzjonijiet u ħafna aktar. Bonus sabiħ huwa li huwa faċli ħafna biex tużah. Proċessi trivjali bħal getFile, sendHttpRequest u oħrajn jistgħu jiġu rappreżentati bħala kwadri. Kull kwadru jirrappreżenta proċess, li l-interazzjoni tiegħu tista 'tidher fil-figura hawn taħt. Inkitbet dokumentazzjoni aktar dettaljata dwar l-interazzjonijiet tas-setup tal-proċess hawn , għal dawk li jitkellmu bir-Russu - hawn. Id-dokumentazzjoni tiddeskrivi perfettament kif tħoll u tħaddem NIFI, kif ukoll kif toħloq proċessi, magħrufa wkoll bħala kwadri
L-idea li tikteb artiklu twieldet wara tfittxija twila u strutturar l-informazzjoni riċevuta f'xi ħaġa konxja, kif ukoll ix-xewqa li tagħmel il-ħajja ftit aktar faċli għall-iżviluppaturi futuri.

Eżempju

Eżempju ta' kif il-kwadri jinteraġixxu ma' xulxin huwa kkunsidrat. L-iskema ġenerali hija pjuttost sempliċi: Nirċievu talba HTTP (Fit-teorija, b'fajl fil-korp tat-talba. Biex turi l-kapaċitajiet ta 'NIFI, f'dan l-eżempju t-talba tibda l-proċess li tirċievi fajl mill-ħażna tal-fajl lokali. ), imbagħad nibagħtu lura tweġiba li rċeviet it-talba, b'mod parallel il-proċess li nirċievu fajl minn FH u mbagħad il-proċess li nċaqalqu permezz tal-FTP għal FH. Ta 'min jiġi ċċarat li l-proċessi jinteraġixxu ma' xulxin permezz tal-hekk imsejjaħ flowFile. Din hija l-entità bażi fl-NIFI li taħżen l-attributi u l-kontenut. Il-kontenut huwa d-data li hija rappreżentata mill-fajl tal-fluss. Jiġifieri, bejn wieħed u ieħor, jekk tirċievi fajl minn kwadru wieħed u tittrasferih għal ieħor, il-kontenut ikun il-fajl tiegħek.

Apache NIFI - Ħarsa ġenerali fil-qosor tal-karatteristiċi fil-prattika

Kif tistgħu taraw, din l-istampa turi l-proċess ġenerali. HandleHttpRequest - jaċċetta talbiet, ReplaceText - jiġġenera korp ta 'rispons, HandleHttpResponse - jibgħat tweġiba. FetchFile - jirċievi fajl minn ħażna ta 'fajls, jittrasferih fil-kwadru PutSftp - ipoġġi dan il-fajl fuq FTP, fl-indirizz speċifikat. Issa aktar dwar dan il-proċess.

F'dan il-każ, it-talba hija l-bidu ta 'kollox. Ejja nħarsu lejn il-parametri tal-konfigurazzjoni tagħha.

Apache NIFI - Ħarsa ġenerali fil-qosor tal-karatteristiċi fil-prattika

Kollox hawnhekk huwa pjuttost trivjali bl-eċċezzjoni ta 'StandardHttpContextMap - dan huwa tip ta' servizz li jippermettilek li tibgħat u tirċievi talbiet. F'aktar dettall u anke b'eżempji, tista' tara - hawn

Sussegwentement, ejja nħarsu lejn il-parametri tal-konfigurazzjoni ReplaceText tal-kwadru. Ta 'min joqgħod attent għal ReplacementValue - dan huwa dak li se jintbagħat lura lill-utent fil-forma ta' tweġiba. Fis-settings tista 'taġġusta l-livell ta' qtugħ, tista 'tara r-zkuk {fejn inti żppakkjat nifi}/nifi-1.9.2/zkuk, hemm ukoll parametri ta' falliment / suċċess - ibbażati fuq dawn il-parametri tista 'tirregola l-proċess kollu kemm hu . Jiġifieri, fil-każ ta 'proċessar ta' test b'suċċess, il-proċess li tintbagħat tweġiba lill-utent se jissejjaħ, u f'każ ieħor aħna sempliċiment nilloggjaw il-proċess mingħajr suċċess.

Apache NIFI - Ħarsa ġenerali fil-qosor tal-karatteristiċi fil-prattika

M'hemm xejn partikolarment interessanti fil-proprjetajiet HandleHttpResponse ħlief l-istatus meta tweġiba tinħoloq b'suċċess.

Apache NIFI - Ħarsa ġenerali fil-qosor tal-karatteristiċi fil-prattika

Irranġajna t-talba u r-rispons - ejja nkomplu nirċievu l-fajl u npoġġuh fuq is-server FTP. FetchFile - jirċievi fajl fil-mogħdija speċifikata fis-settings u jgħaddih għall-proċess li jmiss.

Apache NIFI - Ħarsa ġenerali fil-qosor tal-karatteristiċi fil-prattika

U mbagħad il-kwadru PutSftp - ipoġġi l-fajl fil-ħażna tal-fajl. Nistgħu naraw il-parametri tal-konfigurazzjoni hawn taħt.

Apache NIFI - Ħarsa ġenerali fil-qosor tal-karatteristiċi fil-prattika

Ta’ min joqgħod attent għall-fatt li kull kwadru huwa proċess separat li jrid jitnieda. Ħaresna lejn l-aktar eżempju sempliċi li ma jeħtieġ ebda customization kumpless. Sussegwentement, se nħarsu lejn il-proċess ftit aktar ikkumplikat, fejn ser niktbu ftit fuq l-iskanalaturi.

Eżempju aktar kumpless

Is-servizz tat-trasferiment tad-dejta lill-konsumatur irriżulta li kien ftit aktar ikkumplikat minħabba l-proċess ta 'modifika tal-messaġġ SOAP. Il-proċess ġenerali jidher fil-figura hawn taħt.

Apache NIFI - Ħarsa ġenerali fil-qosor tal-karatteristiċi fil-prattika

Hawnhekk ukoll l-idea mhix partikolarment ikkumplikata: irċevejna talba mingħand il-konsumatur li kellu bżonn id-dejta, bagħat tweġiba li kien irċieva messaġġ, bdejna l-proċess li jirċievi l-fajl tar-rispons, imbagħad editjajna b'ċerta loġika, u mbagħad ittrasferixxa l-fajl lill-konsumatur fil-forma ta 'messaġġ SAPUN lis-server.

Naħseb li m'hemmx għalfejn niddeskrivu mill-ġdid dawk il-kwadri li rajna hawn fuq - ejja nimxu dritt għal dawk ġodda. Jekk għandek bżonn teditja xi fajl u kwadri ordinarji tat-tip ReplaceText mhumiex adattati, ikollok tikteb l-iskrittura tiegħek stess. Dan jista' jsir billi tuża l-kwadru ExecuteGroogyScript. Is-settings tiegħu huma ppreżentati hawn taħt.

Apache NIFI - Ħarsa ġenerali fil-qosor tal-karatteristiċi fil-prattika

Hemm żewġ għażliet għat-tagħbija tal-iskrittura f'dan il-kwadru. L-ewwel huwa billi tniżżel fajl b'kitba. It-tieni huwa billi ddaħħal skript fi scriptBody. Sa fejn naf jien, il-kwadru executeScript jappoġġja diversi lingwi - waħda minnhom hija groovy. Se niddiżappunta lill-iżviluppaturi java - ma tistax tikteb skripts fil-java f'dawn il-kwadri. Għal dawk li verament jixtiequ, għandek bżonn toħloq il-kwadru personalizzat tiegħek u żżidha mas-sistema NIFI. Din l-operazzjoni kollha hija akkumpanjata minn żfin pjuttost twil b'tamburin, li mhux se nittrattaw f'dan l-artikolu. Għażilt il-lingwa groovy. Hawn taħt hemm skript tat-test li sempliċement jaġġorna b'mod inkrementali l-id f'messaġġ SOAP. Huwa importanti li wieħed jinnota. Tieħu l-fajl minn flowFile u taġġornah, tinsiex li għandek bżonn tpoġġih lura hemm, aġġornat. Ta’ min jinnota wkoll li mhux il-libreriji kollha huma inklużi. Jista 'jiġri li għad ikollok timporta waħda mil-libs. Żvantaġġ ieħor huwa li l-iskript f'dan il-kwadru huwa pjuttost diffiċli biex jiġi debug. Hemm mod kif tikkonnettja man-NIFI JVM u tibda l-proċess ta 'debugging. Personalment, nediet applikazzjoni lokali u simulajt li tirċievi fajl mis-sessjoni. Għamilt ukoll debugging lokalment. Żbalji li jidhru meta tagħbija skript huma pjuttost faċli għal Google u huma miktuba minn NIFI innifsu fil-log.

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

Attwalment, dan huwa fejn tispiċċa l-adattament tal-kwadru. Sussegwentement, il-fajl aġġornat jiġi trasferit għall-kwadru, li huwa responsabbli biex jibgħat il-fajl lis-server. Hawn taħt hawn is-settings għal dan il-kwadru.

Apache NIFI - Ħarsa ġenerali fil-qosor tal-karatteristiċi fil-prattika

Aħna niddeskrivu l-metodu li bih se jiġi trażmess messaġġ SOAP. Niktbu fejn. Sussegwentement trid tindika li dan huwa SAPUN.

Apache NIFI - Ħarsa ġenerali fil-qosor tal-karatteristiċi fil-prattika

Żid diversi proprjetajiet bħal host u azzjoni (soapAction). Aħna niffrankaw u niċċekkjaw. Tista' tara aktar dettalji dwar kif tibgħat talbiet SAPUN hawn

Ħaresna lejn diversi għażliet għall-użu tal-proċessi NIFI. Kif jinteraġixxu u x'inhu l-benefiċċju reali tagħhom? L-eżempji kkunsidrati huma dawk tat-test u huma kemmxejn differenti minn dak li fil-fatt jiġri fil-ġlieda. Nispera li dan l-artikolu jkun xi ftit utli għall-iżviluppaturi. Grazzi tal-attenzjoni tiegħek. Jekk għandek xi mistoqsijiet, ikteb. Nipprova nwieġeb.

Sors: www.habr.com

Żid kumment