Design patterns
- Circuit Breaker - https://martinfowler.com/bliki/CircuitBreaker.html
- Debounce - https://programmingwithmosh.com/javascript/javascript-throttle-and-debounce-patterns/
- Retry - https://java-design-patterns.com/patterns/retry/
- Throtle - https://java-design-patterns.com/patterns/throttling/
Protocols
Http
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview
- […] the browser is always the entity initiating the request. It is never the server (though some mechanisms have been added over the years to simulate server-initiated messages).
- in order to mitigate this flaw (each http request requiring a new TCP connection), HTTP/1.1 introduced pipelining (which proved difficult to implement) and persistent connections: the underlying TCP connection can be partially controlled using the Connection header. HTTP/2 went a step further by multiplexing messages over a single connection, helping keep the connection warm and more efficient.
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST (How POST works)
- https://fasterthanli.me/articles/the-http-crash-course-nobody-asked-for
once I was asked in a interview how can you transfer a file over http, here
is the explanation of chuncked transfer-enconding from that link:
You don’t yet know how large it’s going to be. So you can’t send a Content-Length header. What do?
You send chunks! Like so: POST / HTTP/1.1 Host: example.org Connection: close Transfer-Encoding: chunked 4 Help C I am chunked 0 ``` Every chunk is prefixed by L\r\n, where L is the length of the next chunk, formatted as hexadecimal ("I am chunked" is 12 bytes long, hence, 0xC).
DNS
SOCKS protocol
grpc
REST best practices
Tools
P2P
Courses
- https://martin.kleppmann.com/2020/11/18/distributed-systems-and-elliptic-curves.html (author of Designing-Data-Intensive-Applications)
- https://www.youtube.com/playlist?list=PLeKd45zvjcDFUEv_ohr_HdUFe97RItdiB MIT course
Books
Reading list
Blockchain
Designs
- https://www.youtube.com/watch?v=PE4gwstWhmc How We’ve Scaled Dropbox
Replication:
- State Transfer: for example the master sends to all workers its RAM state
- Replicated State Machine: Send external inputs (e.g. set x = 1), in other words: operations