Cloud Design Requirements & Software Architectures (Lecture 3) Flashcards
What is requirements engineering?
-> process of eliciting, analysing, documenting, validating & managing the requirements of a software
Typical requirements (or oppsite)
requirements:
- functionality
- user interaction
- error handling
no requirements:
- system design
- implemenation
- development method
–> WHAT, NOT HOW
Stages of requirements engineering
- Elicitation
-> gathering requirements from endusers (workshops, interviews) - Analysis
-> analyze & prioritize requirements - Specifiaction
-> documentation of requirements - Verification & Validation
-> ensuring that the requirements are complete and correct - Management
-> tracking changes of requirements - Maintenance
-> managing changer of requirements over time
Types of requirements
function requirements:
- specific task and functions
- expressed in user cases
non- functional requirements:
- characterisitcs or qualities
–> performance, usability, reliability
Non-functional requirements (7)
- Performance
–> Latency : time between request and response
–> Throughput: number of people you can serve
–> Utilization: percentage of used capacity - Scalability
–> vertical scaling
- parallelism with multicores
–> horizontal scaling
- adding more machines
–> A Elasticity
- ability to expand and shrink
- Reliability
- safe from bugs - Availability
minimize downtime
four 9: hour per year
five 9: 5 minutes per year - Secrurity
- protected from unauthorized access
- what you store an what you get has to be the same (integrity) - Maintainability
-> you have to be always able to make some changes - Deployability
- can be taken from development to porduction
What is software architecture
definiert die:
- Komponenten einer Software
- wie sie miteinander interagieren
- wie sie verpackt sind
Klassische 3 Tier Architecture
Presentation -> UI
I
I
V
Application -> logic / Brain behind application
I
I
V
Data -> Stores the information
Monolithic Architecture (+/-)
everything is packaged in a single programm
+:
Testing
Debugging
Monitoring
Deployment
-:
strong dependency
many testing
scaling
for scaling : load balancer: balances multiple clients on multiple Monolithic blocks
Microservice Architecure (key principles, +/-)
- split the Monolithic block in small functionel units
key principles:
- loose coupling:
– changing one microservice does not require a change of everything
-high functional cohesion:
– everyone of them has a single, well defined purpose
– everyone has their own database!!
+:
Technical heterogenty
-> you can use the best Technology for each different parts
-:
complex
remote calls instead of function calls -> latency
Monitoring
- divers team of experts
- Data consistency (Cache Kohärenz)
How to ensure Data consistency
Two phase commit:
every participant has to agree on the results, if one disagrees, its not commited
prepare phase <-> commit/rollback phase
Saga Pattern
every service runs a local Transaction & report success/failure