Detta Àr den andra delen av en serie artiklar om analytiska system ().

Idag rÄder det inte lÀngre nÄgon tvekan om att noggrann databehandling och tolkning av resultat kan hjÀlpa nÀstan alla typer av företag. I detta avseende blir analytiska system alltmer laddade med parametrar, och antalet triggers och anvÀndarhÀndelser i applikationer vÀxer.
PÄ grund av detta ger företag sina analytiker mer och mer rÄinformation att analysera och omvandla till sunda beslut. Vikten av ett analyssystem för ett företag ska inte underskattas, och sjÀlva systemet mÄste vara tillförlitligt och stabilt.
Kundanalytiker
Kundanalys Àr en tjÀnst som ett företag ansluter till sin webbplats eller applikation via den officiella SDK:n, integrerar i sin egen kodbas och vÀljer hÀndelseutlösare. Det finns en uppenbar nackdel med detta tillvÀgagÄngssÀtt: all data som samlas in kanske inte behandlas exakt som du skulle vilja pÄ grund av begrÀnsningarna för vilken tjÀnst du vÀljer. Till exempel, pÄ ett system kommer det inte att vara lÀtt att köra MapReduce-uppgifter, pÄ ett annat kommer du inte att kunna köra din modell. En annan nackdel kommer att vara den vanliga (imponerande) rÀkningen för tjÀnster.
Det finns mÄnga kundanalyslösningar pÄ marknaden, men förr eller senare stÀlls analytiker inför det faktum att det inte finns nÄgon universell tjÀnst som lÀmpar sig för varje uppgift (samtidigt som priserna för alla dessa tjÀnster stiger hela tiden). I en sÄdan situation beslutar företag ofta att skapa sitt eget analyssystem med alla nödvÀndiga anpassade instÀllningar och möjligheter.
Serveranalytiker
Server-side analytics Àr en tjÀnst som kan distribueras inom ett företag pÄ sina egna servrar och (oftast) med egna anstrÀngningar. I denna modell lagras alla anvÀndarhÀndelser pÄ interna servrar, vilket gör att utvecklare kan prova olika lagringsdatabaser och vÀlja den mest bekvÀma arkitekturen. Och Àven om du fortfarande vill anvÀnda tredjepartsklientanalys för vissa uppgifter, kommer det fortfarande att vara möjligt.
Analys pÄ serversidan kan distribueras pÄ tvÄ sÀtt. Först: vÀlj nÄgra verktyg med öppen kÀllkod, distribuera dem pÄ dina maskiner och utveckla affÀrslogik.
Fördelar
Nackdelar
Du kan anpassa vad du vill
Detta Àr ofta mycket svÄrt och krÀver separata utvecklare
För det andra: ta SaaS-tjÀnster (Amazon, Google, Azure) istÀllet för att distribuera det sjÀlv. Vi kommer att prata om SaaS mer i detalj i den tredje delen.
Fördelar
Nackdelar
Det kan vara billigare i medelstora volymer, men med stor tillvÀxt blir det ÀndÄ för dyrt
Det kommer inte att vara möjligt att kontrollera alla parametrar
Administrationen överförs helt och hÄllet pÄ tjÀnsteleverantörens axlar
Det Àr inte alltid kÀnt vad som finns i tjÀnsten (det kanske inte behövs)
Hur man samlar in serveranalys
Om vi ââvill gĂ„ bort frĂ„n att anvĂ€nda kundanalyser och bygga vĂ„r egen, mĂ„ste vi först och frĂ€mst tĂ€nka igenom det nya systemets arkitektur. Nedan berĂ€ttar jag steg för steg vad du behöver tĂ€nka pĂ„, varför varje steg behövs och vilka verktyg du kan anvĂ€nda.
1. Ta emot data
Precis som i fallet med kundanalyser vÀljer företagsanalytiker först och frÀmst ut de typer av hÀndelser som de vill studera i framtiden och samlar dem i en lista. Vanligtvis intrÀffar dessa hÀndelser i en specifik ordning, som kallas ett "hÀndelsemönster".
FörestÀll dig sedan att en mobilapplikation (webbplats) har vanliga anvÀndare (enheter) och mÄnga servrar. För att sÀkert överföra hÀndelser frÄn enheter till servrar behövs ett mellanlager. Beroende pÄ arkitektur kan det finnas flera olika evenemangsköer.
- Ăr , som anvĂ€nds som en kö för att samla evenemang.
Enligt 2014 beslutade skaparen av Apache Kafka att döpa programvaran efter Franz Kafka eftersom "det Ă€r ett system optimerat för att skriva" och för att han Ă€lskade Kafkas verk. â
I vÄrt exempel finns det mÄnga dataproducenter och datakonsumenter (enheter och servrar), och Kafka hjÀlper till att koppla dem till varandra. Konsumenter kommer att beskrivas mer i detalj i följande steg, dÀr de kommer att vara huvudÀmnen. Nu kommer vi bara att övervÀga dataproducenter (hÀndelser).
Kafka kapslar in begreppen kö och partition; det Àr bÀttre att lÀsa mer specifikt om detta nÄgon annanstans (till exempel i ). Utan att gÄ in pÄ detaljer, lÄt oss förestÀlla oss att en mobilapplikation lanseras för tvÄ olika operativsystem. Sedan skapar varje version sin egen separata hÀndelseström. Producenter skickar evenemang till Kafka, de spelas in i lÀmplig kö.

