推荐一个系统设计入门的blog系列

之前准备系统设计的时候,没有时间啃grokking那本书,就在Gailo 上看了这个博客系列,感觉对打开思路很有帮助

以两篇博客为例,做一个简单的中文总结,其实原文5分钟也能看完,时间性价比很高。

Design a cache system

cache是用来存储(一般在内存中)常用资源来提升响应速度的技术。比较常见的是LRU(least recently used), 之前面Wish的时候也被问到相关题目。LRU属于eviction policy中的一种,还有LFU, RR等等。
缓存读取会存在并发性的问题,用锁会影响性能,可以将数据shard到不同分区,降低用户访问到同一分区的概率,这里又涉及到如何balance traffic避免某些分区过于被集中访问。
原文链接
http://blog.gainlo.co/index.php/2016/05/17/design-a-cache-system/

Design a key-value store

Hash Table 是最基本的key-value pair, 缺点是数据量大了内存不够,对策是压缩数据(float64 -> float 32, 使用bit array等)或者存放在disk里(不常用的数据)。分布式的key-value storage需要考虑如何sharding,注意要balance traffic。另外要考虑应对机器宕机的问题,对数据做备份。最后是数据一致性的问题,两个方案:co-ordinator保留一份local copy, 如果更新失败就redo;或者使用commit log.
原文链接
http://blog.gainlo.co/index.php/2016/06/14/design-a-key-value-store-part-i/
http://blog.gainlo.co/index.php/2016/06/21/design-key-value-store-part-ii/

这些在 Linkedin 备战合集 不是有视频讲解更加全面吗?

BTW,我5年前其实在 Gainlo 教过

我个人觉得看文字稿更快,这个博客的深度适合时间不够基础比较弱的,然后系统面试看native speaker的文章也许还能学到一些专业的表达方式以助现场表演,时间性价比比较高。当然我没在真实面试中检验过学习效果,所以不能打包票说看这个抱佛脚足够了。

1 Like