Roelant Ossewaarde en Jos van Reenen, B 2019-2020
Het boek van Kazman (Link naar ebook) gaat over een strategie om architecturen te ontwerpen.
Figure 1: Architecture Design (Kazman, fig. 2.1)
Figure 2: Technology family tree for Big Data (Kazman, fig. 2.10)
"Architectural design is, therefore, a key step to achieving your product and project goals. Some of these goals are technical (e.g., achieving low and predictable latency in a video game or an e-commerce website), and some are nontechnical (e.g., keeping the workforce employed, entering a new market, meeting a deadline)."
Gebaseerd op hoofdstuk 5 van "Designing Software Architectures" (Cervantes & Kazman 2016).
Business case: Een Internet bedrijf bedient veel klanten dmv. online-content (vgl. reddit). Al hun systemen maken logs aan met gegevens over de systemen, gedrag van gebruikers, etc. Deze logs worden gebruikt om bedrijfsprocessen bij te sturen.
De infrastructuur groeit hard; er is behoefte aan een nieuw systeem waarmee de verschillende stakeholders inzicht kunnen krijgen in de gelogde gegevens.
Mensen van operations moeten de huidige staat van de diensten en infrastructuur kunnen monitoren (zoals web load, aantal gebruikers, etc) op een real-time dashboard.
Als er problemen zijn, moeten systeembeheerders snel door recente logs kunnen zoeken naar relevante berichten over het systeem.
Voor managementrapportages moeten er over een lange termijn logs opgevraagd kunnen worden over bijvoorbeeld het gebruik van de infrastructuur en knelpunten.
Het systeem moet 15000 events per seconde van ongeveer 300 web servers kunnen afhandelen.
Het systeem zal het dashboard updaten met maximaal 1 minuut vertraging (latency).
Het systeem zal real-time queries ondersteunen voor troubleshooting met een maximum query tijd van 10 seconden over data van 2 weken terug in het verleden.
Het systeem zal ruwe data voor de laatste 2 weken apart beschikbaar stellen voor full-text searches.
Het systeem zal ruwe data opslaan voor de afgelopen 60 dagen (1 Tb ruwe data per dag, 60 Tb ruwe data totaal).
Vanwege kostenoverwegingen zal het systeem primair gebruik maken van Open Source software.
Het systeem zal gebruik maken van een corporate BI-tool met een SQL-interface voor het visualizeren van informatie.
Het systeem zal zowel in een private cloud als in een publieke cloud geïntegreerd kunnen worden. Architectuurbeslissingen moeten zo min mogelijk vendor-specifiek (Google, Amazon) zijn.
Figure 4: Steps and artifacts of ADD (Kazman, fig. 3.1)
Bepaal welke use cases significant zijn.
De drivers zijn de kwaliteitsattributen en constraints die van belang zijn voor de significante use cases (uit stap 1).
In een eerste iteratie is dat het hele systeem.
Geef ook een reden waarom je voor andere mogelijke design concepten niet hebt gekozen. Relevante designkeuzes voor databasetechniek: Reference architectures for Data Analytics.
In een eerste iteratie nog niet relevant.
Er zijn verschillende keuzes te maken over met name data opslag en analyse bij het opstellen van een architectuur:
NB terminologie:
Bekende technologie: MySQL, PostgreSQL, MSQL.
De ETL en messaging vinden plaats in het RDBMS. Als er een voorbewerking van de data plaats vindt buiten het database-systeem (bijvoorbeeld door scripts), dan is het een 7.
Gebaseerd op set theorie:
Data anomalies worden voorkomen door redundantie te verminderen.
Daardoor een grotere hoeveelheid tabellen (want tabellen vaker opgesplitst).
Verschillende transacties tegelijk kunnen leiden tot 'dirty reads'.
Figure 9: Concurrency issue: interleaving
De eerste transactie vraagt iets ('status') van de database, is VALID op dat moment. Binnen die transactie wordt de status op INVALID gezet. De transactie wordt niet afgemaakt, en dus wordt de status weer op VALID gezet.
De tweede transactie leest halverwege de eerste transactie dat de status INVALID is.
Figure 10: Concurrency issue: nonrepeatable read.
De eerste transactie en de tweede transactie lezen allebei dezelfde variabele in. Binnen de eerste transactie wordt dezelfde variabele daarna nogmaals uitgelezen, maar misschien is die variabele inmiddels veranderd.
Figure 11: Concurrency issue: phantom read
Speciaal geval van non-repeatable read: de eerste transactie leest iets, en terwijl die transactie nog niet is afgelopen, verandert transactie 2 de database. Transactie 1 en transactie 2 hebben nu een verschillend beeld van de inhoud van de database.
Isolation level | Dirty reads | Non-repeatable reads | Phantom reads |
---|---|---|---|
serializable | ✘ | ✘ | ✘ |
Repeatable reads | ✘ | ✘ | ✓ |
Read committed | ✘ | ✓ | ✓ |
Read uncommitted | ✓ | ✓ | ✓ |
Voorbeeld: als de database transacties isoleert op het niveau van read uncommitted (het laagste niveau) dan kunnen er dirty reads, non-repeatable reads en phantom reads plaatsvinden. Op het hoogste niveau van transactie isolatie (serializable) kan dat niet.
Maar: hoe hoger het niveau van isolatie, hoe moeilijker de database schaalbaar wordt.
Vertical Scaling:
Horizontal Scaling
Replication
Sharding
Want hoe kun je horizontaal schalen en tegelijkertijd database concurrency over verschillende systemen implementeren?
Vooral geschikt voor CPU-intensieve problemen ("Massively Parallel Processing") waarbij het volume data minder ver opschaalt.
Variatie in vorm van queries mogelijk (snel antwoord), maar bottleneck: geen on-disk persistentie.
Voorbewerking vindt plaats buiten relationele database. Dat maakt in-memory relationele database mogelijk.
Real-time analyse is beperkt (want er is een voorbewerking), volume is beperkt tot geheugengrenzen, maar wel grote varieteit aan data mogelijk doordat er een uitgebreide voorbewerking mogelijk is.
Vooral geschikt als de vorm van queries al vaststaat en het schaalprobleem vooral het volume van de data betreft.
Vier belangrijke categorieën:
Vereenvoudigingen:
Kan alles, schaalt ongelimiteerd. Maar duur in onderhoud, want verschillende databases/codebases/etc.
De hele keten van ontwerp naar implementatie vereist gedegen kennis van de technische mogelijkheden.
In de workshops op vrijdagen gaan we spelen met de verschillende referentiearchitecturen zodat je aan het eind van de cursus een beeld hebt van hoe ze werken.