构建高性能web站点

分层网络模型:OSI七层网络模型、TCP四层网络模型

带宽-数据的发送速度,而不是信号在线路中的传播速度

web服务器并发能力强弱的关键在于如何针对不同的请求性质设计最佳并发策略

并发用户数指在某一时刻同时向服务器发送请求的用户总数

吞吐率指在一定并发用户数的情况下,服务器处理请求能力的量化体现,即单位时间内处理请求数量

用户平均请求等待时间主要用户衡量服务器在一定并发用户数的情况下,对单个用户的服务质量;而服务器平均请求处理时间与前者相比,则用于衡量服务器的整体服务质量,它其实就是吞吐率的倒数。

服务器并发策略的设计就是在服务器同时处理较多请求的时候,如何合理协调并充分利用CPU计算和I/O操作,使其在较大并发用户数的情况下提供较高的吞吐率。

-----------------------------分割线----------------------------------

缓存的目的就是把需要花费昂贵开销的计算结果保存起来,在以后需要的时候直接取出,而避免重复计算,一切缓存的本质都是如此。

opcode cache的目的是减少CPU和内存开销,如果动态内容的性能瓶颈不在CPU和内存,而在于I/O操作,比如数据库查询带来的磁盘I/O开销,那么opcode cache的性能提升是非常有限的。

----------------------------分割线--------------------------------------

浏览器缓存协商的两种方式:Last-Modified、ETag。

原本使用服务器端动态缓存的动态内容,在使用浏览器缓存,能否获得较大的吞吐率提升,关键在于能否避免一些额外的计算开销。当然对于本身没有使用任何服务器端缓存的动态内容,使用浏览器缓存必然会有较大的吞吐率提升。

浏览器缓存的可以提升吞吐率,对于吞吐率提升的作用取决于http响应正文的长度;另外一个重要意义在于在使用浏览器缓存后,带宽使用大大降低。

重要的是意识到浏览器缓存在何种场景下发挥何种作用。

HTTP是浏览器和web服务器沟通的语言,也是它们沟通的唯一方法,无论多么复杂的交流,其本质最终都体现在HTTP中。

--------------------------------------------分割线---------------------------------------

web服务器可以缓存url映射关系和最终响应内容。

web服务器缓存对于动态内容或静态内容的过期检查机制建立在HHTP/1.1的对话上,除此之外,它们之间没有其他沟通方式。

web服务器缓存机制实质上是以URL为主键的key-value结构缓存,所以必须保证所有希望缓存的动态内容都有唯一的url。

提出一个问题往往要比解决一个问题更重要,因为解决问题也许仅仅只是一个教学上或实验上的技能而已。而提出新的问题、新的可能性,从新的角度去看旧的问题,都需要创造性的想象力,而且标志着科学的真正进步。    --爱因斯坦

编写面向http缓存友好的动态程序是非常必要的,它将拥有极强的生命力和适应性。

对于静态内容,特别是拥有大量小文件的站点,web服务器相当大的一部分开销花在了打开文件上,即open()系统调用,所以可以考虑将打开后的文件描述符直接缓存到web服务器的内存中,文件描述符是反映系统资源的数据结构,它也只能存在于本机内存中。

缓存文件描述符的方案只适合于静态内容,与直接将静态内容整体缓存到磁盘相比,这种方法减少了打开文件的开销。

缓存文件描述符对于较大的文件是不合适的,因为处理它们的时间主要花在送输数据上,而不是打开文件。

--------------------------------------------分割线----------------------------------

提高服务器的并发处理能力关键在于找出当前成为瓶颈的因素。

反向代理即web服务器隐藏在代理服务器之后。

反向代理的主要目的:基于缓存的加速。

----------------------------------------------分割线---------------------------------

web组件分离的目的是便于采用针对性的方法,使得各种web组件能充分有效地利用服务器资源,达到符合各自实际情况的吞吐率最大化。

---------------------------------------------分割线----------------------------------

数据库性能优化

获取当前数据库的实时状态:show status, show innodb status;更加友好的状态报告可以使用第三方MySQL状态报告工具mysqlreport,可读性更好。

正确使用索引。

使用explain分析SQL语句执行情况。

组合索引的最左前缀原则。

使用第三方慢查询分析工具:mysqlsla。

表引擎的选择:MyISAM和Innodb。

查询缓存。

临时表。

线程池。

反范式化设计。

使用key-value数据库。

---------------------------------------------分割线-----------------------------------


你可能感兴趣的:(构建高性能web站点)