-
📙 Computer Systems A Programmer’s Perspective ✏️ Book Notes
-
📙 Modern Operating Systems ✏️ Book Notes
-
📙 Operating Systems: Three Easy Pieces
-
📙 Operating System Concepts
-
📙 Operating Systems Design and Implementation
-
📙 Advanced Programming in the UNIX Environment
- 📙 Computer Organization and Design: The Hardware/Sofeware Interface ✏️ Book Notes
- 📙 Computer Architecture: A Quantitative Approach
- 📙 Structure and Interpretation of Computer Programs
- 📙 Compilers: Principles, Techniques, and Tools
- 📙 Programmer Self-Cultivation: Linking, Loading and Libraries (🇨🇳 CN) ✏️ Book Notes
-
📙 TCP/IP ILLustrated Volume 1: The Protocols ✏️ Book Notes
-
📙 UNIX Network Programming, Volume 1: The Sockets Networking API ✏️ Book Notes: UNP ✏️ Book Notes: Linux Programming
-
📙 UNIX Network Programming, Volume 2: Interprocess Communications
-
📙 Computer Networking: A Top-Down Approach
-
📙 Computer Networks, 5th Edition
-
📙 Practical Packet Analysis: Using Wireshark to Solve Real-World Network Problems, 2nd Edition
-
The Secret To 10 Million Concurrent Connections - The Kernel Is The Problem, Not The Solution
-
HTTP
- RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing
- RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content
- RFC 7232 - Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests
- RFC 7233 - Hypertext Transfer Protocol (HTTP/1.1): Range Requests
- RFC 7234 - Hypertext Transfer Protocol (HTTP/1.1): Caching
- RFC 7235 - Hypertext Transfer Protocol (HTTP/1.1): Authentication
- RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)
- RFC 7541 - HPACK: Header Compression for HTTP/2
-
TLS
-
QUIC
-
ARP
-
ICMP
-
TCP
- RFC 793 - Transmission Control Protocol
- RFC 813 - Window and Acknowledgement Strategy in TCP
- RFC 879 - The TCP Maximum Segment Size and Related Topics
- RFC 896 - Congestion Control in IP/TCP Internetworks
- RFC 2581 - TCP Congestion Control
- RFC 5681 - TCP Congestion Control
- RFC 6582 - The NewReno Modification to TCP’s Fast Recovery Algorithm
- RFC 2018 - TCP Selective Acknowledgment Options
- RFC 2883 - An Extension to the Selective Acknowledgement (SACK) Option for TCP
- RFC 2988 - Computing TCP’s Retransmission Timer
- RFC 6298 - Computing TCP’s Retransmission Timer
-
UDP
-
IP
-
VXLAN
-
Generic Routing Encapsulation
-
Tunnel
- RFC 1853 - IP in IP Tunneling
- RFC 2784 - Generic Routing Encapsulation (GRE)
- RFC 2661 - Layer Two Tunneling Protocol "L2TP"
- RFC 2637 - Point-to-Point Tunneling Protocol (PPTP)
-
Other
- 📙 Database System Concepts (Fifth Edition)
- 📙 High Performance MySQL, 3rd
- 📙 Inside MySAQL: InnoDB Storage Engine
- 📙 Relational Database Index Design and the Optimizers
- MySQL Internals Manual
- How to Analyze and Tune MySQL Queries for Better Performance
- MySQL Performance Tuning 101
- MySQL Performance Schema & Sys Schema
- MySQL Performance: Demystified Tuning & Best Practices
- MySQL Security Best Practices
- MySQL Cluster Deployment Best Practices
- MySQL High Availability with InnoDB Cluster
- 📙 Data Structures and Algorithm Analysis in C: Second Edition
- 📙 Algorithms,Fouth Edition
- 📙 Grokking Algorithms: An illustrated guide for programmers and other curious people
- 📙 Programming Pearls (2/e)
- 📙 Data Structures and Algorithm Analysis in C: Second Edition
- Niklaus Emil Wirth: Algorithms + Data Structures = Programs .pdf
- Robert Kowalski: Algorithm = Logic + Control .pdf
-
coolshell 🇨🇳
Open-Close
-
📙 The C Programming Language
-
📙 C Programming: A Modern Approach
-
📙 C Traps and Pitfalls
-
📙 C++ Primer, 5th Edition ✏️ Book Notes
-
📙 Effective C++ ✏️ Book Notes
-
📙 More Effective C++ ✏️ Book Notes
-
📙 Modern Effective C++ ✏️ Book Notes
-
📙 Inside C++ Object Model ✏️ Book Notes
-
📙 C++ Templates The Complete Guide ✏️ Book Notes
-
📙 Modern C++ Design ✏️ Book Notes
-
Eli Bendersky: How debuggers work 🔗 Part 1 🔗 Part 2 🔗 Part 3
-
What Every C Programmer Should Know About Undefined Behavior 🔗 Part 1 🔗 Part 2 🔗 Part 3
-
OOP
- Itanium C++ ABI (Revision: 1.75)
- VTable Beginner 1: Interview Series C++ object layout 🇺🇸 EN 🇨🇳 CN
- VTable Beginner 2: Understand C++ vtable from assembly code 🔗 Part 1
- VTable Expert 1: What does C++ Object Layout Look Like?
- VTable Expert 2: C++ Virtual Table Tables(VTT)
- coolshell: C++ virtual function table analysis (:cn: CN)
- Inheritance Without Pointers
- Runtime Polymorphism Without Objects or Virtual Functions
- The cost of dynamic (virtual calls) vs. static (CRTP) dispatch in C++
- The Sad True about C++ Copy Elision
-
Const & Mutable
-
STL
-
C++ Memory Model
- Memory layout of C ++ objects (:cn: CN)
- C++ objects Memory layout (:cn: CN)
- std::memory_order
- C++ Memory Model
- Sequential Consistency
- The Atomic Flag
- The Atomic Boolean
- Atomics
- Synchronization and Ordering Constraints
- Sequential Consistency applied
- Acquire-Release Semantic
- Transitivity of the Acquire-Release Semantic
- memory_order_consume
- Acquire-Release Semantic - The typical Misunderstanding
- Fences are Memory Barriers
- Acquire-Release Fences
- Relaxed Semantic
- shared_ptr Thread Safety
-
CRTP
- Curiously Recurring Template Pattern (CRTP)
- The CRTP, episode One: Definition
- The CRTP, episode Two: What the CRTP can bring to your code
- The CRTP, episode Three: An implementation helper for the CRTP
- Mixin Classes: The Yang of the CRTP
- How to Turn a Hierarchy of Virtual Methods into a CRTP
- Replacing CRTP Static Polymorphism With Concepts
- Removing Duplicates in C++ CRTP Base Classes
- How to Reduce the Code Bloat of a Variadic CRTP
- Variadic CRTP Packs: From Opt-in Skills to Opt-in Skillsets
- Variadic CRTP: An Opt-in for Class Features, at Compile Time
-
Template
- One Trick with Private Names and Function Templates
- Modern C++ Features – Class Template Argument Deduction
- Build Throughput Series: Template Metaprogramming Fundamentals
- Build Throughput Series: More Efficient Template Metaprogramming
- How to Pass a Variadic Pack as a First Argument of a Function
- Dependent Name: Inheritance and Member Functions of Class Templates
- CppCon 2019: Jorg Brown "Reducing Template Compilation Overhead, Using C++11, 14, 17, and 20."
-
C++11
-
C++17
-
C++ 20
-
C++20: Aggregate, POD, trivial type, standard layout class, what is what
-
Open/Close
-
Awaitable Objects
-
Awaitable Signals
-
Coroutine Promises
- The mental model for coroutine promises
- Basic implementation of a promise type
- The initial and final suspend, and improving our return_value method
- Making the promise itself be the shared state, the inspiration
- Making the promise itself be the shared state, the outline
- Building a result holder for movable types
- Accepting types via return_void and return_value
- Awaiting the simple_task
- Managing the reference count of the coroutine state
- Making it impossible to co_await a task twice
- Getting rid of our mutex
- Getting rid of our reference count
- What does it mean when I declare my coroutine as noexcept?
- How do I create a coroutine that terminates on an unhandled exception?
- Snooping in on the coroutine body
- Adding custom resume context support to our awaiter
- Promise constructors
-
Mix
-
- The key to Accelerating Your Coding Skills
- Character Encoding
- What are some of the most basic things every programmer should know?
- 97 things every programmer should know?
- How to Ask Question The Smart Way
-
📙 Refactoring: Improving the Design of Existing Code ✏️ Book Notes
-
📙 Working Effectively with Legacy Code
-
📙 Clean Code: A Handbook of Agile Software Craftsmanship ✏️ Book Notes
-
📙 The Clean Coder:A Code of Conduct for Professional Programmers
- https://www.owasp.org/index.php/Main_Page
- Secure Coding Practice Guidelines
- SEI SERT Coding Standards
- Hardening Your HTTP Security Headers
- 📙 Perfect Software: And Other Illusions about Testing
- 📙 How Google Tests Software
-
📙 Domain-Driven Design: Tackling Complexity in the Heart of Software
-
📙 The Art of UNIX Programming
-
📙 Clean Architecture
- Red Hat Enterprise Linux
- x86-TSO: A Rigorous and Usable Programmer’s Model for x86 Multiprocessors
- Spurious wakeup 🔗 C++ Condition Variable
- LWN.netNews Kernel Index
- ✏️ Linux Kernel 4.19
- ✏️ Understanding Linux Kernel
- ✏️ Linux Kernel Development
- What is RCU? – "Read, Copy, Update"
- Linux Insides
- LWN’s kernel page
- Learn Linux Kernel from Android Perspective
- Linux Kernel Doc
- Kernel Planet: Kernel Developers Doc
- Linux Performance and Tuning Guidelines.pdf
- Linux Performance
- Optimizing web servers for high throughput and low latency
- What Every Programmer Should Know About Memory.pdf
- Memory Barriers: a Hardware View for Software Hackers.pdf
- A Tutorial Introduction to the ARM and POWER Relaxed Memory Models.pdf
- Understanding glibc malloc
- ptmalloc
- tcmalloc 🔗 Ref 🔗 Ref
- jemalloc.pdf
- C dynamic memory allocation
- Research on ptmalloc, tcmalloc and jemalloc memory allocation strategies (:cn: CN)
- Memory optimization summary: ptmalloc, tcmalloc, and jemalloc
- Scalable memory allocation using jemalloc
- Linux Kernel Vs. Memory Fragmentation Part I
-
📙 Linux High Performance Server Programming (:cn: CN) ✏️ Linux Programmnig Noetes ✏️ Linux System Notes
-
📙 Network tuning
-
Red Hat Enterprise Linux Network Performance Tuning Guide.pdf
-
Monitoring and Tuning the Linux Networking Stack: Receiving Data
-
Monitoring and Tuning the Linux Networking Stack: Sending Data
-
The BSD Packet Filter: A New Architecture for User-level Packet Capture.pdf
- Boost application performance using asynchronous I/O
- Lazy Asynchronous I/O For Event-Driven Servers
- IOCP
- Reactor: An Object Behavioral Pattern for Demultiplexing and Dispatching Handles for Synchronous Events.pdf
- Understanding Reactor Pattern: Thread-Based and Event-Driven
- The Design and Implementation of the Reactor.pdf
- The Secret To 10 Million Concurrent Connections -The Kernel Is The Problem, Not The Solution
- Epoll is fundamentally broken 🔗 1 🔗 2
- The implementation of epoll 🔗 1 🔗 2 🔗 3 🔗 4
- An Introduction to Lock-Free Programming
- Lock-Free Data Structures
- Lock-Free Data Structures.pdf
- Is Parallel Programming Hard, And, If So, What Can You Do About It?
- Non-blocking Algorithm
- Read Copy Update
- Seqlock
- Implementing Lock-Free Queues
- Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms.pdf
- Implementing a Recursive Mutex
- Weak vs. Strong Memory Models
- This Is Why They Call It a Weakly-Ordered CPU
- Memory Barriers Are Like Source Control Operations
- Acquire and Release Semantics
- Memory Ordering at Compile Time
- The Happens-Before Relation
- The Synchronizes-With Relation
- Acquire and Release Fences Don't Work the Way You'd Expect
- Acquire and Release Fences
- Roll Your Own Lightweight Mutex
- Can Reordering of Release/Acquire Operations Introduce Deadlock?
- You Can Do Any Kind of Atomic Read-Modify-Write Operation
- The Purpose of memory_order_consume in C++11
- Atomic vs. Non-Atomic Operations
- Memory Reordering Caught in the Act
- Gallery of Processor Cache Effects TODO:?
- coolshell: CPU Cache
- L1 cache lines
- Scott Meyers: CPU Caches and Why You Care PPT
- Cache Architecture and Design
- Nonblocking Algorithms and Scalable Multicore Programming
- Optimizing for instruction caches Part 1 Part 2 Part 3
- Latency Numbers Every Programmer Should Know
- arm64 cache 🇨🇳
-
📙 Designing Data Intensive Applications
-
📙 Designing Distributed Systems: Patterns and Paradigms for Scalable, Reliable Services ✏️ Book Notes
- Kafka: a Distributed Messaging System for Log Processing.pdf
- Wormhole: Reliable Pub-Sub to Support Geo-replicated Internet Services.pdf
- board the Databus! LinkedIn's Scalable Consistent Change Data Capture Platform
- The Log: What every software engineer should know about real-time data's unifying abstraction
- The Log-Structured Merge-Tree (LSM-Tree).pdf
- Immutability Changes Everything.pdf Video
- Tango: Distributed Data Structures over a Shared Log.pdf
-
The Unified Logging Infrastructure for Data Analytics at Twitter.pdf
-
Scaling Big Data Mining Infrastructure: The Twitter Experience.pdf
-
Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing.pdf
-
PSYNC: A partially synchronous language for fault-tolerant distributed algorithms.pdf
-
Google Research - Distributed Systems and Parallel Computing
- Designs, Lessons and Advice from Building Large Distributed Systems.pdf
- Building Software Systems At Google and Lessons Learned
- The Twelve-Factor App
- Notes on Distributed Systems for Young Bloods
- On Designing and Deploying Internet-Scale Services
- 4 Things to Keep in Mind When Building a Platform for the Enterprise
- Principles of Chaos Engineering
- Building Fast & Resilient Web Applications
- Designing For Resiliency Will Be So 2013
- Ten design principles for Azure applications
- Eventually Consistent
- Writing Code that Scales
- Automate and Abstract: Lessons from Facebook on Engineering for Scale
-
Martin Fowler: Patterns of Distributed Systems
Open/Close
- Clock-Bound Wait
- Consistent Core
- Emergent Leader
- Fixed Partitions
- Follower Reads
- Generation Clock
- Gossip Dissemination
- Heart Beat
- High-Water Mark
- Hybrid Clock
- Idempotent Receiver
- Key-Range Partitions
- Lamport Clock
- Leader Follwers
- Lease
- Low-Water Mark
- Paxos
- Quorum
- Replicated Log
- Request Batch
- Request Pipeline
- Request Waiting List
- Segemented Log
- Single Scoket Channel
- Singular Update Queue
- State Watch
- Two Phase Commit
- Version Vector
- Versioned Value
- Write-Ahead Log
-
MicroSoft Cloud Design Patterns
Open/Close
-
Design and implementation
- Ambassador
- Anti-corruption Layer
- Backends for Frontends
- Command and Query Responsibility Segregation (CQRS)
- Compute Resource Consolidation
- External Configuration Store
- Gateway Aggregation
- Gateway Offloading
- Gateway Routing
- Leader Election
- Pipes and Filters
- Sidecar
- Static Content Hosting
- Strangler Fig
-
Management and monitoring
-
Messaging
-
Data management
-
Performance and scalability
-
Availability
-
Resiliency
-
Security
-
-
Google: Design patterns for container-based distributed systems.pdf
- 4 Architecture Issues When Scaling Web Applications: Bottlenecks, Database, CPU, IO
- Scaling Stateful Objects
- Scale Up vs Scale Out: Hidden Costs
- Best Practices for Scaling Out
- Scalability Worst Practices
- Reddit: Lessons Learned From Mistakes Made Scaling To 1 Billion Pageviews A Month
- Autoscaling Pinterest
- Square: Autoscaling Based on Request Queuing
- PayPal: Autoscaling Applications
- Trivago: Your Definite Guide For Autoscaling Jenkins
- Scryer: Netflix’s Predictive Auto Scaling Engine
- Consistent Hashing
- Consistent Hashing: Algorithmic Tradeoffs
- Distributing Content to Open Connect
- Consistent Hashing in Cassandra
- Life Beyond Distributed Transactions
- How Sharding Works
- Why you don’t want to shard
- How to Scale Big Data Applications.pdf
- MySQL Sharding with ProxySQL
- Cache update routine (:cn: CN)
- Design Of A Modern Cache
- Netflix: Caching for a Global Netflix
- Facebook: An analysis of Facebook photo caching
- How trivago Reduced Memcached Memory Usage by 50%
- Caching Internal Service Calls at Yelp
- Understanding When to use RabbitMQ or Apache Kafka
- Trello: Why We Chose Kafka For The Trello Socket Architecture
- LinkedIn: Running Kafka At Scale
- Should You Put Several Event Types in the Same Kafka Topic
- Billions of Messages a Day - Yelp’s Real-time Data Pipeline
- Uber: Building Reliable Reprocessing and Dead Letter Queues with Kafka
- Uber: Introducing Chaperone: How Uber Engineering Audits Kafka End-to-End
- Uber: Uber’s Real-Time Push Platform
- Publishing with Apache Kafka at The New York Times
- Kafka Streams on Heroku
- Salesforce: How Apache Kafka Inspired Our Platform Events Architecture
- Exactly-once Semantics are Possible: Here’s How Kafka Does it
- Delivering billions of messages exactly once
- Benchmarking Streaming Computation Engines at Yahoo!
- Using Logs to Build a Solid Data Infrastructure - Martin Kleppmann
- Building DistributedLog: High-performance replicated log service
- LogDevice: a distributed data store for logs
- Understand Latency
- Common Bottlenecks
- Performance is a Feature
- Make Performance Part of Your Workflow 📙 Designing for Performance
- CloudFlare: How we built rate limiting capable of scaling to millions of domains
- Instagram: Search Architecture
- eBay: The Architecture of eBay Search.pdf
- eBay: Improving Search Engine Efficiency by over 25%
- LinkedIn: Introducing LinkedIn’s new search architecture
- LinkedIn: Search Federation Architecture at LinkedIn
- Slack: Search at Slack
- DoorDash: Search and Recommendations at DoorDash
- Twitter: Building a complete Tweet index
- Pinterest: Manas: High Performing Customized Search System
- Sherlock: Near Real Time Search Indexing at Flipkart
- Airbnb: Nebula: Storage Platform to Build Search Backends
- YouTube Architecture
- Scaling Pinterest
- Google Architecture
- Scaling Twitter
- The WhatsApp Architecture
- Flickr Architecture
- Amazon Architecture
- Stack Overflow Architecture
- Pinterest Architecture
- Tumblr Architecture
- Instagram Architecture
- TripAdvisor Architecture
- Scaling Mailbox
- Salesforce Architecture
- ESPN's Architecture At Scale - Operating At 100,000 Duh Nuh Nuhs Per Second
- Uber Architecture
- Dropbox Design
- Splunk Architecture
-
Nginx
- Introduction to Microservices
- Building Microservices: Using an API Gateway
- Building Microservices: Inter-Process Communication in a Microservices Architecture
- Service Discovery in a Microservices Architecture
- Event-Driven Data Management for Microservices
- Choosing a Microservices Deployment Strategy
- Refactoring a Monolith into Microservices
-
Auto0 Blog
- Kubernetes api gateway
- Uber: Designing Edge Gateway, Uber’s API Lifecycle Management Platform
- Uber: The Architecture of API gateway
- Uber: Scaling of Uber’s API gateway
-
DZone: Microservices vs. SOA - Is There Any Difference at All?
-
PaaS vs. IaaS for Microservices Architectures: Top 6 Differences
-
Microservices vs. Monolithic Architectures: Pros, Cons, and How Cloud Foundry (PaaS) Can Help
- Mircroservcie with Spring-Boot
- The Hidden Costs Of Microservices
- Microservice Antipatterns and Pitfalls
- Microservice Architecture: All The Best Practices You Need To Kno
- Best Practices for Building a Microservice Architecture
- Simplicity by Distributing Complexity
- Effective Microservices: 10 Best Practices
- ForgeRock: Identity Gateway
- ForgeRock: Token Validation Microservice
- Bringing Token state consistency to the Edge
- Microservice Architecture and its 10 Most Important Design Patterns
Database per Microservice
Event Sourcing
CQRS
Saga
BFF
API Gateway
Strangler
Circuit Breaker
Externalize Configuration
Consumer-Driven Contract Testing
- Modularity and Information Hiding.pdf
- Separation of Concern
- Service Oriented Architecture
- Introducing virtio-networking: Combining virtualization and networking for modern IT
- Introduction to virtio-networking and vhost-net
- Deep dive into Virtio-networking and vhost-net
- Hands on vhost-net: Do. Or do not. There is no try
- A journey to the vhost-users realm
- How vhost-user came into being: Virtio-networking and DPDK
- Hands on vhost-user: A warm welcome to DPDK
- Virtqueues and virtio ring: How the data travels
- Packed virtqueue: How to reduce overhead with virtio
- Achieving network wirespeed in an open standard manner: introducing vDPA
- How deep does the vDPA rabbit hole go?
- Introduction to vDPA kernel framework
- vDPA kernel framework part 1: vDPA bus for abstracting hardware
- vDPA kernel framework part 2: vDPA bus drivers for kernel subsystem interactions
- https://www.redhat.com/en/blog/hyperscale-virtiovdpa-introduction-one-control-plane-rule-them-all
- Hardening Virtio for emerging security usecases
- What is edge computing?
- Red Hat's edge computing approach
- The latest news and announcements on edge computing
- Evaluate your edge capabilities
This roadmap is highly inspired by course: https://time.geekbang.org/column/intro/48. Thanks Hao Chen.