(bild )
Samtidigt lÄter Kafka dig lÀsa i bitar och bearbeta en ström av hÀndelser i minibatcher. Kafka Àr ett mycket bekvÀmt verktyg som kan skalas vÀl med vÀxande behov (till exempel genom geolokalisering av hÀndelser).
Vanligtvis rÀcker det med en skÀrva, men saker och ting blir mer komplicerade nÀr man skalar (som de alltid gör). Förmodligen kommer ingen att vilja anvÀnda endast en fysisk skÀrva i produktionen, eftersom arkitekturen mÄste vara feltolerant. Förutom Kafka finns det en annan vÀlkÀnd lösning - RabbitMQ. Vi anvÀnde det inte i produktionen som en kö för hÀndelseanalys (om du har sÄdan erfarenhet, berÀtta om det i kommentarerna!). DÀremot anvÀnde vi AWS Kinesis.
Innan vi gÄr vidare till nÀsta steg mÄste vi nÀmna ytterligare ett lager av systemet - rÄlogglagring. Detta Àr inte ett obligatoriskt lager, men det kommer att vara anvÀndbart om nÄgot gÄr fel och hÀndelseköerna i Kafka ÄterstÀlls. Att lagra rÄloggar krÀver ingen komplex och dyr lösning, du kan helt enkelt skriva dem nÄgonstans i rÀtt ordning (Àven pÄ en hÄrddisk).

2. Bearbeta hÀndelseströmmar
Efter att vi har förberett alla hÀndelser och placerat dem i lÀmpliga köer gÄr vi vidare till bearbetningssteget. HÀr kommer jag att berÀtta om de tvÄ vanligaste bearbetningsalternativen.
Det första alternativet Àr att aktivera Spark Streaming i Apache-systemet. Alla Apache-produkter lever pÄ HDFS, ett sÀkert filsystem med filrepliker. Spark Streaming Àr ett lÀttanvÀnt verktyg som hanterar strömmande data och skalar bra. Det kan dock vara svÄrt att underhÄlla.
Ett annat alternativ Àr att bygga din egen hÀndelsehanterare. För att göra detta behöver du till exempel skriva en Python-applikation, bygga den i Docker och prenumerera pÄ Kafka-kön. NÀr utlösare anlÀnder till hamnarbetarna startar bearbetningen. Med den hÀr metoden mÄste du hÄlla applikationer igÄng hela tiden.
LÄt oss anta att vi har valt ett av alternativen som beskrivs ovan och gÄ vidare till sjÀlva behandlingen. Processorer bör börja med att kontrollera datas giltighet, filtrera skrÀp och "trasiga" hÀndelser. För validering anvÀnder vi vanligtvis . Efter detta kan du göra datamappning: data frÄn olika kÀllor normaliseras och standardiseras för att lÀggas till en gemensam tabell.

