System Design Tips

2021-11-17  本文已影响0人  NazgulSun

系统Design 的一个 github 链接,备忘
https://github.com/donnemartin/system-design-primer/blob/master/README-zh-Hans.md

1、设计一个 url 转短链接的问题:

1,如果平时没有思考过这个问题,最直观的就是考虑 hash(url) = code, 然后 对 code 进行 base16/32/62/64 的编码,
然后取前8位;
比如对于任意多个 url,我们取md5, 有128bit, 16byte字符,然后用某种base编码算法,再取前8位;
那么我们一定会遇到 hash 冲突的问题, 这个时候我们的出发点就是怎么去解决hash冲突;

这是非常符合我们思维的正向思维方式,从工作的流程触发,我们生成 短链接,存储对应关系,出现冲突就解决冲突;

========== 如何解决冲突===========

把已有的存入数据库,然后 插入的时候,看有不有冲突,有冲突就再次生成;
瓶颈问题,如果数据量很大,检测冲突的问题会有严重性能消耗, 这个时候,需要考虑使用 bloomfilter等工具,来快速判断存在性问题;
另外一个大的问题是并发, 同时10万并发,存在性判断的准确性会有更多bad case;
总体来看,上述问题都是一个无法100%精确,并且随着系统数据量,并发扩张,问题会越来越多的设计;

=============== 另外一种思维:
对于经验丰富的工程师,可能会把这个问题转化成,分布式唯一 ID 生成的问题;
如果我们有一个分布式唯一ID 生成器,那么问题就很好解决,对于每一个url,给他生成一个 ID即可;

几种常见的唯一ID 生成器;

使用生成器的模式:

总之,把问题转化为我们熟悉的领域,很多问题就迎刃而解了,这就是优秀的设计思路带来的好处;

通用的 feed 系统设计考虑

Feed 系统的设计:

离不开的 pull/push 模式讲解:
https://segmentfault.com/a/1190000019640171?utm_source=sf-similar-article
Tips

队列的选择:

怎么处理瞬时流量爆炸的问题? 比如 明星离婚,读写的流量都会瞬时放大很多比如(100倍);
能够做到 event-sense的动态扩容吗?
https://www.jianshu.com/p/0d5a98ba8a20?utm_source=oschina-app
我们看看微博的缓存架构, 在DB上做的事情,在缓存上再做一次, 缓存的缓存,L1, 缓存也要做HA;
烧钱

需要补一下高并发高性能系统设计;
比如: 单个组件极限的 读写性能;
使用的存储,查询,写入的极限;需要有量化的指标;

爬虫的设计

分布式的爬虫很难设计,high level 的component 也比较多;

分布式定时器redis

https://www.jianshu.com/p/eb4e3363275e
https://mp.weixin.qq.com/s/DGgbzPTYw8pDtyRcBGtr3A

限流系统的设计

上一篇 下一篇

猜你喜欢

热点阅读