software-engineer
software-engineer copied to clipboard
CS resources: C/C++, Data structure, Algorithm, Design Pattern, Linux, Architecture, Distributed Systems, MicroService...
Table of Contents
-
Computer Science
- Operating System
- Computer Architecture
- Compilation
- Network
- Data Structure
- Database
-
Programming Language
- C/C++
-
Software Engineering
- Coding Cultivation
- Code Review
- Safety Precaution
- Testing
- Publishing
-
System Design
-
Linux
- Kernel
- Memory Management
- Linux Network
- AIO
- Lock-free
- Memory Order
- CPU Cache
-
Distributed Architecture
- Distributed Messages System
- Logs & Data
- Distributed monitoring and tracking
- Data Analysis
- Distributed Architecture Engineering Design
- Design Pattern
- Failure testing of distributed systems
- Scalability
- Consistent Hashing
- Cache
- Message Queue
- Log
- Performance
- Search
- Architecture Practices by Companies
-
Microservice
- API Gatway
- Microservice VS SOA, IaaS, Paas, Monolithic
- Practice
- Authentication & Authorization
- Design Pattern
-
Cloud Native
-
Cloud Computing
- IO Virtualization
-
Thanks
Computer Science
Operating System
-
[x] :orange_book: Computer Systems A Programmer’s Perspective :pencil2: Book Notes
-
[ ] :orange_book: Modern Operating Systems :pencil2: Book Notes
-
[ ] :orange_book: Operating Systems: Three Easy Pieces
-
[ ] :orange_book: Operating System Concepts
-
[ ] :orange_book: Operating Systems Design and Implementation
-
[ ] :orange_book: Advanced Programming in the UNIX Environment
Computer Architecture
- [ ] :orange_book: Computer Organization and Design: The Hardware/Sofeware Interface :pencil2: Book Notes
- [ ] :orange_book: Computer Architecture: A Quantitative Approach
- [ ] :orange_book: Structure and Interpretation of Computer Programs
Compilation
- [ ] :orange_book: Compilers: Principles, Techniques, and Tools
- [x] :orange_book: Programmer Self-Cultivation: Linking, Loading and Libraries (:cn: CN) :pencil2: Book Notes
Network
-
[x] :orange_book: TCP/IP ILLustrated Volume 1: The Protocols :pencil2: Book Notes
-
[ ] :orange_book: UNIX Network Programming, Volume 1: The Sockets Networking API :pencil2: Book Notes: UNP :pencil2: Book Notes: Linux Programming
-
[ ] :orange_book: UNIX Network Programming, Volume 2: Interprocess Communications
-
[ ] :orange_book: Linux System Programming
-
[ ] :orange_book: Computer Networking: A Top-Down Approach
-
[ ] :orange_book: Computer Networks, 5th Edition
-
[ ] :orange_book: Practical Packet Analysis: Using Wireshark to Solve Real-World Network Problems, 2nd Edition
-
[ ] Let’s Code a TCP/IP Stack, 4: Tcp Data Flow & Socket API
-
[ ] C10k Problem
-
[ ] C10m Problem
-
[ ] The Secret To 10 Million Concurrent Connections - The Kernel Is The Problem, Not The Solution
-
[ ] Nginx HTTP/2
-
[ ] Coping with the TCP TIME-WAIT state on busy Linux servers
-
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
- [ ] :orange_book: Database System Concepts (Fifth Edition)
- [ ] :orange_book: High Performance MySQL, 3rd
- [ ] :orange_book: Inside MySAQL: InnoDB Storage Engine
- [ ] :orange_book: 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 Structure
- [ ] :orange_book: Data Structures and Algorithm Analysis in C: Second Edition
Algorithm
- [ ] :orange_book: Algorithms,Fouth Edition
- [ ] :orange_book: Grokking Algorithms: An illustrated guide for programmers and other curious people
- [ ] :orange_book: Programming Pearls (2/e)
- [ ] :orange_book: Data Structures and Algorithm Analysis in C: Second Edition
Programming Language
The Essence of Programming
- Niklaus Emil Wirth: Algorithms + Data Structures = Programs .pdf
- Robert Kowalski: Algorithm = Logic + Control .pdf
C/C++
-
coolshell :cn:
Open-Close
-
[ ] :orange_book: The C Programming Language
-
[ ] :orange_book: C Programming: A Modern Approach
-
[ ] :orange_book: C Traps and Pitfalls
-
[x] :orange_book: C++ Primer, 5th Edition :pencil2: Book Notes
-
[x] :orange_book: Effective C++ :pencil2: Book Notes
-
[ ] :orange_book: More Effective C++ :pencil2: Book Notes
-
[x] :orange_book: Modern Effective C++ :pencil2: Book Notes
-
[x] :orange_book: Inside C++ Object Model :pencil2: Book Notes
-
[x] :orange_book: C++ Templates The Complete Guide :pencil2: Book Notes
-
[x] :orange_book: Modern C++ Design :pencil2: Book Notes
-
[ ] C++ FAQ
-
[ ] C Language Function Call Stack :link: Part 1 :link: Part 2 :link: Part 3
-
[x] trivial_abi
-
[x] Type Erasure
-
[x] Lambdas: From C++11 to C++20 :link: Part 1 :link: Part 2
-
[ ] Eli Bendersky: How debuggers work :link: Part 1 :link: Part 2 :link: Part 3
-
[ ] What Every C Programmer Should Know About Undefined Behavior :link: Part 1 :link: Part 2 :link: Part 3
-
OOP
- [ ] Itanium C++ ABI (Revision: 1.75)
- [x] VTable Beginner 1: Interview Series C++ object layout :us: EN :cn: CN
- [x] VTable Beginner 2: Understand C++ vtable from assembly code :link: Part 1
- [x] VTable Expert 1: What does C++ Object Layout Look Like?
- [x] VTable Expert 2: C++ Virtual Table Tables(VTT)
- [x] coolshell: C++ virtual function table analysis (:cn: CN)
- [x] Inheritance Without Pointers
- [x] Runtime Polymorphism Without Objects or Virtual Functions
- [x] The cost of dynamic (virtual calls) vs. static (CRTP) dispatch in C++
- [x] The Sad True about C++ Copy Elision
-
Const & Mutable
-
STL
-
C++ Memory Model
- [x] Memory layout of C ++ objects (:cn: CN)
- [x] C++ objects Memory layout (:cn: CN)
- [x] std::memory_order
- [x] C++ Memory Model
- [x] Sequential Consistency
- [x] The Atomic Flag
- [x] The Atomic Boolean
- [x] Atomics
- [x] Synchronization and Ordering Constraints
- [x] Sequential Consistency applied
- [x] Acquire-Release Semantic
- [x] Transitivity of the Acquire-Release Semantic
- [x] memory_order_consume
- [x] Acquire-Release Semantic - The typical Misunderstanding
- [x] Fences are Memory Barriers
- [x] Acquire-Release Fences
- [x] Relaxed Semantic
- [x] shared_ptr Thread Safety
-
CRTP
- [x] Curiously Recurring Template Pattern (CRTP)
- [x] The CRTP, episode One: Definition
- [x] The CRTP, episode Two: What the CRTP can bring to your code
- [x] The CRTP, episode Three: An implementation helper for the CRTP
- [x] Mixin Classes: The Yang of the CRTP
- [x] How to Turn a Hierarchy of Virtual Methods into a CRTP
- [x] Replacing CRTP Static Polymorphism With Concepts
- [x] Removing Duplicates in C++ CRTP Base Classes
- [x] How to Reduce the Code Bloat of a Variadic CRTP
- [x] Variadic CRTP Packs: From Opt-in Skills to Opt-in Skillsets
- [x] Variadic CRTP: An Opt-in for Class Features, at Compile Time
-
Template
- [x] One Trick with Private Names and Function Templates
- [x] Modern C++ Features – Class Template Argument Deduction
- [x] Build Throughput Series: Template Metaprogramming Fundamentals
- [x] Build Throughput Series: More Efficient Template Metaprogramming
- [x] How to Pass a Variadic Pack as a First Argument of a Function
- [x] 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
- [x] Table: C++17 Features.pdf
- [x] How std::any Works
- [ ] Everything You Need to Know About std::variant from C++17
- [x] Runtime Polymorphism with std::variant and std::visit
- [x] Visiting a std::variant with the Overload Pattern
- [x] Simplify code with ‘if constexpr’ in C++17
- [x] Pass string_view by value
-
C++ 20
-
[x] C++20: Aggregate, POD, trivial type, standard layout class, what is what
-
[x] constexpr vector and string in C++20 and One Big Limitation
-
[ ] Raymond Chen: C++ coroutines
Open/Close
-
Awaitable Objects
-
Awaitable Signals
- Creating a co_await awaitable signal that can be awaited multiple times
- :link: part 1 :link: part 2 :link: part 3 :link: part 4 :link: part 5
- :link: part 6
- Creating other types of synchronization objects that can be used with co_await
- Creating a task completion source for a C++ coroutine
- Creating a co_await awaitable signal that can be awaited multiple times
-
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
-
-
[ ] Asymmetric Transfer: C++ coroutines
-
[ ] Ordering asynchronous updates with coroutines
Software Engineering
- [ ] 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
Coding Cultivation
-
[ ] :orange_book: Refactoring: Improving the Design of Existing Code :pencil2: Book Notes
-
[ ] :orange_book: Working Effectively with Legacy Code
-
[ ] :orange_book: Clean Code: A Handbook of Agile Software Craftsmanship :pencil2: Book Notes
-
[ ] :orange_book: The Clean Coder:A Code of Conduct for Professional Programmers
Code Review
Safety Precaution
- [ ] https://www.owasp.org/index.php/Main_Page
- [ ] Secure Coding Practice Guidelines
- [ ] SEI SERT Coding Standards
- [ ] Hardening Your HTTP Security Headers
Testing
- [ ] :orange_book: Perfect Software: And Other Illusions about Testing
- [ ] :orange_book: How Google Tests Software
Publishing
- [x] Checklist
System Design
-
[ ] :orange_book: Domain-Driven Design: Tackling Complexity in the Heart of Software
-
[ ] :orange_book: The Art of UNIX Programming
-
[ ] :orange_book: Clean Architecture
-
[x] Grokking the Object Oriented Design :pencil2: Book Notes
-
-
[ ] HTTP API Desgin
-
[ ] API Guildlines
-
[ ] The Onion Architecture :link: Part 1 :link: Part 2 :link: Part 3 :link: Part 4
Linux
- [ ] Red Hat Enterprise Linux
- [ ] x86-TSO: A Rigorous and Usable Programmer’s Model for x86 Multiprocessors
- [x] Spurious wakeup :link: C++ Condition Variable
- [ ] LWN.netNews Kernel Index
Kernel
- [x] :pencil2: Linux Kernel 4.19
- [x] :pencil2: Understanding Linux Kernel
- [x] :pencil2: Linux Kernel Development
- [x] What is RCU? – "Read, Copy, Update"
- [x] Linux Insides
- [x] LWN’s kernel page
- [x] Learn Linux Kernel from Android Perspective
- [x] Linux Kernel Doc
- [x] Kernel Planet: Kernel Developers Doc
- [x] Linux Performance and Tuning Guidelines.pdf
- [x] Linux Performance
- [x] Optimizing web servers for high throughput and low latency
Memory Management
- [ ] 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
- [x] ptmalloc
- [x] tcmalloc :link: Ref :link: Ref
- [x] jemalloc.pdf
- [x] C dynamic memory allocation
- [x] Research on ptmalloc, tcmalloc and jemalloc memory allocation strategies (:cn: CN)
- [x] Memory optimization summary: ptmalloc, tcmalloc, and jemalloc
- [x] Scalable memory allocation using jemalloc
- [ ] Linux Kernel Vs. Memory Fragmentation Part I
Linux Network
-
[ ] :orange_book: Linux High Performance Server Programming (:cn: CN) :pencil2: Linux Programmnig Noetes :pencil2: Linux System Notes
-
[ ] :orange_book: 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
AIO
- [x] 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
- [x] 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
- [x] Epoll is fundamentally broken :link: 1 :link: 2
- [ ] The implementation of epoll :link: 1 :link: 2 :link: 3 :link: 4
Lock-free
- [x] 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
Memory Order
- [x] Weak vs. Strong Memory Models
- [x] This Is Why They Call It a Weakly-Ordered CPU
- [x] Memory Barriers Are Like Source Control Operations
- [x] Acquire and Release Semantics
- [x] Memory Ordering at Compile Time
- [x] The Happens-Before Relation
- [x] The Synchronizes-With Relation
- [x] Acquire and Release Fences Don't Work the Way You'd Expect
- [x] Acquire and Release Fences
- [x] Roll Your Own Lightweight Mutex
- [x] Can Reordering of Release/Acquire Operations Introduce Deadlock?
- [x] You Can Do Any Kind of Atomic Read-Modify-Write Operation
- [x] The Purpose of memory_order_consume in C++11
- [x] Atomic vs. Non-Atomic Operations
- [x] Memory Reordering Caught in the Act
CPU Cache
- [x] Gallery of Processor Cache Effects TODO:?
- [x] coolshell: CPU Cache
- [x] 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 :cn:
Distributed Architecture
-
[ ] :orange_book: Distributed Systems, 3rd Edition
-
[ ] :orange_book: Distributed Systems for fun and profit
-
[ ] :orange_book: Designing Data Intensive Applications
-
[ ] :orange_book: Distributed Systems: Principles and Paradigms.pdf
-
[ ] :orange_book: Designing Distributed Systems: Patterns and Paradigms for Scalable, Reliable Services :pencil2: Book Notes
-
[ ] :orange_book: Principles of Distributed Systems.pdf
-
[ ] :newspaper: Transaction Across DataCenter :tv: YouTuBe
-
[ ] Byzantine fault PDF
-
[ ] CAP Theorem
-
[ ] DLS.pdf
Distributed Messages System
- [ ] 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
Logs & Data
- [ ] 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
Distributed monitoring and tracking
Data Analysis
-
[ ] 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
Distributed Architecture Engineering Design
- [ ] 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
Design Pattern
-
[ ] 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
- [x] Ambassador
- [x] Anti-corruption Layer
- [x] External Configuration Store
- [x] Gateway Aggregation
- [x] Gateway Offloading
- [x] Gateway Routing
- [x] Health Endpoint Monitoring
- [x] Sidecar
- [ ] Strangler Fig
-
Messaging
- [x] Anti-corruption Layer
- [ ] Claim Check
- [x] Choreography
- [ ] Competing Consumers
- [x] Pipes and Filters
- [ ] Priority Queue
- [ ] Publisher/Subscriber
- [x] Queue-Based Load Leveling
- [x] Scheduler Agent Supervisor
- [x] Sequential Convoy
- [ ] Asynchronous Request-Reply
-
Data management
- [ ] Cache-Aside
- [x] Command and Query Responsibility Segregation (CQRS)
- [ ] Event Sourcing
- [ ] Index Table
- [ ] Materialized View
- [ ] Sharding
- [x] Static Content Hosting
- [ ] Valet Key
- [ ] Saga
-
Performance and scalability
- [x] Cache-Aside
- [ ] Choreography
- [x] Command and Query Responsibility Segregation (CQRS)
- [x] Event Sourcing
- [x] Deployment Stamps
- [x] Geodes
- [x] Index Table
- [x] Materialized View
- [x] Priority Queue
- [x] Queue-Based Load Leveling
- [x] Sharding
- [x] Static Content Hosting
- [x] Throttling
-
Availability
- [ ] Deployment Stamps
- [ ] Geodes
- [ ] Health Endpoint Monitoring
- [ ] Queue-Based Load Leveling
- [ ] Throttling
-
Resiliency
- [ ] Bulkhead
- [ ] Circuit Breaker
- [ ] Compensating Transaction
- [x] Health Endpoint Monitoring
- [x] Leader Election
- [x] Queue-Based Load Leveling
- [ ] Retry
- [ ] Scheduler Agent Supervisor
-
Security
- [ ] Federated Identity
- [ ] Gatekeeper
- [x] Valet Key
-
-
[ ] Google: Design patterns for container-based distributed systems.pdf
-
[ ] SOA Patterns
Failure testing of distributed systems
Scalability
- [ ] 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
- [ ] Consistent Hashing: Algorithmic Tradeoffs
- [ ] Distributing Content to Open Connect
- [ ] Consistent Hashing in Cassandra
Distributed Database
- [ ] 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
- [ ] 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
Message Queue
- [ ] 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!
Log
- [ ] Using Logs to Build a Solid Data Infrastructure - Martin Kleppmann
- [ ] Building DistributedLog: High-performance replicated log service
- [ ] LogDevice: a distributed data store for logs
Performance
- [ ] Understand Latency
- [ ] Common Bottlenecks
- [ ] Performance is a Feature
- [ ] Make Performance Part of Your Workflow :orange_book: Designing for Performance
- [ ] CloudFlare: How we built rate limiting capable of scaling to millions of domains
Search
- [ ] 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
Architecture Practices by Companies
- [ ] 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
Microservice
-
[ ] Uber: Introducing Domain-Oriented Microservice Architecture
-
[ ] Uber: Designing Edge Gateway, Uber’s API Lifecycle Management Platform
-
[ ] :orange_book: IBM: Microservices Best Practices for Java.pdf
-
[ ] :orange_book: Building MicroService
-
Nginx
- [x] Introduction to Microservices
- [x] 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
API Gatway
- [ ] 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
Microservice VS SOA, IaaS, Paas, Monolithic
-
[ ] :orange_book: Microservices vs. Service-Oriented Architecture
-
[ ] 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
Practice
- 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
Authentication & Authorization
- [ ] ForgeRock: Identity Gateway
- [ ] ForgeRock: Token Validation Microservice
- [ ] Bringing Token state consistency to the Edge
Design Pattern
- [ ] Microservice Architecture and its 10 Most Important Design Patterns
Database per MicroserviceEvent SourcingCQRSSagaBFFAPI GatewayStranglerCircuit BreakerExternalize ConfigurationConsumer-Driven Contract Testing
- [ ] Modularity and Information Hiding.pdf
- [ ] Separation of Concern
- [ ] Service Oriented Architecture
Cloud Native
Cloud Computing
IO Virtualization
- [x] Introducing virtio-networking: Combining virtualization and networking for modern IT
- [x] 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
- [x] Achieving network wirespeed in an open standard manner: introducing vDPA
- [ ] How deep does the vDPA rabbit hole go?
- [x] 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
Edge Computing
- [ ] What is edge computing?
- [ ] Red Hat's edge computing approach
- [ ] The latest news and announcements on edge computing
- [ ] Evaluate your edge capabilities
Thanks
This roadmap is highly inspired by course: https://time.geekbang.org/column/intro/48. Thanks Hao Chen.
