

The Backend Engineering Show with Hussein Nasser
Hussein Nasser
Welcome to the Backend Engineering Show podcast with your host Hussein Nasser. If you like software engineering you’ve come to the right place. I discuss all sorts of software engineering technologies and news with specific focus on the backend. All opinions are my own.
Most of my content in the podcast is an audio version of videos I post on my youtube channel here http://www.youtube.com/c/HusseinNasser-software-engineering
Buy me a coffee
https://www.buymeacoffee.com/hnasr
🧑🏫 Courses I Teach
https://husseinnasser.com/courses
Most of my content in the podcast is an audio version of videos I post on my youtube channel here http://www.youtube.com/c/HusseinNasser-software-engineering
Buy me a coffee
https://www.buymeacoffee.com/hnasr
🧑🏫 Courses I Teach
https://husseinnasser.com/courses
Episodes
Mentioned books

Dec 20, 2019 • 1h 8min
Episode 117 - Database Engines
Database engines or storage engines or sometimes even called embedded databases is software library that a database management software uses to store data on disk and do CRUD (create update delete)
Embedded means move everything in one software no network client server.
In this video I want to go through the few popular database engines, explain the differences between them and finally I want to spin up a database and change its engine and show the different features on each engine
Timecodes
What is a database Engine 3:00
myISAM 9:43
Aria 16:30
InnoDB 19:00
XtraDB 25:30
LevelDB 27:40
RocksDB 34:00
SQLite 38:11
BerkelyDB 42:00
Demo! 47:11
Cards
ACID 4:30
mysql/javascript 56:17
Resources
https://youtu.be/V_C-T5S-w8g
https://mariadb.com/kb/en/library/changes-improvements-in-mariadb-102/
https://mariadb.com/kb/en/library/why-does-mariadb-102-use-innodb-instead-of-xtradb/
https://github.com/facebook/rocksdb/wiki/Features-Not-in-LevelDB
https://mariadb.com/kb/en/library/aria-storage-engine/
Best of MyISAM and InnoDB
What is the performance impact of using CHAR vs VARCHAR on a fixed-size field?
MySQL :: MySQL 8.0 Reference Manual :: 15.6.2.1 Clustered and Secondary Indexes
Why Uber Engineering Switched from Postgres to MySQL | Uber Engineering Blog

Dec 18, 2019 • 59min
Episode 116 - Database Sharding
Database Sharding Crash Course (with Postgres examples)
Database sharding is process of segmenting the data into partitions that are spread on multiple database instances to speed up queries and scale the system.
What is sharding?
sharing key / partition key
Consistent Hashing
Horizontal partitioning vs Sharding
Example
Pros and cons
What is Sharding? 1:30
Consistent Hashing 4:50
Horizontal partitioning vs Sharding 7:36
Example 8:45
Spin up Docker Postgres Shards 10:02
Write to the shard 17:25
Read from the Shard 39:20
Pros & Cons 51:10
Cards
Postgres pgadmin Docker 8:54
Postgres Javascript 18:18
URL vs Query param 22:30
CORS 29:30
sql injection 42:40
Source Code
https://github.com/hnasr/javascript_playground/tree/master/sharding
Docker commands (including pgadmin)
https://github.com/hnasr/javascript_playground/blob/master/sharding/shards/commands.txt
Dockerfile & init.sql
https://github.com/hnasr/javascript_playground/tree/master/sharding/shards
Horizontal partitioning vs Sharding
HP same database instance so you can still join
sharding across instances (different server)
Pros
Extreme scale rdbms
Optimal and Smaller index size
Cons
Transactions across shards problem
Rollbacks
Schema changes
Complex client (aware of the shard)
Joins
Has to be something you know in the query
Example
URL shortener
create table
CREATE TABLE public.test1
(
id serial NOT NULL primary key,
url text,
url_id character(5)
)
Spin up 3 instances
p1
P2
P3
post
get

