大并发 01 碎片
2014-01-13 20:29
274 查看
来自:http://www.cppcourse.com/
01 缓存问题 内存不够了 将不活跃的数据换出内存
·LRU(least recently used) 最近最少使用的换出
·LFU(least frequently used) 最不频繁是使用的
02 nosql 分布式 key-value 缓存机制
·redis
03 对数据库的负载均衡
·读写分离使用 replication机制 master写 slave读 数据库一般读大于写
04 服务器性能的4大杀手
·数据拷贝 内存的拷贝
·环境切换 单核服务器 采用状态机编程效率最高 即使多线程的服务器也应该减少环境切换
·内存分配 应该理性创建线程 可以使用内存池减少 内存的分配
·锁竞争
05 TIME_WAIT
·当服务器端主动断开连接时会进入TIME_OUT状态 保持资源不放 所以应该让客户端主动断开连接 让客户端处于TIME_WAIT状态
TCP断开的过程中会有四个状态变化过程
在连接撤销过程中,有如下四个过程:
1.HOST1上的应用程序关闭己方的连接导致TCP发送一个FIN消息给HOST2。
2.HOST2发送一个确认消息给HOST1,并且HOST2把FIN作为EOF递交给HOST2上的应用程序。
3.一段时间过后,HOST2上的应用程序关闭它那边的连接,引发一个FIN消息给HOST1。
4.HOST1给HOST2发送一个确认消息,然后HOST2关闭连接并释放资源,然而,HOST1却没有关闭连接,而是进入了TIME_WAIT状态,并为两个最大段生存时间(2MSL)保留在此状态
为什么需要time_wait?
1.因为在第四步的时候,HOST1发送的ACK可能丢失并导致HOST2重新发送FIN消息,TIME_WAIT维护连接状态.如果执行主动关闭的一方HOST1 不进入到TIME_WAIT状态就关闭连接那会发生什么呢?当重传的FIN消息到达时,因为TCP已经不再有连接的信息了,所以就用RST(重新启动)消息应答,导致HOST2进入错误的状态而不是有序终止状态,如果发送最后ACK消息的一方处于TIME_WAIT状态并仍然记录着连接的信息,它就可以正确的响应对等方HOST2的FIN消息了.
2.TIME_WAIT为连接中”离群的段”提供从网络中消失的时间.考虑一下,如果延迟或者重传段在连接关闭后到达时会发生什么呢?通常情况下,因为TCP仅仅丢弃该数据并响应RST消息,所以这不会造成任何问题。当RST消息到达发出延时段的主机时,因为该主机也没有记录连接的任何信息,所以它也丢弃该段。然而,如果两个相同主机之间又建立了一个具有相同端口号的新连接,那么离群的段就可能被看成是新连接的,如果离群的段中数据的任何序列号恰恰在新连接的当前接收窗口中,数据就会被重新接收,其结果就是破坏新连接。
01 缓存问题 内存不够了 将不活跃的数据换出内存
·LRU(least recently used) 最近最少使用的换出
·LFU(least frequently used) 最不频繁是使用的
02 nosql 分布式 key-value 缓存机制
·redis
03 对数据库的负载均衡
·读写分离使用 replication机制 master写 slave读 数据库一般读大于写
04 服务器性能的4大杀手
·数据拷贝 内存的拷贝
·环境切换 单核服务器 采用状态机编程效率最高 即使多线程的服务器也应该减少环境切换
·内存分配 应该理性创建线程 可以使用内存池减少 内存的分配
·锁竞争
05 TIME_WAIT
·当服务器端主动断开连接时会进入TIME_OUT状态 保持资源不放 所以应该让客户端主动断开连接 让客户端处于TIME_WAIT状态
TCP断开的过程中会有四个状态变化过程
在连接撤销过程中,有如下四个过程:
1.HOST1上的应用程序关闭己方的连接导致TCP发送一个FIN消息给HOST2。
2.HOST2发送一个确认消息给HOST1,并且HOST2把FIN作为EOF递交给HOST2上的应用程序。
3.一段时间过后,HOST2上的应用程序关闭它那边的连接,引发一个FIN消息给HOST1。
4.HOST1给HOST2发送一个确认消息,然后HOST2关闭连接并释放资源,然而,HOST1却没有关闭连接,而是进入了TIME_WAIT状态,并为两个最大段生存时间(2MSL)保留在此状态
为什么需要time_wait?
1.因为在第四步的时候,HOST1发送的ACK可能丢失并导致HOST2重新发送FIN消息,TIME_WAIT维护连接状态.如果执行主动关闭的一方HOST1 不进入到TIME_WAIT状态就关闭连接那会发生什么呢?当重传的FIN消息到达时,因为TCP已经不再有连接的信息了,所以就用RST(重新启动)消息应答,导致HOST2进入错误的状态而不是有序终止状态,如果发送最后ACK消息的一方处于TIME_WAIT状态并仍然记录着连接的信息,它就可以正确的响应对等方HOST2的FIN消息了.
2.TIME_WAIT为连接中”离群的段”提供从网络中消失的时间.考虑一下,如果延迟或者重传段在连接关闭后到达时会发生什么呢?通常情况下,因为TCP仅仅丢弃该数据并响应RST消息,所以这不会造成任何问题。当RST消息到达发出延时段的主机时,因为该主机也没有记录连接的任何信息,所以它也丢弃该段。然而,如果两个相同主机之间又建立了一个具有相同端口号的新连接,那么离群的段就可能被看成是新连接的,如果离群的段中数据的任何序列号恰恰在新连接的当前接收窗口中,数据就会被重新接收,其结果就是破坏新连接。
相关文章推荐
- SCN 查找
- C++编程参考
- MVC 弹出框、确认框
- 为BBB制作专属自己的cape(四)
- LINUX下动态链接库dlopen dlsym dlclose函数使用说明
- 向量的表示及协方差矩阵
- ssh首次远程登录不用输入yes|no
- JDBC连接MySQL
- php生成带logo的二维码
- SiteMesh 3.0版本的简单使用
- Eclipse中运行Hadoop程序的各种问题
- map,enumerate,zip,filter
- iPad电子课本
- 目前为止,你从你的老板或者上级那学到的最受用的一句话是什么?他(她)让你最佩服的品质又是什么?
- 本地账户文件passwd详解【Linux基础学习笔记】
- 通过 HTTPS 和 SSL 确保 Windows Azure 网站 (WAWS) 安全
- 通过 HTTPS 和 SSL 确保 Windows Azure 网站 (WAWS) 安全
- 通过 HTTPS 和 SSL 确保 Windows Azure 网站 (WAWS) 安全
- const references
- 通过 HTTPS 和 SSL 确保 Windows Azure 网站 (WAWS) 安全