System Design 101
github.com
github.com
So it's sort of like...if you have the experience of having designed these types of systems or are familiar with some of these ideas from firsthand experience, the cute diagrams hold very little value. If, on the other hand, you're a new engineer, you're gobbling up these diagrams, but they don't really hold any meaning. You can't just binge on some doc that attempts to collate all system design ideas and think you've got it. Knowledge isn't acquired by "carrying books". Now, I'm not saying there might not be value in these diagrams as a refresher or tool for someone already familiar with these concepts, but it's limited to that and I suspect newer devs are being led to believe they can just memorize these diagrams and they grok these ideas. Not so.
I also cannot help but feel the author sees this area and audience as fertile ground for producing a ton of content and gaining readership - it's substack, it's blog posts...and the list goes on. I really try to avoid imputing bad motive or malintent, but I can't help but feel this is cynical in the sense that the author knows this information in this format targeting this audience does very little for them and, worse, leads them astray because of how at odds it is presented vs the way real knowledge is actually acquired.
I guess what I'm mainly saying is: beware, young devs. This ain't it.
It's also useful for scratching the itch of "huh, how does that work?" without having to allocate 100 hours of "breaking your teeth" learning the concept.
IMO any knowledge is good knowledge, even if it's a simplification of the topic (and the reader is aware it's a simplification).
> because you need to "feel" what these systems are like
I've done a lot of job hopping and seen a lot of technologies and companies. There is no way will you ever really experience even 10% of the information found on that page.
In my opinion, it seems like a great resource, and bookmarked it to go through it when I have some time.
Telling young devs to "gain experience" is pretty useless information. Learning theory is a large part of our job.
sure You cant really 100% translate it to your requirement but it give mind map to a lot of people to start
BBG content is good if you want to learn about use cases and how things work if you're already in position of taking responsibilities for the implementation of technologies like those, or you have a say in your team/project. If you're never gonna work with them, then it's just reading for nothing, you'll end up forgetting those things exist.
Love this part. I wonder how much of the complexity of microservices and various cloud services are actually adding value on a net basis vs. resume-driven development of some bored backend engineer.
Edit: I'd be curious how they hold up to a redis `flush all` or memcached `flush_all`. I wonder if they've ever game day'd such a scenario.
Populate the cache as part of the startup sequence.
Some cool info about SO
From 2019
> Layers of Cache at Stack Overflow
> We have our own “L1”/”L2” caches here at Stack Overflow, but I’ll refrain from referring to them that way to avoid confusion with the CPU caches mentioned above. What we have is several types of cache. Let’s first quickly cover local and memory caches here for terminology before a deep dive into the common bits used by them:
> “Global Cache”: In-memory cache (global, per web server, and backed by Redis on miss)
> Usually things like a user’s top bar counts, shared across the network
> This hits local memory (shared keyspace), and then Redis (shared keyspace, using Redis database 0)
> “Site Cache”: In-memory cache (per site, per web server, and backed by Redis on miss)
> Usually things like question lists or user lists that are per-site
> This hits local memory (per-site keyspace, using prefixing), and then Redis (per-site keyspace, using Redis databases)
> “Local Cache”: In-memory cache (per site, per web server, backed by nothing)
> Usually things that are cheap to fetch, but huge to stream and the Redis hop isn’t worth it
> This hits local memory only (per-site keyspace, using prefixing)
and
> For the curious, some quick stats from last Tuesday (2019-07-30) This is across all instances on the primary boxes (because we split them up for organization, not performance…one instance could handle everything we do quite easily):
> Our Redis physical servers have 256GB of memory, but less than 96GB used.
- 1,586,553,473 commands processed per day (3,726,580,897 commands and 86,982 per second peak across all instances – due to replicas)
- Average of 2.01% CPU utilization (3.04% peak) for the entire server (< 1% even for the most active instance)
- 124,415,398 active keys (422,818,481 including replicas)
- Those numbers are across 308,065,226 HTTP hits (64,717,337 of which were question pages)
https://nickcraver.com/blog/2019/08/06/stack-overflow-how-we...
It is hard to make a high-growth startup selling co-located servers whose docs page is a link to Linux documentation and RFCs.
It's all so theoretical and I feel like everything I do/say is bluffing my way through them. I prefer straight algo rounds even though those are a grind.
https://github.com/donnemartin/system-design-primer (see https://hn.algolia.com/?q=system-design-primer for discussions)
About GraphQL, I read that GraphQL is versionless, is it really versionless? If so, how? The link below says you will still need to version but we have some Graphql fans at work and they insist that it does not need to be versioned.
[0] https://medium.com/swlh/no-graphql-doesnt-magically-fix-api-...
However, if you change the data schema around, like `user` is now `person` or something, or a mutation call changes the required params, there's no magic, you either update the clients, or add versioning.
I'd argue all these "publish your DB schema as a GraphQL endpoint" frameworks that seem to proliferate have done a lot of damage to GraphQL's reputation. Strongly coupling data to presentation seems like such an obvious anti pattern, yet tools doing just that seem to be very popular for some reason.
Beyond that it's arguably "versionless" because it does nothing to address the problem. Which is essentially fine, and is what most protocols do: you make a completely new API or change the endpoint (e.g. http path) to gradually make breaking changes (expose both, migrate callers whenever), because something like that is basically always an option.
I appreciate the gifs !
This is completely synonymous with “learning” in some cultures.
To be fair I think this can be a useful angle for learning but its not sufficient. Treat their newsletter like flashcards.
This is easier said than done; there are plenty of technologies that have horrendous intro documentation that dives into all sorts of overly complicated and confusing shit. It’s really hard to stay on topic and present only what’s relevant for someone who’s never heard of the technology before.
Not everything needs to be a comprehensive deep dive.
I can see a recent cs grad who’s never built anything benefit immensely from this.
The bigger thing here is that it teaches you the vocabulary for you to then go on and research and form your own opinions etc.
All you need is a sound starting point and this is definitely it.
Kudos to you man.
It is open source and free, insanely powerful, easy to use and has impressive backwards compatibility.