Dec 18, 2019 • 51min
Episode 115 - Varnish HTTP Accelerator
Varnish is a reverse proxy web accelerator Written in C designed to improve HTTP performance by using server side caching.
In this video I’m going to go through how Varnish works, we will spin up a Varnish docker container and finally talk about the pros and cons of this tech.
Agenda
Classic HTTP Architecture
How Varnish Works?
HTTP Setup - Varnish
HTTPS Setup - Varnish with Caddy as TLS Terminator.
Varnish Pros & Cons
Summary
Pros
Cache & prefetching documents
Resolve DNS hostnames in documents
Rewrite scripts to optimize code
Load Balancing
Backend Connection Pooling
Varnish Modules (VMODS, e.g. rewrite headers)
Edge side includes (personalized dynamic page)
Cons
Cache Invalidation
Only works on unencrypted HTTP
For HTTPS frontend, terminate TLS
For HTTPS backend, no solution in Varnish open source
Can’t cache POST requests (e.g. GraphQL queries)
HTTP/2 backends won’t benefit
docker commands
docker run --name varnish -p 8080:80 varnish
docker cp default.vcl varnish:/etc/varnish
default.vcl
vcl 4.0;
backend default {
.host = "husseinmac";
.port = "2015";
}
timecodes
Classic HTTP Architecture : 1:53
How Varnish Works 3:50
Demo HTTP 7:50
Demo HTTPS 18:23
Varnish Pros 28:43
Varnish Cons 39:26
Cards:
Connection Pooling 2:15 https://www.youtube.com/watch?v=GTeCtIoV2Tw
Layer 4 vs Layer 7 Load balancing 6:25 https://www.youtube.com/watch?v=aKMLgFVxZYk
GET vs POST 6:48 https://www.youtube.com/watch?v=K8HJ6DN23zI
Postgres NodeJS Chrome 8:23 https://www.youtube.com/watch?v=0JNq46eFuOM
Redis 46:13 https://www.youtube.com/watch?v=sVCZo5B8ghE
TLS Termination 49:35 https://www.youtube.com/watch?v=H0bkLsUe3no
tags:
varnish http accelerator, varnish pros and cons, varnish with https, varnish disadvantages
Resources
edge side includes
https://www.fastly.com/blog/using-esi-part-1-simple-edge-side-include
Cache invalidation varnish
https://www.smashingmagazine.com/2014/04/cache-invalidation-strategies-with-varnish-cache/
——

Dec 18, 2019 • 24min
Episode 114 - HTTP/2
short is a major revision of the hyper text transfer protocol that improves the performance of the web. It uses a binary protocol and multiplexing.
In this video I want to go through how HTTP/2 works, its pros and cons and show the performance difference between HTTP 1.1 and HTTP/2
Http/1
request has to wait for a response
And if you used up your connection response you can send anything else.
Source Code: https://github.com/hnasr/javascript_playground/tree/master/staticpage
So hack !
6 tcp connections
Pros
One connection
Multipex
Push ( have to enable)
Hpack (compress)
Cons
Abuse push
Proxies that dont support it might slow down
Load balancer layer 7 (a layer 7 load balancer that doesnt support h2 will slow down when your web server supports it)
Cards
1:25 HTTP crash course
12:30 TLS
Time codes
HTTP 1.1 2:15
HTTP/2 5:50
HTTP/2 With Push 8:25
HTTP/2 Pros 9:48
HTTP/2 Cons 14:10
Demo 17:15
+----------+--------+---------+---------+
| Protocol | Online | Fast 3G | Slow 3G |
+----------+--------+---------+---------+
| HTTP 1.1 | 94 ms | 10 s | 36 s |
+----------+--------+---------+---------+
| HTTP/2 | 171 ms | 2.7 s | 10 s |
+----------+--------+---------+---------+

Dec 9, 2019 • 13min
Episode 113 - Collateral Knowledge
Sorry about the free form audio and low quality thought I post something here its been while

Nov 30, 2019 • 24min
Episode 112 - Tor (The Onion Router)
Tor or (The Onion Router) is a free and open source project for allowing anonymous communication.
In this video I want to discuss this technology and explain how it works.
What can sniffers really see?
Why Tor? Why don’t we just use a VPN?
How Tor Works?
More about Tor
So if you are interested stay tuned.
Cards:
6:00 TLS
10:53 symmetric key encryption
TimeCodes:
Normal Request 1:30
What sniffers see 4:30
Why Tor and not VPN? 6:00
How Tor Works 8:50
More tor info 21:00
Tor Directory
Relay node
Exit node
Guard node

Nov 30, 2019 • 1h 18min
Episode 111 - Kafka
Apache Kafka is a distributed stream processing software developed by LinkedIn and written in Scala and Java.
In this video I want to focus on the basics on Kafka, talk about how it works give finally spin up a kafka cluster and write a producer and a consumer.
Kafka Components
_ producer
_consumer
_topic
_partition
How Kafka works
Example ( Ride sharing )
Spin Kafka cluster
Write a producer
Write a consumer
Kafka Applications
Pros and Cons

