Designing High-Performance, Scalable, and Resilient Applications Course

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 optimizations techniques (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

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.