Description
The goal of the course is to elucidate key concepts, principles, and approaches used in designing applications where high performance, scalability, and resiliency are considered as primary quality attributes.
By the end of this course, candidates will have gained profound knowledge on designing and implementing high-performance, scalable, and resilient applications.
Key concepts covered in this course
- Different metrics are used to quantify performance, scalability, and resilience, such as response time, latency, throughput, percentiles, availability, etc.
- Various metrics employed to quantify performance, scalability, and resilience, including response time, latency, throughput, percentiles, availability.
- Architectural tactics and patterns that bolster high-performance, scalability, and resiliency, such as
synchronous vs. asynchronous communication, polling, webhook, queue/topic, WebSocket, gRPC, GraphQL, server-sent events, data push vs. data pull, caching, retry mechanisms, circuit breakers, bulkheads, back pressure, throttling, and others. - Modern architectural styles that may be employed in designing high-performance, scalable, and resilient applications, along with their respective advantages and disadvantages, such as microservices, event-driven architecture, reactive systems, serverless architectures.
- Networking components used to complement these architectural styles, such as API Gateways, load balancers, service discovery mechanisms, and content delivery networks.
- Optional: advanced high-performance development techniques such as NUMA, large pages, C-states, CPU Governors, RamFS/TmpFS, SSD I/O Scheduler, Kernel TCP Buffers, etc.
Agenda
Architectural concepts. Quality attributes metrics
- Modern Applications Capabilities
- Elasticity
- Performance
- Resiliency
- Modularity
- Quality attributes metrics
- Response Time
- Latency
- Throughput
- Availability
Architectural Tactics
- Synchronous vs Asynchronous
- Polling
- Webhook
- Queue/Topic
- WebSocket
- gRPC
- GraphQL
- Server-Sent Events (SSE)
- Data Push vs. Data Pull
- Caching
- Fetching strategies
- Eviction Policies
- Cache distribution (local/embedded vs. distributed)
Architectural Patterns
- Resilience Patterns
- Retry
- Circuit Breaker
- Bulkhead
- Back Pressure
- Throttling
- Database Scalability Patterns
- Database Read Replicas
- Sharding
- Change Data Capture
- Search Index
Networking Assets
- API Gateway
- Load Balancer
- Service Discovery
- Content Delivery Network
Architectural Styles
- Microservices
- Pros and cons, when to use, problems they might (or not) solve
- Design principles
- API Management
- Backend-for-Frontend
- Data Management (e.g., shared-nothing approach)
- Event Driven Architectures
- Event structure and schema
- Event vs. command
- Event Carried State Transfer
- Serverless Architectures
- Back-end as a Service (BaaS)
- Function as a Service (FaaS)
- How to use a FaaS to retry failed messages
- Reactive Systems
- Design Principles
- Reactive Programming vs. Reactive Systems
Advanced development, and hardware optimisations techniques (this is optional, only if there is a specific interest)
- Native Compilation
- Asynchronous Logging
- Marshaling / Unmarshaling (i.e., binary data format)
- Non-Uniform-Memory-Access (NUMA)
- Large Pages
- RamFS & TmpFS
- CPU C-States
- CPU Governors
- Memory Management: Swap
- Network IO: Kernel TCP buffers
Duration
- 16 hours
Target Audience
- software developers
- technical leaders
- software/solution architects
- test engineers
- business analysts with a technical background or passionate about technology
GitHub Repository
This GitHub repository supplements the course with practical examples, code snippets, and additional materials to enhance your learning experience.
Attendees’ Feedback
“Excellent course content helping me to understand a lot of things, from a very high level and abstract to a very deep and technical perspective.”
“I recommend this course if you want to get in touch with real technical topics. The trainer clearly explained to them, even for less technical people.”
“The trainer was very well prepared. He answered all of our questions, even if they were not really the subject of the training.”
“I liked more the advanced part about how to tune an application, outside of the programming language, to get better performance.”
“Interesting and informative course, presented by a trainer who knows a lot of stuff. I got a lot of ideas and techniques that I can use to build more efficient applications in my daily job.”
People from the following companies attended my courses:
Enroll
Note: At the moment this course is available only for companies, teams, or groups of students. The individual subscription (i.e. single person) is not an option at the moment.