Fundamentals of Backend Engineering

16h 53m 4s
English
Paid
July 19, 2024

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.

Watch Online Fundamentals of Backend Engineering

Join premium to watch
Go to premium
# Title Duration
1 Welcome 05:48
2 Who is this course for? 03:03
3 Course Outline 10:48
4 Course Notes 03:31
5 Backend Communication Design Patterns Intro 02:03
6 Request Response 27:38
7 Synchronous vs Asynchronous workloads 42:31
8 Push 20:00
9 Polling 14:14
10 Long Polling 10:12
11 Server Sent Events 13:19
12 Publish Subscribe (Pub/Sub) 16:38
13 Multiplexing vs Demultiplexing (h2 proxying vs Connection Pooling) 14:53
14 Stateful vs Stateless 22:43
15 Sidecar Pattern 21:34
16 Protocols Intro 01:09
17 Protocol Properties 10:48
18 OSI Model 47:30
19 Internet Protocol 01:07:13
20 UDP 48:23
21 TCP 55:12
22 TLS 27:00
23 HTTP/1.1 31:12
24 WebSockets 21:22
25 HTTP/2 17:04
26 HTTP/3 27:59
27 gRPC 49:11
28 WebRTC 01:07:45
29 HTTPS Communication Basics Intro 03:15
30 HTTPS over TCP with TLS 1.2 05:48
31 HTTPS over TCP with TLS 1.3 03:55
32 HTTPS over QUIC (HTTP/3) 02:24
33 HTTPS over TFO with TLS 1.3 01:56
34 HTTPS over TCP with TLS 1.3 and 0RTT 02:07
35 HTTPS over QUIC with 0RTT 01:47
36 Backend Execution Patterns Intro 04:49
37 The Process and The Thread and how they compete for CPU time 27:47
38 How The Backend Accepts Connections 29:31
39 Reading and Sending Socket Data 21:24
40 The Listener, The Acceptor and the Reader 02:07
41 Single Listener, Acceptor and Reader Thread Execution Pattern 03:08
42 Single Listener, Acceptor and Multiple Readers Thread Execution Pattern 05:32
43 Single Listener, Acceptor, Reader with Message Load Balancing Execution Pattern 03:28
44 Multiple Accepter Threads on a Single Socket Execution Pattern 01:59
45 Multiple Listeners, Acceptors and Readers with Socket Sharding Execution Pattern 06:49
46 Backend Idempotency 06:25
47 Nagle's Algorithm 12:09
48 Proxy vs Reverse Proxy 20:06
49 Layer 4 vs Layer 7 Load Balancers 27:52
50 How ChatGPT uses Server Sent Events 44:08
51 The Journey of a Request to the Backend (Video) 12:21
52 JSON Web Token (JWT), its Pros and Cons 56:38
53 How does the Kernel manage backend connections? 04:56

Similar courses to Fundamentals of Backend Engineering

Apache Flink

Apache Flink

Duration 8 hours 31 minutes 38 seconds
Fundamentals of Database Engineering

Fundamentals of Database Engineering

Duration 26 hours 2 minutes 59 seconds
Neo4j: GraphDB Foundations with Cypher

Neo4j: GraphDB Foundations with Cypher

Duration 4 hours 44 minutes
Fundamentals of Networking Engineering

Fundamentals of Networking Engineering

Duration 13 hours 40 minutes 46 seconds
Web API From Start to Finish

Web API From Start to Finish

Duration 17 hours 59 minutes 54 seconds
Clean Code: Writing Code for Humans

Clean Code: Writing Code for Humans

Duration 3 hours 10 minutes 36 seconds
Fundamentals of Backend Communications and Protocols

Fundamentals of Backend Communications and Protocols

Duration 15 hours 35 minutes 37 seconds
Effective Database Design

Effective Database Design

Duration 1 hour 3 minutes 56 seconds