Nov 3, 2019 • 16min
Episode 110 - Do you need a VPN?
Tom Scott Full Video
https://youtu.be/WVDQEoe6ZWY
Tom Scott is a YouTuber with around 2M subscribers who discusses and specialized in computer security. I always enjoy his videos specially those on computerphile. He recently made a very interesting video titled This video is sponsor by —- We all probably know this is a reaction video to NordVPN Hack.
He is really smart and not just because of his accent
I wanted to make a video to elaborate on some of the statements that Tom made in his video and how that actually work.
Cards
5:30 TLS https://www.youtube.com/watch?v=AlE5X1NlHgg
12:24 TLS Termination https://www.youtube.com/watch?v=H0bkLsUe3no
Forged certificate
https://slate.com/technology/2016/12/how-the-2011-hack-of-diginotar-changed-the-internets-infrastructure.html

Nov 3, 2019 • 43min
Episode 109 - RabbitMQ
RabbitMQ
RabbitMQ is an open source distributed message queue written in Erlang and supports many communication protocols. It was trying to solve the spaghetti 🍝 mesh architecture where every client is communicating with other client in System by introducing an extra layer in the middle.
(slide)
In this video we will explain basic components of RabbitMQ Such as AMQP, channel, queue, publisher, consumer and some stuff, we will also learn how to spin up a RabbitMQ server and we will finally write some code to develop a publisher client that post messages to RabbitMQ. We will also write the consumer piece which will be the code that reads rabbitMQ. Finally I will talk about my personal thoughts on this tech.
RabbitMQ Components(slide)
*Publisher
*Consumer
*Connection
*Channel
*Queue
Spin RabbitMQ server with Docker
Write a Publisher client NodeJs
Write a Consumer client Nodejs
My Thoughts about this tech
Summary
timecodes
components 2:00
spin up docker rabbit 8:30
Write a Publisher client NodeJs 11:00
Write a consumer client NodeJs 20:30
my thoughts 33:50
Source Code: https://github.com/hnasr/javascript_playground/tree/master/rabbitmq
Example
Schedule async job
Exchange
Queues
Publisher
Consumer
AMQP
Channel
Connection
HTTP
AMQP
Uses Channels and Queues
Multiples channels into one connections
docker run --name rabbitmq -p 5672:5672 -d rabbitmq
docker run --name rabbitmq -p 5672:5672 -p 15672:15672 -d rabbitmq:3-management
HTTP
fetch("http://localhost:15672/api/vhosts”, {headers: {"Authorization" : `Basic ${btoa('guest:guest')}`}}).then(a=>a.json()).then(console.log)
fetch("http://localhost:15672/api/channels", {headers: {"Authorization" : `Basic ${btoa('guest:guest')}`}}).then(a=>a.json()).then(console.log)
fetch("http://localhost:15672/api/queues", {headers: {"Authorization" : `Basic ${btoa('guest:guest')}`}}).then(a=>a.json()).then(console.log)
https://www.squaremobius.net/amqp.node/channel_api.html#channel_bindExchange
https://www.rabbitmq.com/tutorials/tutorial-three-javascript.html

Oct 4, 2019 • 38min
Episode 108 - Redis
Redis is a noSQL key-value store, in memory database first that exploded in popularity in the past few years. In this video slash course, we will explain what Redis is, talk about the in-memory model, the optional durability, replication, clustering publish subscribe and the protocol and finally we will go through examples. During the video I will add time codes to each topic so you guys can jump to the topic that interests you the most. Table of Content and TimeCodes Redis as a NoSQL In Memory Key-Value store 3:49Optional Durability 10:00Transport Protocol 15:10Pub/Sub 18:24Replication and Clustering 20:40Examples 23:41Spin Docker 26:10Command CLI 28:50Set key 30:30 get key 31:00Set key with expiry 31:10exists key 32:00del 32:30 append key 32:50 publish subscribe 33:30 Commands Docker run --name redis -p 6379:6379 redis docker exec -it rdb redis-cli Cards 4:25 ACID! Support me on PayPal https://bit.ly/33ENps4 Become A Patron https://www.patreon.com/join/hnasr?


