如何设计Twitter是个经典的面试问题,我们要想一想Twitter的本质是什么,它其实是feed流。那什么是feed流呢?有很多list,这些List的集合就是你最终展现的结果,把一些list集合到一块去就是feed流。这个概念跟Kafka其实是非常相似的,Kafka是按照时间排序把很多log流聚合到一块。除了Twitter,还有很多现在火爆的应用主要功能都涉及到了feed流,比如Facebook、微博、微信朋友圈、Google Reader、今日头条。 比如说在Twitter中,我们有三个feed list,这里需要强调,因为在不同公司不同项目叫法不太一致,我们讲的feed是指单独的list,而list的集合叫timeline,所以timeline是feed的聚合,而每个单独的feed就是一个list。比如说上图中第一列是关于Nelson自己的list,第二列是关于Tim自己的list,第三列是QCon的list,每个人自己的feed可以放一起。
如何设计Twitter?此问题同样也可以推广到如何设计Facebook、微博、微信朋友圈等 太阁冯沁原提出的SNAKE原则和九章算法东邪老师提出的4S原则都不能完全体现系统设计的真髓,SNAKE原则缺少了Storage(存储)部分的强调,4S原则缺少对系统参数的计算。在此我想总结两位前辈的经验,提炼出自己对于系统设计原则的理解:4SE原则。
Smooth Weighted Round-Robin (SWRR) 是 nginx 默认的加权负载均衡算法,它的重要特点是平滑,避免低权重的节点长时间处于空闲状态,因此被称为平滑加权轮询。
https://github.com/dastergon/gopheracademy-advent2019-tcp-no-delay https://blog.gopheracademy.com/advent-2019/control-packetflow-tcp-nodelay/