SRE > Engineering
graph TD
SRE[Site Reliability Engineering]
SRE --> SW[Software Engineering]
SW --> PL[Programming Languages]
PL --> SysPL[Systems Programming Languages]
SysPL --> Rust
SysPL --> Go
Go --> GoRoutines
Go --> Channels
Go --> Select
Go --> GC
PL --> ScrPL[Script Programming Languages]
ScrPL --> Ruby
ScrPL --> Python
PL --> FunPL[Functional Programming Languages]
FunPL --> Haskell
FunPL --> Lisp
SW --> PT[Programming Topics]
PT --> ALG[Algorithms]
ALG --> SRT[Sorting]
ALG --> CPX[Complexity]
PT --> DS[Data Scructures]
DS --> Lock[Lock]
DS --> Futex[Futex]
DS --> Semaphore
DS --> Graph[Graph]
DS --> T3[Tree]
DS --> HS[HashMap/HashTable]
SW --> DB[Databases]
DB --> DBT[Theory]
DBT --> CAP[CAP Theorem]
DBT --> DBTS[Scaling]
DBT --> DBTR[Replication]
DBT --> DBTX[Sharding]
DBT --> DBTO[Operating]
DB --> SQL[SQL]
SQL --> rSQL[Row-oriented]
rSQL --> PgSQL
PgSQL --> rSQLRep[Replication]
PgSQL --> rSQLOps[Operating]
rSQLOps --> rSQLOpsVac[Vacuum]
rSQLOps --> rSQLOpsPerf[Performance]
rSQLOpsPerf --> rSQLOpsPeQ[Query]
rSQLOpsPeQ --> rSQLOpsPeQbad[pgBadger]
rSQL --> MySQL
MySQL --> mSQLRep[Replication]
MySQL --> mSQLOps[Operating]
SQL --> cSQL[Column-oriented]
cSQL --> Redshift
DB --> NoSQL[NoSQL]
NoSQL --> KV[KeyValue]
KV --> Rd[Redis]
Rd --> RdSn[Sentinel]
Rd --> RdCls[Cluster]
Rd --> RdRepl[Replication]
Rd --> RdSh[Sharding]
Rd --> RdRBAC[RBAC]
Rd --> RdEC[ElastiCache]
RdEC --> RdECG[Global Datastore]
KV --> Mc[memcached]
NoSQL --> Col[ColumnStore]
Col --> HBas[HBase]
Col --> Cas[Cassandra]
Col --> Scy[ScylaDB]
Col --> Dyn[DynamoDB]
NoSQL --> DoS[DocumentStore]
DoS --> Mng[MongoDB]
DoS --> ES[ElasticSearch]
SW --> LD[Ledgers]
SW --> DSi[Distributed Systems]
DSi --> BHP[Bulkhead Pattern]
DSi --> CBP[Circuit Breaker Pattern]
DSi --> EvS[Event Sourcing]
DSi --> CQRS[CQRS - Command Query Responsibility Segregation]
DSi --> DPro[Distributed Processing]
DPro --> HDP[Hadoop]
DSi --> DLB[Load Balancing]
DSi --> STM[Streaming]
STM --> Kafka
STM --> Kinesis
STM --> NATS
DSi --> RPC[Remote Procedure Call]
RPC --> fRPC[Frameworks]
fRPC --> grpc[GRPC]
RPC --> dfRPC[Data Format Protocols]
dfRPC --> dfnRPC[Non-Binary]
dfnRPC --> TEXT
dfnRPC --> JSON
dfnRPC --> YAML
dfRPC --> dfbRPC[Binary]
dfbRPC --> AVRO
dfbRPC --> Protobufs
dfbRPC --> Thrift
DSi --> SDi[Service Discovery]
SDi --> SDiSS[Server Side]
SDi --> SDiCS[Client Side]
- Version Control
- git
- Version Control with Git π π°
- git
- Programming Languages
- Paradigms
- Coursera - Programming Languages - Part A πΌ π π
- Coursera - Programming Languages - Part B πΌ π π
- Coursera - Programming Languages - Part C πΌ π π
- Functional Programming Languages
- Haskell
- General Overview
- Haskell From First Principles π π°
- Book Exercises π πͺπΌ π
- Simon Peyton Jones - Escape from the ivory tower - the Haskell journey πΌ π
- Simon Peyton Jones - A History of Haskell - being lazy with class πΌ π
- Andrew Rademacher - Demystifying Haskell πΌ π
- Haskell From First Principles π π°
- Use cases
- Practice
- The Monad Challenges πͺπΌ π
- General Overview
- Concepts
- Functional Programming
- Lambda Calculus
- Computerphile - Lambda Calculus πΌ π
- Lambda Calculus - Fundamentals of Lambda Calculus & Functional Programming πΌ π
- Lambda Calculis - Church Encodings && Combinators πΌ π
- The Y Combinator
- Computerphile - Y Combinator πΌ π
- Monads
- Haskell
- Systems Programming Languages
- Rust
- The Rust Programming Language π π
- Annotations π
- SubProjects
- General Overview
- Use cases
- Testing Frameworks
- Speculate Adds RSpec like behavior to rust via macros
- Programming Rust π π°
- The Rust Programming Language π π
- Go
- Concurrency
- Concurrency in Go π π°
- [Concurrency Patterns in Go](https://www.youtube.com/watch?v=YEKjSzIwAdA πΌ π)
- Channels
- How do channels work? - Kavya Joshi - GopherCon 2017 πΌπβοΈ
- Practical Channel Work πΌ π
- Channels
- Garbage Collector
- Golang's Realtime GC in Theory and Practice πΌ π
- Garbage Colletor Handbook π π°
- Concurrency
- Rust
- Paradigms
- Programming Topics
- Algorithms and Data Structures
- Udacity - Intro to Data Structures and Algorithms by Google π π πΌ
- Coursera - Algorithms - Part 1 - Elementary data structures, sorting, and searching algorithms π π πΌ
- Coursera - Algorithms - Part 2 - Graph and string-processing algorithms π π πΌ
- Courated List of the 10 best free resources π° π
- Locks
- Let's talk locks! - Kavya Joshi πΌ π
- Futex
- Semaphores
- Alternative Data Structures
- βEsoteric Data Structures and Where to Find Themβ - Allan Deutsch πΌ π
- 0:36 Slot map
- 10:08 Bloom filters (non-counting)
- 16:46 Navigation meshes
- 20:36 Hash pointer / Block chain / Merkle tree
- Probabilistic Data Structures
- Bloom Filter
- An Introduction to Bloom Filter (Probably Yes, Always No) πΌ π
- Bloom Filters πΌ π
- Bloom filter for System Design applications πΌ π
- Bloom Filters πΌ π
- Count-Min-Sketch
- Bloom Filter
- βEsoteric Data Structures and Where to Find Themβ - Allan Deutsch πΌ π
- Algorithms and Data Structures
- Databases
- Theory
- Designing Data-Intensive Applications - Martin Kleppmann π π°
- CAP Theorem Revisited π° π
- The Pathologies of Big Data π° π
- Scaling
- Replication
- --
- Sharding
- Understanding Database Sharding - DigitalOcean π° π βοΈ
- Sharding in Plain English - Citrus Data Blog π° π
- Introduction to Sharding - B's March (MongoDB Focused) πΌ π
- Sharding & Database Partitioning | System Design Basics πΌ π
- System Design - Sharding | Data Partitioning πΌ π
- Operating
- SQL
- Row-based
- PostgreSQL
- Postgres: Up & Running π π° βοΈ
- Learning PostgreSQL 11 π π°
- Mastering PostgreSQL 11 - Second Edition π π°
- Understanding Advanced Datatypes in PostgreSQL πΌ π
- Updating a 50 terabyte PostgreSQL database π° π
- How Twitch uses PostgreSQL π° π
- Handling Growth with Postgres: 5 Tips From Instagram π° π
- Updating a 50 terabyte PostgreSQL database π° π
- Sharding & IDs at Instagram π° π
- Sharding and Scaling PostgreSQL: Principles and Practice Webinar πΌ π
- Citus vs. Single-Node Postgres Database | A Side-by-Side Comparison πΌ π
- Replication
- Three Approaches to PostgreSQL Replication and Backup π° π
- PostgreSQL Streaming Replication πΌ π
- PostgreSQL Replication Concepts πΌ π
- PostgreSQL Replication by example - Kobus Wolvaardt πΌ π βοΈ
- Monitoring
- Operating
- Vacuum
- Performance
- MySQL
- Learn to stop using shiny new things and love MySQL π° π
- Tracking the MoneyβββScaling Financial Reporting at Airbnb π° π
- Scaling to 100M: MySQL is a Better NoSQL π° π
- Unlocking Horizontal Scalability in Our Web Serving Tier π° π
- Why Uber Engineering Switched from Postgres to MySQL π° π
- Evaluating MySQL Parallel Replication Part 4, Annex: Under the Hood π° π
- Mitigating replication lag and reducing read load with freno π° π
- Black-Box Auditing: Verifying End-to-End Replication Integrity between MySQL and Redshift π° π
- How We Partitioned Airbnb's Main Database in Two Weeks π° π
- Sharding Pinterest: How we scaled our MySQL fleet π° π
- How We Replaced Our Data Pipeline With Zero Downtime π° π
- Vitess: MySQL Sharding - Square Engineering πΌ π
- PostgreSQL
- RDS
- Aurora
- Amazon Aurora Multi-Master: Scaling out database write performance (MySQL) πΌ π
- Aurora Encryption Performance Numbers π° π
- Aurora Global Database πΌ π
- Performance Tunning
- Part 1 - Memory and Query Plan Management π° π
- Part 2 - Replications Security and Logging π° π
- Part 3 - Optimizer Params π° π
- Part 4 - ANSI Compatibility Options π° π
- Security
- Encryptin an exsting RDS PgSQL π° π
- RDS Proxy
- Aurora Serverless
- Cross-region Replication
- Aurora
- Column-based
- Row-based
- NoSQL
- History
- Early 80s - Relational Databases
- TODO
- Late 90s - CAP Theorem *
- Late 2000s
- Early 80s - Relational Databases
- Generic
- KeyValue
- BoJack βπΌ π» π
- Why you should build your own NoSQL database βπΌ π° π
- Redis
- Introduction
- What is Redis? - Jamil Spain πΌ π
- Redis Explained
- Redis Cookbook π π°
- Usecases
- Internals
- Cache
- Replication
- How Redis Replication Works π° π
- Streams
- Redis Streams πΌ π
- Sentinel
- Cluster
- RBAC/RedisAuth
- Redis Best Practices πΌ π
- Enterprise
- Monitoring
- Datadog - How to Monitor Redis Performance Metrics - Part 1 π° π
- Datadog - How to Monitor Redis Performance Metrics - Part 2 π° π
- Datadog - How to Monitor Redis Performance Metrics - Part 3 π° π
- What Happens When Redis Runs Out of Memory? πΌ π
- ElastiCache Specific
- Operating
- Redis Replication Buffer π° π
- Hosted
- ElastiCache
- AWS re:Invent 2020: Design for success with Amazon ElastiCache best practices πΌ π
- AWS re:Invent 2021 - Deep dive on Amazon ElastiCache for Redis - Groupon - DataTiering πΌ π
- Global Datastore - Cross-region replication (DR)
- Redis Global Datastore π° π
- ElastiCache
- Introduction
- Column Store
- DynamoDB - Yeah, DynamoDB says K:V but really... it's a Column Store (even thought the DynamoDB Paper was for a KV Store)
- HBase
- Cassandra
- Cassandra: Introduction by DATASAX πΌ π
- Cassandra at Instagram 2016 π° π
- Cassandra: The Definitive Guide π π°
- Amazon Keyspaces
- DocumentStore
- MongoDB
- ElasticSearch
- Internals
- ElasticSearch from the Bottom Up πΌ π
- ElasticSearch from the Bottom Up πΌ π
- Index && Shard πΌ π
- How many shards are too many shards? πΌ π
- Shard performance patterns πΌ π
- How many shards are too many shards? πΌ π
- Lucene
- Index && Shard πΌ π
- Elasticsearch Do's, Don'ts and Pro-Tips πΌ π
- Our Journey with Elasticsearch: Indexing 200M Daily Records πΌ π
- Internals
- History
- Theory
- Ledger
- What is a Ledger? πΌ π
- Amazon QLDB: An engineer's deep dive on why this is a game changer πΌ π
- Distributed Systems
- Theory
- Fallacies of Distributed Computing π° π
- Distributed Systems, 2nd Edition π π°
- Distributed Systems Observability π π°
- Designing Distributed Systems π π°
- Distributed Denial of Service (DDoS) π π°
- Distributed Systems Training π° π
- Service Discovery
- Bulkhead Pattern
- Bulkhead Pattern - Origin & Concept πΌ π
- Bulkhead Pattern - Examples πΌ π
- Circuit-Breaker Pattern
- Event-Driven Architecture
- Practical Event Driven Architecture πΌ π
- Event Sourcing / CQRS
- Go Back to the Future with Event Sourcing and CQRS πΌ π
- Event Sourcing You are doing it wrong - David Schmitz πΌ π
- The Many Meanings of Event-Driven Architecture - Martin Fowler πΌ π
- An Introduction to CQRS and Event Sourcing Patterns - Mathew McLoughlin πΌ π
- Go Back to the Future with Event Sourcing and CQRS πΌ π
- Streaming
- Kafka
- Introduction to Kafka πΌ π
- Commit Logs in an Age of Microservices - Tim Berglund πΌ π
- Should you put several event types in the same Kafka topic? - Martin Kleppmann π° π
- Practical
- Kafka: The Definitive Guide π π°
- Kafka to MSK: MirrorMaker/ApacheFlink/Capacity Planning πΌ π
- Internals
- NATS
- Practical NATS: From Beginner to Pro π π°
- Kinesis
- Commit Log
- Commit Logs in an Age of Microservices - Tim Berglund πΌ π
- Build your Own
- 14-bits/voik π» π
- Corfu - A distributed shared log π° π
- Building a Distributed Message Log from Scratch by Tyler Treat - Video πΌ π
- Building a Distributed Log from Scratch, Part 1: Storage Mechanics π° π
- Building a Distributed Log from Scratch, Part 2: Data Replication π° π
- Building a Distributed Log from Scratch, Part 3: Scaling Message Delivery π° π
- Building a Distributed Log from Scratch, Part 4: Trade-Offs and Lessons Learned π° π
- Building a Distributed Log from Scratch, Part 5: Sketching a New System π° π
- Code
- travisjeffery/Jocko - Distributed commit log service in Go
- zowens/commitlog - Append-only commit log library for Rust
- liftbridge-io/liftbridge - Lightweight, fault-tolerant message streams
- People to Follow
- Tyler Treat π¦
- Kafka
- Load Balancing
- Distributed Processing
- Hadoop
- Hadoop: Up & Running π π°
- Hadoop
- RPC - Remote Procedure Call
- Frameworks
- RPC and gRPC πΌ π
- Schema/Format
- Binary
- Schema Evolution: AVRO, Protobufs and Thrift π° π
- AVRO vs Protobufs vs Thrift π° π
- Binary
- Frameworks
- Theory