Fundamentals of Backend Engineering

Fundamentals of Backend Engineering

English | MP4 | AVC 1280×720 | AAC 44KHz 2ch | 54 lectures (15h 53m) | 13.16 GB

Understand backend communication design patterns, protocols, execution and proxying

Backend engineering is an art. During my 18 years career working with and building backend applications, I discovered that certain communication design patterns keep emerging. There are only handful of ways clients communicate with backend applications, although they might be more, I believe the patterns I discuss in this course are the most common. Examples of these patterns are request-response, publish-subscribe, short and long and push.

Based on these communication design patterns, engineers may use a number of protocols for concrete communication. While core transport vehicles are limited to either TCP or UDP, tons of industry specific protocols are built on top of these two to address certain problems and use cases. Examples of these high level protocols are HTTP/1.1, HTTP/2, HTTP/3, gRPC, WebRTC and many more. Other transport protocols like QUIC was built on top of UDP to bring HTTP/2 streaming down at the transport level. Each protocol has its pros and cons and fits certain use cases. In the course, I discuss the top common protocols and provide examples and demos where applicable.

Before the client can send a request, it has to establish a connection to the backend. Understanding how the connection is established, and what parts of connection establishment is done at kernel and what parts are done at the backend application process is critical. How the connection is then accepted by the backend application and how it can accept connections as fast as possible so the kernel queue doesn’t get full otherwise clients can no longer connect.

After the connection is established the client sends the request, but what happens exactly in the backend application to read the request? What exactly is a request? Understanding the cost of parsing a request based on the protocol makes the engineer appreciate the work done and equip her with better tools to troubleshoot performance problems or bugs.

Once the request reaches the backend, the application has to execute the request. The backend has a buffet of design choices when it comes to the style of execution it can choose. Understanding the difference between a process and a thread, multi-process, multi-threaded and the correlation to the number of CPU cores or hardware threads is crucial to pick the right execution pattern. One does not have to stick with these patterns but can invent new ones that suits their needs.

This course is designed for engineers who have built backend applications, it is an intermediate — advance level course, certain programming and networking knowledge is required so I recommend taking my fundamentals of network engineering course before taking this course if you don’t have the networking skills. I hope you enjoy this course, and thank you so much for considering it.

What you’ll learn

  • Learn the fundamentals of backend engineering
  • Backend communication design patterns
  • Understand how backend communication protocols work
  • Comprehend how OS Kernel communicate with Backend Applications
  • Operating System fundamentals (Thread, Process, async IO in linux)
  • Learn HTTP/1.1, HTTP/2, HTTP/3
  • Learn gRPC, WebRTC, WebSockets
  • Learn TLS 1.2, TLS 1.3, QUIC 0RTT
Table of Contents

1 Welcome
2 Who is this course for
3 Course Outline
4 Course Notes
5 Download all slides source code and references

Backend Communication Design Patterns
6 Backend Communication Design Patterns Intro
7 Request Response
8 Synchronous vs Asynchronous workloads
9 Push
10 Polling
11 Long Polling
12 Server Sent Events
13 Publish Subscribe PubSub
14 Multiplexing vs Demultiplexing h2 proxying vs Connection Pooling
15 Stateful vs Stateless
16 Sidecar Pattern

17 Protocols Intro
18 Protocol Properties
19 OSI Model
20 Internet Protocol
21 UDP
22 TCP
23 TLS
24 HTTP11
25 WebSockets
26 HTTP2
27 HTTP3
28 gRPC
29 WebRTC

Many ways to HTTPS
30 HTTPS Communication Basics Intro
31 HTTPS over TCP with TLS 12
32 HTTPS over TCP with TLS 13
34 HTTPS over TFO with TLS 13
35 HTTPS over TCP with TLS 13 and 0RTT
36 HTTPS over QUIC with 0RTT

Backend Execution Patterns
37 Backend Execution Patterns Intro
38 The Process and The Thread and how they compete for CPU time
39 How The Backend Accepts Connections
40 Reading and Sending Socket Data
41 The Listener The Acceptor and the Reader
42 Single Listener Acceptor and Reader Thread Execution Pattern
43 Single Listener Acceptor and Multiple Readers Thread Execution Pattern
44 Single Listener Acceptor Reader with Message Load Balancing Execution Pattern
45 Multiple Accepter Threads on a Single Socket Execution Pattern
46 Multiple Listeners Acceptors and Readers with Socket Sharding Execution Pattern
47 Backend Idempotency
48 Nagles Algorithm

Proxying and Load Balancing
49 Proxy vs Reverse Proxy
50 Layer 4 vs Layer 7 Load Balancers

51 How ChatGPT uses Server Sent Events
52 How I design software
53 The Journey of a Request to the Backend

Answering Your Questions
54 How does the Kernel manage backend connections