三高服务器的思考

高性能,高并发,高可用服务器的思考

1.高性能

良好的数据结构和算法,以及对操作系统的了解来提高性能

常见的高性能实现案列:

* 文件系统中,如淘宝的tfs,合并多个小文件为一个大文件,减少inode数量,inode数据就可以全部缓存在内存,
  把两次io减少为一次
* 数据库中,如boltdb,使用mmap技术,让文件读写从用户空间直接到磁盘,避免了用户到内核的一次内存拷贝,
  还有leveldb,利用日志顺序写及后台合并来提高写入速度

2.高并发

高并发的高效关键在于网络模型,目前主流模型linux上epoll,unix kqueue, 这些模型已经很多现成的库可以使用,如libev,libuv,libevent,redis自己的ae等.

epoll有两种模式,Edge Triggered(简称ET,边缘触发) 和 Level Triggered(简称LT,水平触发) 区别如下:

水平触发: 
内核中的socket接收缓冲区不为空,有数据可读,读事件一直触发 
内核中的socket发送缓冲区不满,可以继续写入数据,写事件一直触发 

边缘触发: 
内核中socket接收缓冲区由空变为不为空,数据由不可读变为可读,事件触发(仅一次)。 
内核中socket发送缓冲区由满变为不满,数据由不可写变为可写,事件触发(仅一次)。

3.高可用

* 对软硬件的冗余,以消除单点故障。任何系统都会有一个或多个冗余系统做standby
* 对故障的检测和恢复。检测故障以及用备份的结点接管故障点。这也就是failover
* 需要很可靠的交汇点(CrossOver)。这是一些不容易冗余的结点,比如域名解析,负载均衡器等。