3. Databas
Det tredje steget Àr att upprÀtthÄlla normaliserade hÀndelser. NÀr vi arbetar med ett fÀrdigt analyssystem mÄste vi komma Ät dem ofta, sÄ det Àr viktigt att vÀlja en bekvÀm databas.
Om uppgifterna passar vÀl in i ett fast schema kan du vÀlja eller nÄgon annan kolumnÀr databas. PÄ sÄ sÀtt kommer aggregationerna att fungera mycket snabbt. Nackdelen Àr att schemat Àr strikt fixerat och dÀrför kommer det inte att vara möjligt att lÀgga till godtyckliga objekt utan modifiering (till exempel nÀr en icke-standardhÀndelse intrÀffar). Men du kan rÀkna vÀldigt snabbt.
För ostrukturerad data kan du ta NoSQL, till exempel, . Den körs pÄ HDFS, replikerar bra, du kan ta upp mÄnga instanser och Àr feltolerant.
Du kan ocksÄ höja nÄgot enklare, t.ex. . Det Àr ganska lÄngsamt och för smÄ volymer. Men pluset Àr att den Àr vÀldigt enkel och dÀrför lÀmplig att starta.

4. Aggregationer
Efter att noggrant ha sparat alla hÀndelser vill vi samla all viktig information frÄn partiet som anlÀnde och uppdatera databasen. Globalt sett vill vi fÄ relevanta instrumentpaneler och mÀtvÀrden. Till exempel, samla in en anvÀndarprofil frÄn hÀndelser och pÄ nÄgot sÀtt mÀta beteende. HÀndelser aggregeras, samlas in och sparas igen (i anvÀndartabeller). Samtidigt kan du bygga ett system sÄ att du ocksÄ kan koppla ett filter till aggregator-koordinatorn: samla in anvÀndare endast frÄn en viss typ av hÀndelse.
Efter det, om nÄgon i teamet bara behöver analyser pÄ hög nivÄ, kan externa analyssystem anslutas. Du kan ta Mixpanel igen. men eftersom det Àr ganska dyrt sÄ skickas inte alla anvÀndarhÀndelser dit utan bara det som behövs. För att göra detta behöver vi skapa en koordinator som ska överföra nÄgra rÄhÀndelser eller nÄgot som vi sjÀlva aggregerat tidigare till externa system, API:er eller annonsplattformar.

5. Frontend
Du mÄste ansluta frontend till det skapade systemet. Ett bra exempel Àr service , Àr ett databas-GUI som hjÀlper till att bygga instrumentpaneler. Hur interaktionen fungerar:
- AnvÀndaren gör en SQL-frÄga.
- Som svar fÄr han en skylt.
- Det skapar en "ny visualisering" för det och fÄr en vacker graf som du kan spara sjÀlv.
Visualiseringar i tjÀnsten uppdateras automatiskt, du kan anpassa och spÄra din övervakning. Redash Àr gratis om den Àr vÀrd, men som SaaS kommer det att kosta $50 per mÄnad.

Slutsats
NÀr du har slutfört alla steg ovan kommer du att skapa din serveranalys. Observera att detta inte Àr sÄ enkelt som att bara ansluta kundanalys, eftersom allt mÄste konfigureras sjÀlv. DÀrför, innan du skapar ditt eget system, Àr det vÀrt att jÀmföra behovet av ett seriöst analyssystem med de resurser som du Àr villig att allokera till det.
Om du har rÀknat ut och funnit att kostnaderna Àr för höga kommer jag i nÀsta del att prata om hur man gör en billigare version av server-side analytics.
Tack för att du lÀser! Jag stÀller gÀrna frÄgor i kommentarerna.
KĂ€lla: will.com
