一致性哈希
环形Hash解决节点的增删问题,虚拟节点解决平衡性问题。
http://blog.csdn.net/kongqz/article/details/6695417 http://www.jiacheo.org/blog/174 http://blog.csdn.net/sparkliang/article/details/5279393 (虚拟节点)
C10K问题
编写连接数巨大的高负载服务器程序时,经典的多线程模式和select模式都不再适用。 应当抛弃它们,采用epoll/kqueue/dev_poll来捕获I/O事件。最后简要介绍了AIO。
epoll:(1) LT水平触发 (2) ET边缘触发
epoll优于传统select及poll有以下几点:
(1) epoll不会随着fd数目的增长而效率降低,而且一个进程同时打开的fd数目的限制也不会成为瓶颈。
(2) epoll使用mmap来进行内核与用户空间的消息传递,以此避免内存拷贝的代价。
http://www.kegel.com/c10k.html http://blog.sina.com.cn/s/blog_68ffc7a40101822l.html http://wenku.baidu.com/view/33e41da6f524ccbff12184f9.html
蓄水池抽样
题目:有一个很大很大的输入流,大到没有存储器可以将其存储下来,而且只输入一次,如何从这个输入流中随机取得k个记录?(N未知)
for i= k+1 to N
M=random(1, i);
if( M < k)
SWAP the Mth value and ith value
end for
http://www.cnblogs.com/giraffe/p/3223369.html
无锁队列
CAS操作——Compare & Set,或是 Compare & Swap,现在几乎所有的CPU指令都支持CAS的原子操作。
1)无锁队列主要是通过CAS、FAA这些原子操作,和Retry-Loop实现。这些技术都可以用在其它的无锁数据结构上。
2)对于Retry-Loop,其实和锁什么什么两样。只是这种“锁”的粒度变小了,主要是“锁”HEAD和TAIL这两个关键资源。而不是整个数据结构。
http://coolshell.cn/articles/8239.html
数据库Sharding
Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题。不太严格的讲,对于海量数据的数据库,如果是因为表多而数据多,这时候适合使用垂直切分,即把关系紧密(比如同一模块)的表切分出来放在一个server上。如果表并不多,但每张表的数据非常多,这时候适合水平切分,即把表的数据按某种规则(比如按ID散列)切分到多个数据库(server)上。当然,现实中更多是这两种情况混杂在一起。
http://blog.csdn.net/bluishglc/article/details/6161475
(待续)